Befehl zur Ermittlung meiner öffentlichen IP-Adresse?

545

Wenn ich bei google nachschaue, kann ich meine öffentliche IP-Adresse sehen. Gibt es etwas in der Ubuntu-Befehlszeile, das mir dieselbe Antwort gibt?

    
kfmfe04 16.01.2012, 12:50

23 Antworten

783

Wenn Sie sich nicht hinter einem Router befinden, können Sie dies mit ifconfig feststellen.

Wenn Sie sich hinter einem Router befinden, weiß Ihr Computer die öffentliche IP-Adresse nicht, da der Router eine Netzwerkadressenübersetzung vornimmt. Sie können auf einer Website nach Ihrer öffentlichen IP-Adresse curl oder wget fragen und die benötigten Informationen daraus extrahieren:

curl -s https://checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'  

oder kürzer

curl https://ipinfo.io/ip
    
Michael K 16.01.2012, 12:56
371

Um die externe IP-Adresse zu finden, können Sie entweder externe webbasierte Dienste oder systembasierte Methoden verwenden. Die einfachere ist die Verwendung des externen Dienstes. Auch die auf ifconfig basierenden Lösungen funktionieren nur in Ihrem System, wenn Sie nicht hinter einem NAT stehen. Die beiden Methoden wurden im Folgenden ausführlich beschrieben.

Suchen nach externer IP-Adresse mithilfe externer Dienste

Am einfachsten verwenden Sie einen externen Dienst über einen Befehlszeilen-Browser oder ein Download-Tool. Da wget standardmäßig in Ubuntu verfügbar ist, können wir das verwenden.
Um Ihre IP-Adresse zu finden, verwenden Sie

$ wget -qO- https://ipecho.net/plain ; echo

Mit freundlicher Genehmigung :

Sie können auch lynx (Browser) oder curl anstelle von wget mit geringfügigen Abweichungen des obigen Befehls verwenden, um Ihre externe IP-Adresse zu finden.

Verwenden Sie curl , um die IP zu finden:

$ curl https://ipecho.net/plain

Für eine bessere formatierte Ausgabe verwenden Sie:

$ curl https://ipecho.net/plain ; echo

Eine schnellere (wohl die schnellste) Methode, die dig mit OpenDNS als Resolver verwendet:

  

Alle anderen Antworten gehen über HTTP an einen Remote-Server. Einige   Sie erfordern eine Analyse der Ausgabe oder verlassen sich auf den User-Agent-Header   Damit der Server in Klartext reagiert. Sie ändern sich auch ziemlich   häufig (runtergehen, ihren Namen ändern, Anzeigen schalten, kann sich ändern   Ausgabeformat etc.).

     
  1. Das DNS-Antwortprotokoll ist standardisiert (das Format bleibt kompatibel).
  2.   
  3. In der Vergangenheit sind DNS-Dienste (OpenDNS, Google Public DNS, ..) in der Regel länger überlebensfähig und stabiler, skalierbarer und generell verfügbar   nach was auch immer neuen hip wasismyip.com HTTP-Service ist heute heiß.
  4.   
  5. (für Geeks, die sich für Mikrooptimierung interessieren), sollte diese Methode von Haus aus schneller sein (sei es nur um einige Mikrosekunden).
  6.   

Verwenden von dig mit OpenDNS als Resolver:

$ dig +short myip.opendns.com @resolver1.opendns.com

111.222.333.444

Kopieren von: link

Externe IP finden, ohne sich auf externe Dienste zu verlassen

  • Wenn Sie den Namen Ihrer Netzwerkschnittstelle kennen

Geben Sie Folgendes in Ihr Terminal ein:

$ LANG=c ifconfig <interface_name> | grep "inet addr" | awk -F: '{print }' | awk '{print }'

Ersetzen Sie oben <interface_name> durch den Namen Ihrer aktuellen Schnittstelle, z. B. eth0 , eth1 , pp0 usw.

Verwendungsbeispiel:

$ LANG=c ifconfig ppp0 | grep "inet addr" | awk -F: '{print }' | awk '{print }'
111.222.333.444
  • Wenn Sie den Namen der Netzwerkschnittstelle nicht kennen

