it-swarm.com.de

Wie kann ich meine externe IP-Adresse in einem Shell-Skript abrufen?

Ich muss meine externe IP-Adresse aus einem Shell-Skript ermitteln. Im Moment benutze ich diese Funktion:

myip () { 
    lwp-request -o text checkip.dyndns.org | awk '{ print $NF }'
}

Aber es kommt darauf an Perl-libwww, Perl-html-format, Perl-html-tree Eingerichtet. Welche anderen Möglichkeiten kann ich meine externe IP erhalten?

288
Eugene Yarmash

Ich würde empfehlen, es direkt von einem DNS-Server zu beziehen.

Die meisten der anderen Antworten beziehen sich auf die Übertragung von HTTP an einen Remote-Server. Einige von ihnen erforderten eine Analyse der Ausgabe oder stützten sich auf den User-Agent-Header, damit der Server im Klartext reagiert. Diese ändern sich ziemlich häufig (gehen Sie runter, ändern Sie ihren Namen, schalten Sie Anzeigen, ändern Sie möglicherweise das Ausgabeformat usw.).

  1. Das DNS-Antwortprotokoll ist standardisiert (das Format bleibt kompatibel).
  2. In der Vergangenheit haben DNS-Dienste ( OpenDNS , Google Public DNS , ..) eine viel längere Lebensdauer und sind stabiler, skalierbarer und im Allgemeinen gepflegter als alle neuen hip whatismyip.com HTTP-Service ist heute heiß.
  3. Diese Methode ist von Natur aus schneller (nur wenige Millisekunden!).

Verwenden von Dig mit OpenDNS als Resolver:

Dig @resolver1.opendns.com ANY myip.opendns.com +short

Vielleicht alias es in Ihrem bashrc, so dass es leicht zu merken ist

alias wanip='Dig @resolver1.opendns.com ANY myip.opendns.com +short'

Antwortet mit einer einfachen IP-Adresse:

$ wanip
80.100.192.168 # or, 2606:4700:4700::1111

Syntax

