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 hängt davon ab perl-libwww
, perl-html-format
, perl-html-tree
installiert. Welche anderen Möglichkeiten gibt es, um meine externe IP zu erhalten?
linux
shell-script
ip
Eugene Yarmash
quelle
quelle
Antworten:
Ich würde empfehlen, es direkt von einem DNS-Server zu beziehen.
Die meisten anderen Antworten beziehen sich auf das Übermitteln von HTTP an einen Remoteserver. Einige von ihnen mussten die Ausgabe analysieren oder stützten sich auf den User-Agent-Header, damit der Server im Klartext antwortete. Diese ändern sich ziemlich häufig (gehen Sie runter, ändern Sie ihren Namen, schalten Sie Anzeigen, ändern Sie möglicherweise das Ausgabeformat usw.).
Verwendung
dig
mit OpenDNS als Resolver:Vielleicht auch als Alias in Ihrem,
bashrc
so dass Sie sich leicht daran erinnern könnenAntwortet mit einer einfachen IP-Adresse:
Syntax
(Abgekürzt von https://ss64.com/bash/dig.html ) :
Der
ANY
Abfragetyp gibt entweder einen AAAA- oder einen A-Datensatz zurück. Verwenden Sie die Optionen-4
oder , um IPv4- oder IPv6-Verbindungen speziell zu bevorzugen-6
.Wenn die Antwort eine IPv4-Adresse sein soll, ersetzen Sie ANY durch
A
; Ersetzen Sie IPv6 durchAAAA
.Bitte 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:
Beispielalias, der speziell eine IPv4-Adresse anfordert:
Und für IPv6:
Fehlerbehebung
Wenn der Befehl aus irgendeinem Grund nicht funktioniert, liegt möglicherweise ein Problem mit dem Upstream-Anbieter, dem Befehlszeilentool oder etwas anderem vor. Führen Sie den Befehl ohne die
+short
Option zum Anzeigen der Details der DNS-Abfrage aus, um zu verstehen, warum er nicht funktioniert . Zum Beispiel:quelle
myip.opendns.com
in Googles Public DNS?curl http://canhazip.com
. Siehe askubuntu.com/a/427092/2273Hinweis: Dies ist über externe IP - Adresse (die, die die Server im Internet sehen , wenn Sie mit ihnen verbinden) - wenn Sie möchten , interne IP - Adresse (die, die Ihren eigenen Computer für Verbindungen verwendet, die unterschiedlich sein können) sehen diese antworte .
TL; DR - Schnellste Methoden im Jahr 2015
Die schnellste Methode mit DNS:
oder mit externalip :
Am schnellsten über HTTP:
oder mit externalip:
Die schnellste Verwendung von HTTPS mit einem gültigen Zertifikat:
oder mit externalip:
Verwendung von Telnet:
Mit
nc
Befehl:oder mit externalip:
Mit
telnet
Befehl:Verwendung von FTP:
oder mit externalip:
Alle oben genannten Funktionen können mit meinem externalip- Skript ausgeführt werden als:
Nun eine lange Geschichte ...
Es gibt eine Vielzahl von 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. ZB war eine der am häufigsten empfohlenen ifconfig.me-Dateien für mich fast immer die langsamste. Manchmal dauerte es viele Sekunden, bis ich antwortete. Viele arbeiten nicht über HTTPS oder haben ungültige Zertifikate. Einige haben sehr inkonsistente Antwortzeiten.
Benchmarks
HTTP und HTTPS
Dies ist die Quelle meines externalip-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:
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:
Beste https-Antwortzeiten:
(Hinweis: Es gibt einige schnelle Antworten mit leerem Inhalt - diese sind ungültig.)
Beste durchschnittliche Pingzeiten:
Hier sind die Ergebnisse, die ich am 03.04.2015 aus Amsterdam erhalten habe:
Beste http-Antwortzeiten:
Beste https-Antwortzeiten:
Beste durchschnittliche Pingzeiten:
(Die 999999 Pings bedeuten 100% Paketverlust.)
DNS
Zum Vergleich hier Zeiten, die andere Methoden am 16.06.2015 aus Warschau und Amsterdam erprobt haben.
Verwenden von:
In der Regel dauert (echte Wanduhrzeit) etwa:
Es gibt tatsächlich vier Resolver, die auf diese Weise verwendet werden können:
In Warschau und Amsterdam geben alle die gleichen Antwortzeiten an, in anderen Ländern ist dies jedoch möglicherweise nicht der Fall.
Bei Verwendung von 208.67.222.222 ist die IP von resolver1.opendns.com anstelle des Domänennamens schneller:
Sollte sich die IP jemals ändern, funktioniert dies möglicherweise in Zukunft nicht mehr (obwohl dies für einen bekannten DNS-Resolver unwahrscheinlich ist - möglicherweise sollte ich die IP in meinem externalip- Skript verwenden - bitte kommentieren).
Telnet
Telnet mit
nc
odertelnet
Befehl (so) benötigt normalerweise:(Es gibt keinen merklichen Unterschied zwischen
nc
undtelnet
Befehlen.)FTP
Domain Namen
Alle Methoden sind schneller (insbesondere bei der ersten Ausführung), wenn IP-Adressen anstelle der Domänennamen der angegebenen Dienste verwendet werden (mit Ausnahme von HTTP, das hostbasierte virtuelle Server verwenden kann und nicht mit nackter IP funktioniert - nicht getestet), funktioniert jedoch nicht mehr, wenn die Dienste die IP-Adresse ändern, sodass sie möglicherweise schneller, aber weniger zukunftssicher ist.
Bemerkungen
Wenn Sie interessante Ergebnisse von Ihrem Standort aus sehen oder der Meinung sind, dass anstelle der von mir ausgewählten Hosts andere Hosts empfohlen werden sollten, geben Sie bitte einen Kommentar ab. Wenn ein wichtiger Dienst fehlt, kommentieren oder posten Sie bitte ein Problem auf GitHub. Ich möchte diesen Beitrag mit einer aktuellen Auswahl der leistungsstärksten Dienste auf dem Laufenden halten.
quelle
myip.opendns.com
DNS-Methode mit der von Krinkle verglichen ? Derzeit scheint es, dass dies standardmäßig der Gewinner ist, da keine anderen Anbieter für diese Methode bekannt sind. Ein Vergleich mit den anderen Methoden ist jedoch weiterhin sinnvoll.dig +short myip.opendns.com @resolver1.opendns.com
(36.86.63.180),dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short
(118.98.115.34) undcurl http://canhazip.com
(36.71.64.71) unterschiedliche Ergebnisse . Wie kann ich entscheiden, welche richtig ist?Site durch holländische funktionierende Site ersetzt.
quelle
-s
Option in diesem Fall wirklich notwendig? Ich habe es mit / ohne Fedora 15 - Bash 4.2.10 (1) versucht und es hat in beide Richtungen funktioniert.whatismyip.com
hat den kostenlosen Dienst zur Überprüfung der externen IP entfernt. Ich fürchte, das ist nicht mehr richtig.icanhazip.com
funktioniert noch.Da whatsmyip.org und ifconfig.me bereits erwähnt wurden:
quelle
curl
Lösungen (obwohl gültig) hängen noch von einer externen Bibliothek ab (libcurl
).Sie können ifconfig.me als Alternative zu whatismyip.org verwenden.
Auch ifconfig.me hat einige zusätzliche Funktionen. Um herauszufinden, welche weiteren Informationen Sie erhalten können, besuchen Sie die Website.
quelle
quelle
<img src='ipimg.php'/>
$ curl -s http://whatismyip.org | grep -o '\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}'
Amazon AWS
Beispielausgabe:
Ich mag es weil:
quelle
Ich bevorzuge curlmyip.com Es ist so einfach wie:
curl curlmyip.com
Es ist kurz und einfach zu merken.
quelle
bash
- der Absicht des OP - können Sie nicht auf die-s
in anderen Antworten erwähnte Option verzichten.-s
Switch führt ihn nur im unbeaufsichtigten Modus aus, d. H. Fehlermeldungen werden nicht angezeigt. Es kommt also darauf an, wie sein Skript mit Fehlern umgehen soll. Der Befehl selbst gibt genauso zuverlässig eine IP-Adresse zurück wie der Befehl-s
.ODER
ODER
ODER
ODER
ODER
ODER
ODER
ODER
ODER
ODER
ODER
Referenz
quelle
quelle
wget icanhazip.com
funktioniert.| tail -n1
Teil wegzulassen und zu sehen, was Sie vom Proxy erhaltennetcat icanhazip.com 80
. Sieht so aus, als würde es ignoriert$http_proxy
und Freunde, weil das Angeben des Proxys und des Ports mit-x
nur zu einem hängenden Prozess geführt hat.netcat proxy 3128 <<<$'GET http://icanhazip.com/ HTTP/1.0\n\n' | tail -n 1
Für einen einfachen HTTP-Proxy (vorausgesetzt, er wird auf Port 3128 ausgeführt). Die IP-Adresse des Proxys erhalten Sie natürlich zurück.Host:
Anforderungsheader. Das namensbasierte virtuelle Hosting war eine der wichtigsten Verbesserungen in HTTP 1.1. Ändern Sie entweder die Anforderung, um HTTP / 1.1 anzugeben, oder entfernen Sie den Host-Header (ich empfehle den ersteren).Wenn Sie nach dem Lesen all dieser Vorschläge noch mehr lesen möchten, finden Sie hier ein wohl überarbeitetes Bash-Skript.
Es enthält eine Liste von DNS- und HTTP-Servern, die anscheinend ab Februar 2017 einwandfrei funktionieren.
Wenn ja
dig
, versucht es zuerst DNS, das fast eine Größenordnung schneller ist als die verschiedenen HTTP-Dienste.Es wird bei der ersten Antwort beendet, die es erhält.
Wenn dies nicht der Fall ist
dig
oder wenn alle DNS-Server ausgefallen sind, werden die HTTP-Dienste überprüft, bis eine Antwort eingeht.Die Server sind alphabetisch aufgelistet, werden jedoch vor der Verwendung gemischt, um zu vermeiden, dass immer derselbe verwendet wird.
Anwendungsbeispiel (ich habe das Skript aufgerufen
myip
):Kommentieren Sie die
verbose
Variable oben im Skript aus, um zu vermeiden, dass der verwendete Server gedruckt wird.Update: Dieses Skript ist jetzt auch auf Github verfügbar, wo ich es bei Bedarf aktualisieren kann:
https://github.com/mivk/myip
quelle
Wenn Sie HTTPS verwenden möchten, um einige potenzielle Fallstricke zu vermeiden:
quelle
Hier ist eine weitere Alternative, die von Hosts abhängt, deren Geschäft sich um die Verwaltung dynamischer IP-Adressen dreht, und nicht um "öffentliche" Websites, die möglicherweise nicht mehr funktionieren oder das Format ändern.
Gehen Sie wie folgt vor, um die IP-Adresse in einem Skript abzurufen:
Hervorragend für die Verwendung in Cron-Jobs geeignet, um zu überprüfen, ob sich die dynamische IP geändert hat und einige Konfigurationseinträge geändert werden müssen.
quelle
Das funktioniert immer bei mir, ich benutze es in meinem conky, um meine IP-Adresse zu bekommen.
quelle
amazonaws
. Das heißt, wenn Sie KEINE Möglichkeit haben, danach zu googeln. (nicht einmallynx
).Da ich nicht auf die Verbindung oder den Dienst angewiesen bin, verwende ich den folgenden Code, mit dem versucht wird, die IP mithilfe verschiedener Dienste abzurufen (Sie können auch weitere hinzufügen):
Um die Robustheit zu erhöhen (z. B. wenn einer der Dienste sein Format ändert), können Sie
$IP
mithilfe der folgenden Funktion überprüfen, ob es sich um eine gültige IP-Adresse handelt :quelle
ifcfg.me unterstützt:
IPv4 und IPv6, noch mehr Sachen mit Curl: ifcfg.me/?
quelle
nslookup
Beziehung steht die Methode zurdig
Methode in Krinkles Antwort ? Sie benutzen beide DNS, richtig? Kann ich also eine Option zumdig
Abrufen desselben DNS-Eintrags übergeben,nslookup
der hier ausgeführt wird?dig +short . @ifcfg.me
wenn Sie möchtenIch betreibe einen Cloud-Dienst für meine Familie und habe dieses schnelle Skript erstellt, das ich
cron
jeden Morgen um 5 Uhr 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. Es wurde eine E-Mail im Hyperlink-Format erstellt, sodass meine Mutter die Ports oder etwas anderes nicht eingeben muss. Vielleicht kann jemand anderes damit umgehen.
quelle
Dies zeigt die aktuelle IP-Adresse in einem Popup-Fenster an:
quelle
Ich habe einen Dienst eingerichtet, der die IP-Adresse als JSON / XML oder Nur-Text 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 die öffentliche Adresse erhalten, auch wenn Sie in einem Wifi sind.
Ein einfacher Alias myip = "curl https://ipof.in/txt " wird Ihre IP erhalten
quelle
Alternativ können Sie STUN verwenden, das erfunden wurde, um diese Frage automatisiert zu beantworten und in der Internetkommunikation, z. B. von SIP und WebRTC, häufig verwendet wird .
Mit einem Stunclient (unter debian / ubuntu do
apt-get install stuntman-client
) machen Sie einfach:Wo
A.B.C.D
ist die IP-Adresse Ihres Rechners im lokalen Netz und woW.X.Y.Z
sind die IP-Adressenserver, die Websites von außen sehen (und die, die Sie suchen)? Mit könnensed
Sie die Ausgabe oben auf nur eine IP-Adresse reduzieren:Eine alternative STUN-Suche mit nur grundlegenden Befehlszeilentools finden Sie in meiner Antwort auf AskUbuntu (gedacht als unterhaltsame Übung, nicht für den produktiven Gebrauch).
quelle
Der w3m Plaintext-Browser eignet sich hervorragend für die Bash. Sie können
grep
und verwendentail
, um die Antwort wie folgt zu verkürzen:quelle
Verwenden Sie curl, um auf den IP-Service von shtuff.it zuzugreifen
quelle
Die Verwendung einer DNS-Anfrage auch hinter einem NAT-Router, der DNS-Adressen übersetzt, kann folgendermaßen funktionieren:
Alternativ können Sie auch die HTTP-Anforderungsmethode verwenden:
quelle