Geben Sie Folgendes in Ihr Terminal ein (dadurch werden Name und IP-Adresse aller Netzwerkschnittstellen in Ihrem System abgerufen):

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if (  == "inet" ) { print  } else if (  == "Link" ) { printf "%s:" , } }' |awk -F: '{ print  ": "  }'

Verwendungsbeispiel:

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if (  == "inet" ) { print  } else if (  == "Link" ) { printf "%s:" , } }' |awk -F: '{ print  ": "  }'
lo: 127.0.0.1
ppp0: 111.222.333.444

NB: Die Ausgaben sind Richtwerte und nicht real.

Mit freundlicher Genehmigung: link

UPDATE

  1. LANG=c wurde zu ifconfig -basierten Verwendungen hinzugefügt, sodass unabhängig vom Gebietsschema immer die englische Ausgabe ausgegeben wird.
saji89 01.06.2012 14:10
109

Mein Favorit war immer:

curl ifconfig.me

einfach und leicht einzugeben.

Sie müssen zuerst curl installieren;)

Wenn ifconfig.me nicht verfügbar ist, versuchen Sie icanhazip.com und ipecho.net

curl icanhazip.com

oder

curl ipecho.net
    
Panther 01.06.2012 14:41
55

icanhazip.com ist mein Favorit.

curl icanhazip.com

Sie können IPv4 explizit anfordern:

curl ipv4.icanhazip.com

Wenn Sie curl nicht haben, können Sie stattdessen wget verwenden:

wget -qO- icanhazip.com
    
yprez 01.06.2012 19:23
44

Ich habe alles als nervig und langsam empfunden, also habe ich mein eigenes geschrieben. Es ist einfach und schnell.

Die API befindet sich unter link

Beispiele:

curl ident.me
curl v4.ident.me
curl v6.ident.me
    
Pierre Carrier 03.01.2013 16:49
38

Sie können eine DNS-Anfrage anstelle einer HTTP-Anfrage verwenden, um Ihre öffentliche IP-Adresse herauszufinden:

$ dig +short myip.opendns.com @resolver1.opendns.com

Es verwendet den resolver1.opendns.com dns-Server, um den magischen myip.opendns.com hostname in Ihre IP-Adresse aufzulösen.

    
jfs 27.02.2014 16:07
18

Die, die ich verwende, ist:

wget -O - -q icanhazip.com

Ja, Sie können ip haben: -)

    
jflaflamme 16.01.2012 15:20
18

Amazon AWS

curl http://checkip.amazonaws.com

Beispielausgabe:

123.123.123.123

Ich mag es weil:

  • gibt nur die Klartext-IP zurück, sonst nichts
  • Es handelt sich um einen bekannten Anbieter, der wahrscheinlich nicht in Kürze offline gehen wird.
12

Geben Sie dies genau ein und drücken Sie Enter wo angegeben:

telnet ipecho.net 80 Eingabe
GET /plain HTTP/1.1 Eingabe
HOST: ipecho.net Eingabe
BROWSER: web-kit Eingabe
Eingabe

Hiermit wird manuell eine HTTP-Anforderung gesendet, die Ihre IP-Adresse am Ende von HTTP/1.1 200 OK reply

zurückgibt

Beispielausgabe:

$ telnet ipecho.net 80
Trying 146.255.36.1...
Connected to ipecho.net.
Escape character is '^]'.
GET /plain HTTP/1.1
HOST: ipecho.net
BROWSER: web-kit

HTTP/1.1 200 OK
Date: Tue, 02 Jul 2013 07:11:42 GMT
Server: Apache
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-cache
Pragma: no-cache
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html

f
111.222.333.444
0
    
Liam 02.07.2013 08:38
9

Eine weitere schnelle (möglicherweise die schnellste, relativ)

curl ipecho.net/plain
    
Mohnish 31.12.2013 21:49
8

Dafür wurde STUN erfunden. Als Client können Sie eine Anfrage an einen öffentlich zugänglichen STUN-Server senden und die angegebene IP-Adresse zurückgeben. Eine Sortierung der einfachen Ebene von whatismyip.com, da diese kein HTTP und keine intelligent gestalteten DNS-Server, sondern das unglaublich schnelle STUN-Protokoll verwendet.

Verwenden von stunclient

Wenn Sie stunclient installiert haben ( apt-get install stuntman-client unter debian / ubuntu), können Sie einfach Folgendes tun:

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