(Abkürzung von https://ss64.com/bash/Dig.html ) :

usage:  Dig [@global-dnsserver] [q-type] <hostname> <d-opt> [q-opt]

    q-type   one of (A, ANY, AAAA, TXT, MX, ...). Default: A.

    d-opt    ...
             +[no]short          (Display nothing except short form of answer)
             ...

    q-opt    one of:
             -4                  (use IPv4 query transport only)
             -6                  (use IPv6 query transport only)
             ...

Der Abfragetyp ANY gibt entweder einen AAAA- oder einen A-Datensatz zurück. Verwenden Sie die Optionen -4 Oder -6 Entsprechend, um eine IPv4- oder IPv6-Verbindung speziell zu bevorzugen.

Ersetzen Sie ANY durch A, damit die Antwort eine IPv4-Adresse sein muss. Ersetzen Sie IPv6 durch AAAA. Beachten Sie, dass nur die für die Verbindung verwendete Adresse zurückgegeben werden kann. Wenn Sie beispielsweise eine Verbindung über IPv6 herstellen, kann die A-Adresse nicht zurückgegeben werden.

Alternative Server und Beispiele

Neben OpenDNS gibt es ähnliche DNS-Dienste von Akamai und Google:

$ Dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short
80.100.192.168

$ Dig @ns1.google.com TXT o-o.myaddr.l.google.com +short
"80.100.192.168"

Beispielalias, der speziell eine IPv4-Adresse anfordert:

alias wanip4='Dig @resolver1.opendns.com A myip.opendns.com +short -4'

$ wanip4
80.100.192.168

Und für IPv6:

alias wanip6='Dig @resolver1.opendns.com AAAA myip.opendns.com +short -6'

$ wanip6
2606:4700:4700::1111

Fehlerbehebung

Wenn der Befehl aus irgendeinem Grund nicht funktioniert, liegt möglicherweise ein Problem mit dem Upstream-Anbieter, dem Befehlszeilentool oder etwas anderem vor. Um zu verstehen, warum es nicht funktioniert, führen Sie den Befehl ohne die Option +short Aus, um die Details der DNS-Abfrage anzuzeigen. Zum Beispiel:

$ Dig @resolver1.opendns.com ANY myip.opendns.com

;; Got answer: ->>HEADER<<- opcode: QUERY, status: NOERROR

;; QUESTION SECTION:
;myip.opendns.com.      IN  ANY

;; ANSWER SECTION:
myip.opendns.com.   0   IN  AAAA    2606:4700:4700::1111

;; Query time: 4 msec
;; WHEN: Fri Apr 11 00:00:01 GMT 2011
465
Timo Tijhof

HINWEIS: Hierbei handelt es sich um eine externe IP-Adresse (die die Server im Internet sehen, wenn Sie eine Verbindung zu ihnen herstellen) - wenn Sie möchten interne IP-Adresse (die, die Ihr eigener Computer für Verbindungen verwendet, die möglicherweise unterschiedlich sind) siehe diese Antwort .

TL; DR - Schnellste Methoden im Jahr 2015

Die schnellste Methode mit DNS:

Dig +short myip.opendns.com @resolver1.opendns.com

oder mit externalip :

externalip dns

Am schnellsten mit HTTP:

curl -s http://whatismyip.akamai.com/

oder mit externalip:

externalip http

Am schnellsten mit HTTPS mit einem gültigen Zertifikat:

curl -s https://4.ifcfg.me/

oder mit externalip:

externalip https

Verwenden von Telnet:

Mit dem Befehl nc:

nc 4.ifcfg.me 23 | grep IPv4 | cut -d' ' -f4

oder mit externalip:

externalip telnet

Mit dem Befehl telnet:

telnet 4.ifcfg.me 2>&1 | grep IPv4 | cut -d' ' -f4

Verwenden von FTP:

echo close | ftp 4.ifcfg.me | awk '{print $4; exit}'

oder mit externalip:

externalip ftp

Alle oben genannten Funktionen können mit meinem Skript externalip ausgeführt werden als:

externalip dns
externalip http
externalip https
externalip telnet
externalip ftp

Nun eine lange Geschichte ...

Es gibt viele Optionen für verschiedene Server, die die externe IP bereitstellen, insbesondere über HTTP, das hier oder anderswo veröffentlicht wird.

Ich habe einen Benchmark erstellt, um festzustellen, ob einer von ihnen besser ist als die anderen, und ich war von den Ergebnissen überrascht. Z.B. Eine der am häufigsten empfohlenen ifconfig.me war für mich fast immer die langsamste, manchmal dauerte es viele Sekunden, um zu antworten. Viele arbeiten nicht über HTTPS oder arbeiten, haben aber ungültige Zertifikate. Einige haben sehr inkonsistente Antwortzeiten.

Benchmarks

HTTP und HTTPS

Dies ist die Quelle meines externen IP-Benchmark-Skripts, das ich verwendet habe:

Sie können es selbst ausführen, um zu sehen, welche der hier genannten Dienste es wert sind, verwendet zu werden:

wget https://raw.githubusercontent.com/rsp/scripts/master/externalip-benchmark
chmod a+x externalip-benchmark
./externalip-benchmark

Meine Ergebnisse, die ich am 03.04.2015 aus Warschau erhalten habe - die Adressen wurden geändert, um die Unschuldigen zu schützen:

Beste http-Antwortzeiten:

0.086s http://ip.tyk.nu/ - answer='172.31.133.7'
0.089s http://whatismyip.akamai.com/ - answer='172.31.133.7'
0.091s http://tnx.nl/ip - answer='172.31.133.7'
0.117s http://ifcfg.me/ - answer='172.31.133.7'
0.156s http://l2.io/ip - answer='172.31.133.7'
0.317s http://ip.appspot.com/ - answer='172.31.133.7'
0.336s http://ident.me/ - answer='172.31.133.7'
0.338s http://ipof.in/txt - answer='172.31.133.7'
0.347s http://icanhazip.com/ - answer='172.31.133.7'
0.496s http://curlmyip.com/ - answer='172.31.133.7'
0.527s http://wgetip.com/ - answer='172.31.133.7'
0.548s http://curlmyip.com/ - answer='172.31.133.7'
0.665s http://bot.whatismyipaddress.com/ - answer='172.31.133.7'
0.665s http://eth0.me/ - answer='172.31.133.7'
1.041s http://ifconfig.me/ - answer='172.31.133.7'
1.049s http://corz.org/ip - answer='172.31.133.7'
1.598s http://ipecho.net/plain - answer='172.31.133.7'

Beste https-Antwortzeiten:

0.028s https://curlmyip.com/ - answer=''
0.028s https://curlmyip.com/ - answer=''
0.029s https://l2.io/ip - answer=''
0.029s https://tnx.nl/ip - answer=''
0.072s https://whatismyip.akamai.com/ - answer=''
0.113s https://ipecho.net/plain - answer=''
0.117s https://ident.me/ - answer=''
0.207s https://ip.tyk.nu/ - answer='172.31.133.7'
0.214s https://ipof.in/txt - answer='172.31.133.7'
0.259s https://ifcfg.me/ - answer='172.31.133.7'
0.289s https://corz.org/ip - answer=''
0.436s https://ip.appspot.com/ - answer='172.31.133.7'
0.448s https://bot.whatismyipaddress.com/ - answer=''
0.454s https://eth0.me/ - answer=''
0.673s https://icanhazip.com/ - answer='172.31.133.7'
5.255s https://ifconfig.me/ - answer=''
10.000s https://wgetip.com/ - answer=''

(Hinweis: Es gibt einige schnelle Antworten mit leerem Inhalt - diese sind ungültig.)

Beste durchschnittliche Ping-Zeiten:

10.210 //whatismyip.akamai.com/
36.820 //tnx.nl/ip
37.169 //ip.tyk.nu/
39.412 //ipof.in/txt
40.967 //ident.me/
41.257 //ipecho.net/plain
43.918 //ifcfg.me/
45.720 //l2.io/ip
64.749 //ip.appspot.com/
123.412 //corz.org/ip
134.245 //wgetip.com/
157.997 //icanhazip.com/
161.613 //curlmyip.com/
162.100 //curlmyip.com/
268.734 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/

Hier sind die Ergebnisse, die ich am 03.04.2015 aus Amsterdam erhalten habe:

Beste http-Antwortzeiten:

0.021s http://ipecho.net/plain - answer='172.31.13.37'
0.027s http://tnx.nl/ip - answer='172.31.13.37'
0.035s http://whatismyip.akamai.com/ - answer='172.31.13.37'
0.039s http://ifcfg.me/ - answer='172.31.13.37'
0.045s http://l2.io/ip - answer='172.31.13.37'
0.142s http://ident.me/ - answer='172.31.13.37'
0.144s http://ipof.in/txt - answer='172.31.13.37'
0.150s http://ip.appspot.com/ - answer='172.31.13.37'
0.150s http://ip.tyk.nu/ - answer='172.31.13.37'
0.170s http://icanhazip.com/ - answer='172.31.13.37'
0.190s http://eth0.me/ - answer='172.31.13.37'
0.191s http://wgetip.com/ - answer='172.31.13.37'
0.301s http://curlmyip.com/ - answer='172.31.13.37'
0.330s http://bot.whatismyipaddress.com/ - answer='172.31.13.37'
0.343s http://curlmyip.com/ - answer='172.31.13.37'
0.485s http://corz.org/ip - answer='172.31.13.37'
3.549s http://ifconfig.me/ - answer='172.31.13.37'

Beste https-Antwortzeiten:

0.004s https://curlmyip.com/ - answer=''
0.012s https://curlmyip.com/ - answer=''
0.012s https://tnx.nl/ip - answer=''
0.016s https://ipecho.net/plain - answer=''
0.071s https://whatismyip.akamai.com/ - answer=''
0.096s https://ifcfg.me/ - answer='172.31.13.37'
0.097s https://ident.me/ - answer=''
0.187s https://corz.org/ip - answer=''
0.187s https://ip.appspot.com/ - answer='172.31.13.37'
0.189s https://ip.tyk.nu/ - answer='172.31.13.37'
0.195s https://eth0.me/ - answer=''
0.253s https://l2.io/ip - answer=''
0.300s https://ipof.in/txt - answer='172.31.13.37'
0.324s https://bot.whatismyipaddress.com/ - answer=''
0.512s https://icanhazip.com/ - answer='172.31.13.37'
1.272s https://ifconfig.me/ - answer=''
10.002s https://wgetip.com/ - answer=''

Beste durchschnittliche Ping-Zeiten:

1.020 //ipecho.net/plain
1.087 //whatismyip.akamai.com/
5.011 //ip.appspot.com/
6.942 //ident.me/
7.017 //ipof.in/txt
8.209 //tnx.nl/ip
11.343 //ip.tyk.nu/
12.647 //ifcfg.me/
13.828 //l2.io/ip
81.642 //icanhazip.com/
85.447 //wgetip.com/
91.473 //corz.org/ip
102.569 //curlmyip.com/
102.627 //curlmyip.com/
247.052 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/

(Die 999999-Pings bedeuten 100% Paketverlust.)

DNS

Zum Vergleich hier sind Zeiten, die andere Methoden am 16.06.2015 aus Warschau und Amsterdam getestet haben.

Verwenden von:

time Dig +short myip.opendns.com @resolver1.opendns.com

dauert normalerweise (echte Wanduhrzeit) ungefähr:

  • 0.035s aus Warschau
  • 0.015s von Amsterdam

Es gibt tatsächlich vier Resolver, die auf diese Weise verwendet werden können:

  • resolver1.opendns.com
  • resolver2.opendns.com
  • resolver3.opendns.com
  • resolver4.opendns.com

Sie alle geben in Warschau und Amsterdam die gleichen Reaktionszeiten an, an anderen Standorten ist dies jedoch möglicherweise nicht der Fall.

Bei Verwendung von 208.67.222.222 ist die IP von resolver1.opendns.com anstelle des Domainnamens schneller:

  • 0,023 Sekunden aus Warschau
  • 0,009s von Amsterdam

funktioniert aber möglicherweise in Zukunft nicht, wenn sich die IP jemals ändert (obwohl es für einen bekannten DNS-Resolver unwahrscheinlich ist - vielleicht sollte ich die IP in meinem externalip Skript verwenden - bitte kommentieren).

Telnet

Telnet mit dem Befehl nc oder telnet (siehe oben) benötigt normalerweise:

  • 0,103s aus Warschau
  • 0,035 s von Amsterdam

(Es gibt keinen merklichen Unterschied zwischen den Befehlen nc und telnet.)

FTP

  • 0,104s aus Warschau
  • 0,036 s von Amsterdam

Domain Namen

Alle Methoden sind schneller (insbesondere beim ersten Ausführen), wenn IP-Adressen anstelle der Domänennamen der angegebenen Dienste verwendet werden (außer bei HTTP, das hostbasierte virtuelle Server verwenden kann und nicht mit bloßer IP arbeitet - nicht getestet), funktioniert aber nicht mehr, wenn die Dienste die IP-Adresse ändern, sodass sie möglicherweise schneller, aber weniger zukunftssicher ist.

Bemerkungen

Wenn Sie einige interessante Ergebnisse von Ihrem Standort sehen oder wenn Sie der Meinung sind, dass andere Hosts anstelle der von mir ausgewählten empfohlen werden sollten, schreiben Sie bitte einen Kommentar. Wenn ein wichtiger Dienst fehlt, kommentieren Sie bitte oder ein Problem posten auf GitHub. Ich möchte diesen Beitrag mit einer aktuellen Auswahl der leistungsstärksten Dienste auf dem neuesten Stand halten.

157
rsp
 curl -s http://whatismijnip.nl |cut -d " " -f 5

Ersetzte Stelle durch holländische Arbeitsstelle.

83
Maciek Sawicki

Da whatsmyip.org und ifconfig.me bereits erwähnt wurden:

curl -s icanhazip.com
56
joschi

Sie können ifconfig.me als Alternative zu whatismyip.org verwenden.

curl -s http://ifconfig.me

Auch ifconfig.me hat einige zusätzliche Funktionen. Um herauszufinden, welche weiteren Informationen Sie erhalten können, besuchen Sie die Website.

19
Mr. Deathless

Amazon AWS

curl https://checkip.amazonaws.com

Beispielausgabe:

123.123.123.123

Ich mag es weil:

  • es gibt nur die Klartext-IP zurück, sonst nichts
  • es ist von einem bekannten Anbieter, der wahrscheinlich nicht bald offline gehen wird
wget -O - -q http://whatismyip.org/
16
ztank1013
curl ident.me

OR

curl ifconfig.me

OR

curl tnx.nl/ip

OR

curl ipecho.net/plain

OR

curl ip.appspot.com

OR

curl whatismyip.akamai.com

OR

curl icanhazip.com

OR

curl wgetip.com

OR

curl ip.tyk.nu

OR

curl curlmyip.com

OR

curl corz.org/ip

OR

curl bot.whatismyipaddress.com

Referenz

9
Mandar Shinde

Ich bevorzuge curlmyip.com. Es ist so einfach wie:

curl curlmyip.com

Es ist kurz und einfach zu merken.

8
netcat icanhazip.com 80 <<< $'GET / HTTP/1.1\nHost: icanhazip.com\n\n' | tail -n1
7
Eugene Yarmash

Wenn Sie nach dem Lesen all dieser Vorschläge noch mehr lesen möchten, finden Sie hier ein wohl überentwickeltes Bash-Skript.

Es enthält eine Liste von DNS- und HTTP-Servern, die ab Februar 2017 einwandfrei zu funktionieren scheinen.

Wenn Sie Dig haben, versucht es zuerst DNS, das fast eine Größenordnung schneller ist als die verschiedenen HTTP-Dienste.

Es wird bei der ersten Antwort beendet.

Wenn Sie nicht über Dig verfügen oder alle DNS-Server ausgefallen sind, werden die HTTP-Dienste ausprobiert, bis eine Antwort angezeigt wird.

Die Server sind alphabetisch aufgelistet, werden jedoch vor der Verwendung gemischt, um zu vermeiden, dass immer dieselben verwendet werden.

#!/bin/bash

## Get my external IP

timeout=2   # seconds to wait for a reply before trying next server
verbose=1   # prints which server was used to STDERR

dnslist=(
    "Dig +short            myip.opendns.com        @resolver1.opendns.com"
    "Dig +short            myip.opendns.com        @resolver2.opendns.com"
    "Dig +short            myip.opendns.com        @resolver3.opendns.com"
    "Dig +short            myip.opendns.com        @resolver4.opendns.com"
    "Dig +short    -t txt  o-o.myaddr.l.google.com @ns1.google.com"
    "Dig +short -4 -t a    whoami.akamai.net       @ns1-1.akamaitech.net"
    "Dig +short            whoami.akamai.net       @ns1-1.akamaitech.net"
)

httplist=(
    4.ifcfg.me
    alma.ch/myip.cgi
    api.infoip.io/ip
    api.ipify.org
    bot.whatismyipaddress.com
    canhazip.com
    checkip.amazonaws.com
    eth0.me
    icanhazip.com
    ident.me
    ipecho.net/plain
    ipinfo.io/ip
    ipof.in/txt
    ip.tyk.nu
    l2.io/ip
    smart-ip.net/myip
    tnx.nl/ip
    wgetip.com
    whatismyip.akamai.com
)



# function to shuffle the global array "array"
shuffle() {
   local i tmp size max Rand
   size=${#array[*]}
   max=$(( 32768 / size * size ))
   for ((i=size-1; i>0; i--)); do
      while (( (Rand=$RANDOM) >= max )); do :; done
      Rand=$(( Rand % (i+1) ))
      tmp=${array[i]} array[i]=${array[Rand]} array[Rand]=$tmp
   done
}


## if we have Dig and a list of dns methods, try that first
if hash Dig 2>/dev/null && [ ${#dnslist[*]} -gt 0 ]; then
    eval array=( \"\${dnslist[@]}\" )
    shuffle

    for cmd in "${array[@]}"; do
        [ "$verbose" == 1 ] && echo Trying: $cmd 1>&2
        ip=$(timeout $timeout $cmd)
        if [ -n "$ip" ]; then
            echo $ip
            exit
        fi
    done
fi


# if we haven't succeeded with DNS, try HTTP

if [ ${#httplist[*]} == 0 ]; then
    echo "No hosts in httplist array!" >&2
    exit 1
fi

# use curl or wget, depending on which one we find
curl_or_wget=$(if hash curl 2>/dev/null; then echo "curl -s"; Elif hash wget 2>/dev/null; then echo "wget -qO-"; fi);

if [ -z "$curl_or_wget" ]; then
    echo "Neither curl nor wget found. Cannot use http method." >&2
    exit 1
fi

eval array=( \"\${httplist[@]}\" )
shuffle

for url in "${array[@]}"; do
    [ "$verbose" == 1 ] && echo Trying: $curl_or_wget  "$url" 1>&2
    ip=$(timeout $timeout $curl_or_wget "$url")
    if [ -n "$ip" ]; then
        echo $ip
        exit
    fi
done

Beispielnutzung (ich habe das Skript myip genannt):

$ myip
Trying: Dig +short -t txt o-o.myaddr.l.google.com @ns1.google.com
"151.101.65.69"

$ ip=$(myip); echo "IP = '$ip'"
Trying: Dig +short myip.opendns.com @resolver1.opendns.com
IP = '151.101.65.69'

Kommentieren Sie die Variable verbose oben im Skript aus, um zu vermeiden, dass der verwendete Server gedruckt wird.

Update: Dieses Skript befindet sich jetzt auch auf Github, wo ich es bei Bedarf aktualisieren kann:
https://github.com/mivk/myip

6
mivk

Das funktioniert immer bei mir, ich benutze es in meinem Conky, um meine IP-Adresse zu bekommen.

wget -q -O - checkip.dyndns.org | sed -e 's/[^[:digit:]\|.]//g'
4
Dai_Trying

ifcfg.me unterstützt:

curl ifcfg.me
nslookup . ifcfg.me
telnet ifcfg.me
ftp ifcfg.me
finger @ifcfg.me

IPv4 und IPv6, noch mehr Sachen mit Curl: ifcfg.me/?

3
Eun

Da ich mich nicht auf die Verbindung oder den Dienst verlasse, verwende ich den folgenden Code, der versucht, die IP über verschiedene Dienste abzurufen (Sie können gerne weitere hinzufügen):

# Get my ip address and put in a file
declare -a arr=("ipecho.net/plain" "ident.me" "tnx.nl/ip" "ip.appspot.com" "https://shtuff.it/myip/short/")
IP=$(curl -s --retry 3 --retry-delay 10 ipecho.net/plain)

while [ -z "$IP" ] # If no IP found yet, keep trying!
do
    sleep 30
    IP=$(curl -s --retry 3 --retry-delay 10 ${arr[$((  RANDOM % ${#arr[@]}  ))]})  
done

echo -n "$IP" >  /root/clientIP.txt #puts ip address in clientIP.txt
echo "Our address is $IP" 

Um die Robustheit zu erhöhen (z. B. wenn einer der Dienste sein Format ändert), können Sie überprüfen, ob $IP ist eine gültige IP mit der folgenden Funktion :

# Verify that the parameter passed is an IP Address:
# http://zindilis.com/blog/2013/05/10/bash-check-that-string-is-ip.html
# @Author: Marios Zindilis
# @License: Creative Commons Attribution-ShareAlike 4.0 International License.
# @Date: 2013-05-10
function is_IP() {
if [ `echo $1 | grep -o '\.' | wc -l` -ne 3 ]; then
        echo "Parameter '$1' does not look like an IP Address (does not contain 3 dots).";
        exit 1;
Elif [ `echo $1 | tr '.' ' ' | wc -w` -ne 4 ]; then
        echo "Parameter '$1' does not look like an IP Address (does not contain 4 octets).";
        exit 1;
else
        for OCTET in `echo $1 | tr '.' ' '`; do
                if ! [[ $OCTET =~ ^[0-9]+$ ]]; then
                        echo "Parameter '$1' does not look like in IP Address (octet '$OCTET' is not numeric).";
                        exit 1;
                Elif [[ $OCTET -lt 0 || $OCTET -gt 255 ]]; then
                        echo "Parameter '$1' does not look like in IP Address (octet '$OCTET' in not in range 0-255).";
                        exit 1;
                fi
        done
fi

return 0;
}
3

Wenn Sie HTTPS verwenden möchten, um mögliche Fallstricke zu vermeiden:

_result=$(wget -qO- https://ipcheckit.com/)
_result="${_result##*Your IP address is<br><b>}"
printf '%s\n' "${_result%%</b></p>*}"
3
Chris Down

Hier ist eine weitere Alternative, die von Hosts abhängt, deren Geschäft sich mit der Verwaltung dynamischer IP-Adressen befasst, und nicht mit "öffentlichen" Websites, die möglicherweise verschwinden oder das Format ändern.

  1. Registrieren Sie Ihren Server bei einem der vielen kostenlosen dynamischen DNS-Dienste (z. B. no-ip.com). Dadurch erhalten Sie einen DNS-Eintrag wie xxx.no-ip.org.
  2. Installieren Sie das dynamische Update-Tool des Dienstes (meldet IP-Änderungen an den Dienst).

Um die IP-Adresse in einem Skript abzurufen, gehen Sie einfach wie folgt vor:

external_ip=`Dig +short xxx.no-ip.org`

Ideal für die Verwendung in Cron-Jobs, um zu überprüfen, ob sich die dynamische IP geändert hat und einige Konfigurationseinträge geändert werden müssen.

3
cgmonroe

Dies zeigt die aktuelle IP-Adresse in einem Popup-Fenster an:

zenity --info --text "$(curl -s icanhazip.com)"
2
basic6

Ich betreibe einen Cloud-Dienst für meine Familie und habe dieses schnelle Skript erstellt, das ich jeden Morgen um 5 Uhr in einem cron ausführe, weil ich billig bin und keine statische IP kaufe.

Es erfasst die öffentliche IP und sendet sie per E-Mail an meine Benutzer. E-Mail im Hyperlink-Format erstellt, damit meine Mutter die Ports oder ähnliches nicht eingeben muss. Vielleicht kann es jemand anderes benutzen.

#!/bin/bash
ipvariable=$(wget http://ipecho.net/plain -O - -q);

echo "Today the location is http://$ipvariable:123456/foldertheyreach" | mail -s   "From your friendly cloud service provider" [email protected], [email protected]
2
Will

Ich habe einen Dienst eingerichtet, der die IP-Adresse als JSON/XML oder Klartext zurückgibt. Sie finden sie hier

http://ipof.in/txt

Dieselbe URL mit/json und/xml gibt Ihnen auch andere Formate

Wenn Sie HTTPS möchten, können Sie dieselben URLs mit dem Präfix https verwenden. Der Vorteil ist, dass Sie auch dann die öffentliche Adresse erhalten, wenn Sie über WLAN verfügen.

Ein einfacher Alias ​​myip = "curl https://ipof.in/txt " erhält Ihre IP

1
vivekv

Wenn Sie eine DNS-Anfrage auch hinter einem NAT Router, der DNS-Adressen übersetzt) ​​verwenden, kann dies funktionieren:

$ Dig +short -t txt o-o.myaddr.l.google.com @ns1.google.com | cut -d'"' -f2
x.y.z.t

oder Sie können stattdessen die HTTP-Anforderungsmethode verwenden:

$ curl -s ipinfo.io/ip
x.y.z.t
0
SebMa

Verwenden Sie curl, um den IP-Dienst von shtuff.it zu aktivieren

curl -s https://shtuff.it/myip/short
0
Chris Montanaro

Alternativ können Sie STUN verwenden, das erfunden wurde, um diese Frage automatisiert zu beantworten, und das in der Internetkommunikation, z. von SIP und WebRTC .

Verwenden eines Stunclient (auf debian/ubuntu do apt-get install stuntman-client) einfach machen:

$ stunclient stun.services.mozilla.com
Binding test: success
Local address: A.B.C.D:42541
Mapped address: W.X.Y.Z:42541

wo A.B.C.D ist die IP-Adresse Ihres Computers im lokalen Netz und W.X.Y.Z sind die IP-Adressserver, die Websites von außen sehen (und die Sie suchen). Mit sed können Sie die obige Ausgabe nur auf eine IP-Adresse reduzieren:

stunclient stun.services.mozilla.com |
    sed -ne "s/^Mapped address: \(.*\):.*$/\1/p"

Eine alternative STUN-Suche mit nur grundlegenden Befehlszeilentools finden Sie unter meine Antwort auf AskUbunt (als unterhaltsame Übung gedacht, nicht für die Produktion).

0
Victor Klos

Der w3m Plaintext-Browser eignet sich hervorragend für die Bash. Sie können grep und tail verwenden, um die Antwort wie folgt zu verkürzen:

w3m -no-cookie -dump "http://www.whatismyip.com/" | grep -A 1 -m 1 "Your IP:" | tail -n 1
0
McPeppr