Dabei steht A.B.C.D für die IP-Adresse Ihres Computers im lokalen Netz und W.X.Y.Z für die IP-Adressserver, die wie Websites von außen angezeigt werden (und der, nach dem Sie suchen). Mit sed können Sie die Ausgabe auf nur eine IP-Adresse reduzieren:

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

Ihre Frage war jedoch, wie Sie es über die Befehlszeile finden können, was die Verwendung eines STUN-Clients ausschließen könnte. Ich wundere mich also ...

Verwenden von bash

Eine STUN-Anforderung kann handgefertigt werden, mit netcat an einen externen STUN-Server gesendet und mit dd , hexdump und sed wie folgt nachbearbeitet werden:

$echo -en '\x00\x01\x00\x08\xc0\x0c\xee\x42\x7c\x20\x25\xa3\x3f\x0f\xa1\x7f\xfd\x7f\x00\x00\x00\x03\x00\x04\x00\x00\x00\x00' |
    nc -u -w 2 stun.services.mozilla.com 3478 |
    dd bs=1 count=4 skip=28 2>/dev/null |
    hexdump -e '1/1 "%u."' |
    sed 's/\.$/\n/'

Das Echo definiert eine binäre STUN-Anforderung (0x0001 bedeutet Binding Request) der Länge 8 (0x0008) mit Cookie 0xc00cee und einigen eingefügten Daten von Wireshark. Nur die vier Byte, die die externe IP-Adresse darstellen, werden aus der Antwort übernommen, bereinigt und gedruckt.

Funktioniert, aber für die Verwendung in der Produktion nicht empfohlen: -)

P.S. Viele STUN-Server sind verfügbar, da dies eine Kerntechnologie für SIP und WebRTC ist. Die Verwendung von Mozilla sollte aus Datenschutzgründen sicher sein. Sie können jedoch auch eine andere verwenden: STUN-Serverliste

    
Victor Klos 09.10.2015 19:21
7

Ich habe dafür einen dummen Dienst per Telnet. So etwas wie das:

telnet myip.gelma.net

Your IPv4: xxx.xxx.xxx.xxx
Your IPv6: ::ffff:xxxx:xxxx

Fühlen Sie sich frei, es zu benutzen.

    
Gelma 13.03.2014 13:37
4

Sie können eine Webseite nur mit bash lesen, ohne curl , wget :

$ exec 3<> /dev/tcp/icanhazip.com/80 && # open connection
  echo 'GET /' >&3 &&                   # send http 0.9 request
  read -u 3 && echo $REPLY &&           # read response
  exec 3>&-                             # close fd
    
jfs 18.09.2014 12:47
2

Verwenden Sie cURL mit ipogre.com (IPv4 und IPv6 werden unterstützt).

IPv4

curl ipv4.ipogre.com

IPv6

curl ipv6.ipogre.com

link

    
Jacob 31.12.2013 06:07
2

Für diejenigen, die über einen Anmeldezugriff auf unsere Router verfügen, kann der Router mithilfe eines Skripts nach seiner WAN-IP-Adresse gefragt werden, um die externe IP-Adresse am besten zu ermitteln. Das folgende Python-Skript gibt beispielsweise die externe IP-Adresse für meinen Medialink MWN-WAPR300N-Router aus:

import urllib, urllib2, cookielib
import re
from subprocess import check_output as co

cookie_jar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
urllib2.install_opener(opener)

def get(url, values=None):
  data = None
  if values: data = urllib.urlencode(values)
  req = urllib2.Request(url, data)
  rsp = urllib2.urlopen(req)
  return rsp.read()

router = co(['ip', '-o', 'ro', 'list', '0.0.0.0/0']).split()[2]
url = "http://" + router

get(url+"/index.asp")
get(url+"/LoginCheck", dict(checkEn='0', Username='admin', Password='admin'))
page = get(url+"/system_status.asp")

for line in page.split("\n"):
  if line.startswith("wanIP = "):
    print line.split('"')[1]
    exit(1)

Beachten Sie, dass dies nicht sehr sicher ist (wie bei Klartext-Anmeldeinformationen und dem Anmelden bei den meisten Routern) und sicherlich nicht portierbar ist (muss für jeden Router geändert werden). Es ist jedoch sehr schnell und eine absolut vernünftige Lösung in einem physisch sicheren Heimnetzwerk.

Um das Skript für einen anderen Router anzupassen, empfehle ich die Verwendung des Tamperdata-Add-ons in firefox, um zu bestimmen, welche HTTP-Anforderungen erstellt werden sollen.

    
KarlC 27.03.2014 04:08
2

Diese erhalten die lokalen IPs:

ifconfig

oder für eine kürzere Ausgabe:

ifconfig | grep inet

auch

ip addr show

und wahrscheinlich:

hostname -I

Dies sollte die externe IP

erhalten
wget http://smart-ip.net/myip -O - -q ; echo

NB. Wenn Sie nichts dagegen haben, curl zu installieren, gilt Folgendes:

curl http://smart-ip.net/myip
    
Wilf 27.06.2014 18:08
1

Wenn Sie Luchs in Ubuntu-Typ installiert haben

lynx bot.whatismyipaddress.com
    
Binny 09.01.2013 13:35
1

Viele Heimrouter können von UPnP abgefragt werden:

curl "http://fritz.box:49000/igdupnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:GetExternalIPAddress xmlns:u='urn:schemas-upnp-org:service:WANIPConnection:1' /> </s:Body> </s:Envelope>" -s

Dann geben Sie die IP-Adresse aus der Antwort an.

grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'
    
jms 18.09.2016 22:45
0

Wenn Sie DD-WRT verwenden, funktioniert das für mich:

curl -s 192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print }'

oder

curl -s -u your_ddwrt_username:your_ddwrt_password http://192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print }'
  • Wobei 192.168.1.1 die LAN / IP-Adresse des Gateways / Routers des DD-WRT-Routers ist.

  • Die -s -Komponente bedeutet "lautlos" (d. h. keine Informationen zum Fortschrittsverlauf anzeigen).

  • Oh, ich sollte erwähnen, dass ich das oben genannte mit "DD-WRT v24-sp2 (01/04/15) std" verwende.
CMP 14.04.2017 18:14
0

Vielleicht bin ich etwas spät dran, aber inxi kann das recht einfach.

Installieren Sie inxi

sudo apt install inxi

Führen Sie dann den folgenden Befehl aus

inxi -i

Beispiel, bei dem meine Informationen mithilfe der Option z zum Kopieren und Einfügen in Websites wie diese blockiert wurden:

~$ inxi -iz
Network:   Card: NVIDIA MCP77 Ethernet driver: forcedeth
           IF: eth0 state: up speed: 1000 Mbps duplex: full mac: <filter>
           WAN IP: <filter>
           IF: eth0 ip-v4: <filter> ip-v6-link: N/A

Wo es heißt, <filter> ist dort, wo Ihre WAN-IP-, IPv4-, MAC-Adresse usw. angezeigt wird

    
Terrance 21.10.2018 06:23
-1

Verwenden Sie ip !

ip addr show

Suchen Sie dann nach dem entsprechenden Adapter (nicht lo und normalerweise eth0 ), und suchen Sie die IP-Adresse in der Nähe von inet .

    
Eliran Malka 16.08.2016 01:06
-2

Geben Sie einfach eine Traceroute für eine Website oder einen Dienst ein.

sudo traceroute -I google.com

Zeile 2 scheint immer meine öffentliche IP-Adresse zu sein, nachdem sie mein Router-Gateway passiert hat.

[email protected] ~ $ sudo traceroute -I google.com
traceroute to google.com (173.194.46.104), 30 hops max, 60 byte packets
 1  25.0.8.1 (25.0.8.1)  230.739 ms  231.416 ms  237.819 ms
 2  199.21.149.1 (199.21.149.1)  249.136 ms  250.754 ms  253.994 ms**

Machen Sie also einen Bash-Befehl.

sudo traceroute -I google.com | awk -F '[ ]' '{ if (  ="2" ) { print  } }'

Und die Ausgabe ...

(199.21.149.1)

Ich glaube nicht, dass man sich auf PHP-Skripts verlässt, und die Sortierung ist eine gute Praxis.

    
woahguy 24.07.2015 18:34
-2

Ein Befehl ohne Abhängigkeiten, außer dass 8.8.8.8 ein GOogle-DNS ist:

echo $(ip route get 8.8.8.8 | awk '{print $NF; exit}')
    
Rolf 19.08.2015 09:57

Tags und Links