Shell-Befehl zum Abrufen der IP-Adresse?


Antworten:



25

Sie können verwenden:

/bin/ip addr

3
@opierce Sie haben die Antwort von mpbloch als richtig markiert, aber Sie sollten diese Antwort als Hinweis verwenden, da dies Teil der iproute2-Suite ist. ifconfigwird gerade eingestellt.
Jwbensley

3
Sie können das verkürzen, indem Sie einfach laufen ip a.
gak

19

Wenn Sie eine interne Adresse verwenden, überprüfen Sie

curl http://myip.dnsomatic.com

könnte eine gute Idee für Unix-Shells sein.
Oder geben Sie diese URL einfach in Ihren Browser ein.


Wenn Sie eine andere Antwort aus dem „get ifconfig -a“ Ergebnis,
das ifconfiggab Ihre interne Adresse - das wird wahrscheinlich nicht Arbeit von außen.


Auch wenn alles in Ordnung zu sein scheint, können Sie eine Firewall einrichten, die eingehende SSH- Verbindungen verhindert.
Zu welchem ​​Zeitpunkt sollten Sie den Port von Interesse von einem Browser auf der Maschine aus versuchen,

http://www.canyouseeme.org/

Das wird die Konnektivität durch bestätigen,

  • externe IP-Adresse (wird Ihnen auf dieser Seite angezeigt)
  • NAT, Port Forwards
  • Firewalls

Stimmt, aber wenn dies der Fall ist, gibt es wahrscheinlich keine NAT- / Portweiterleitungsregeln, um ssh mit der internen IP-Adresse abzugleichen.
Kyle Brandt

@ Kyle, die hinzugefügt werden können ...
Nik

3
+1 fürcurl http://myip.dnsomatic.com
JatSing

Ähnlich gibt es auchcurl ifconfig.me
jwbensley

19

/bin/hostname -i


3
In diesem Fall würde ich vorschlagen, mit hostname --all-ip-addresses. Alle Netzwerkadressen des Hosts anzeigen. Diese Option listet alle konfigurierten Adressen auf allen Netzwerkschnittstellen auf. Die Loopback-Schnittstelle und IPv6-Link-Local-Adressen entfallen. Im Gegensatz zur Option -i hängt diese Option nicht von der Namensauflösung ab. Machen Sie keine Annahmen über die Reihenfolge der Ausgabe.
lrkwz

5
Kürzere Alternative zu @ lrkwzs Kommentar/bin/hostname -I
Hanxue

Danke @hanxue - das sollte eine eigene Antwort sein - der kürzeste Befehl mit der saubersten Ausgabe - genau das, wonach ich gesucht habe! Nach meiner Erfahrung (Ubuntu) gibt es /bin/hostname -inur 127.0.1.1, was nutzlos ist.
Roger Dueck


9
/sbin/ifconfig|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'

Wenn Sie Ihre interne Adresse benötigen, fügen Sie Ihre Schnittstelle nach ifconfig hinzu, z

 /sbin/ifconfig eth0|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'

+1, das ist genau das, was ich brauchte, um ein Problem zu lösen. Hurra für Einzeiler!
J. Polfer

+1 Ohne den Kopf -1: / sbin / ifconfig | grep inet | sed 's / \: / /' | awk 'NR == 1 {print $ 3}'
joeslice

Danke, es funktioniert unter Debian, aber unter OS X funktioniert es nicht und es wird Müll zurückgegeben. Es wäre großartig, wenn wir mit einer Linie herauskommen könnten, die auf beiden funktioniert. Hier ist die Ausgabe von ifconfig unter OS X: gist.github.com/ssbarnea/5814657
sorin


3

Wenn Sie die IP-Adresse Ihres Routers ermitteln müssen, können Sie diesen Befehl ausführen.

dig + short myip.opendns.com @ 208.67.222.222 @ 208.67.220.220

Wenn Sie OpenDNS für Ihren DNS-Server verwenden, können Sie es folgendermaßen kürzen:

dig + short myip.opendns.com

Sie können diesen Befehl auch verwenden.

locken http://myip.dnsomatic.com

3

Wenn Sie mehrere Schnittstellen haben, kann es hilfreich sein, die gewünschte IP-Adresse anzugeben. Wenn Sie die IPV4-Adresse der Schnittstelle 'eth0' wünschen:

ip addr show dev eth0 | grep "inet " | awk '{ print $2 }' 

Wenn Sie die IPV6-Adresse der Schnittstelle 'eth0' möchten:

ip addr show dev eth0 | grep "inet6 " | awk '{ print $2 }' 

Wenn Sie zwischen zwei gemeinsamen Schnittstellen eines Laptops, wlan0 und eth0, nach einer IP suchen möchten:

CURRENT_IP=''
for INTERFACE in wlan0 eth0; do
    if [ -z $CURRENT_IP ]; then
        CURRENT_IP=$(ip addr show dev $INTERFACE | grep "inet " | awk '{ print $2 }')
    fi
done

3

Locken Sie einfach diese Seite :

$ curl wtfismyip.com/text


Und wie genau ist dies den in diesen Jahren bereits erwähnten ähnlichen Dienstleistungen überlegen?
Esa Jokinen,

2

Hier ist eine Zeile, die auch unter Linux und OS X funktioniert und die erste Adresse zurückgibt, die nicht lokal ist:

ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'

Senden Sie Credits an /programming//a/13322549/99834



1

Der einfachste Weg ist wahrscheinlich

ifconfig eth0

Angenommen, das Gerät verfügt über eine einzige IP-Adresse auf der standardmäßigen kabelgebundenen Schnittstelle. Dies ist möglicherweise erforderlich

ifconfig wlan0

wenn es auf WiFi ist.


1
ip address show scope link

Es zeigt Ihnen die IP-Adresse von living - has link - interfaces. Aber es ist kein Bash-Befehl. Bash kann überhaupt nichts über IP und Netzwerk wissen.


1

Was ich verstehe, ist, dass Sie eine entfernte Ubuntu-Maschine anschließen möchten, die eine dynamische IP hat. Gehen Sie zur Website dyndns.org und eröffnen Sie ein kostenloses Konto. Dann müssen Sie auf dem Remote-Computer ein dynamisches IP-Tool installieren.

sudo aptitude install dyndns-client

so können Sie Remote-Maschine über ssh

ssh username@yourdynamicnamealias.dyndns.org

Nach der Konfiguration wird die IP-Adresse der Remote-Maschine also nie mehr benötigt.


Dies ist meine bevorzugte Methode für den Umgang mit dynamischen IPs. dyndns.org ist ein fantastischer, kostenloser Service.
John Barrett

1

Folgendes verwende ich:

LC_ALL=C /sbin/ifconfig | awk '
    /inet addr/ {
        gsub("addr:","");
        if(($2!="127.0.0.1") && ($2!="0.0.0.0") && ($2!=""))
            { print $2 };
    }'

1

Wenn Sie nur eine einzige IP-Adresse einer bestimmten Schnittstelle benötigen, können Sie Folgendes tun:

ifconfig eth0 | grep "inet " | awk '{gsub("addr:","",$2);  print $2 }' 


0

Wenn Sie nach einer öffentlichen IP-Adresse der Box suchen , können Sie Folgendes verwenden:

  • dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \"

Sie können dig(1)Optionen wie -4oder verwenden, -6um gezielt nach einer IPv4- oder IPv6-Adresse zu suchen. Google wird eine Antwort in einem Datensatz des TXTTyps bereitstellen , der bei Vorlage durch Anführungszeichen enthält dig. Wenn Sie die Variable anschließend mit Dienstprogrammen wie verwenden möchten traceroute, müssen Sie etwas wie tr (1) verwenden , um diese Anführungszeichen zu entfernen.

Zu den weiteren Optionen gehören whoami.akamai.netund myip.opendns.com, die mit Aund AAAArecords antworten (anstelle des TXTobigen Beispiels von Google). Daher müssen die Anführungszeichen nicht entfernt werden:

  • dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short

  • dig -4 @resolver1.opendns.com -t any myip.opendns.com +short

  • dig -6 @resolver1.opendns.com -t any myip.opendns.com +short

Hier ist ein Beispielskript, das alle oben genannten Optionen zum Festlegen der Variablen verwendet:

#!/bin/sh
IPANY="$(dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv4="$(dig -4 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv6="$(dig -6 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
AKAMv4="$(dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short)"
CSCOv4="$(dig -4 @resolver1.opendns.com -t a myip.opendns.com +short)"
CSCOv6="$(dig -6 @resolver1.opendns.com -t aaaa myip.opendns.com +short)"
printf '$GOOG:\t%s\t%s\t%s\n' "${IPANY}" "${GOOGv4}" "${GOOGv6}"
printf '$AKAM:\t%s\n$CSCO:\t%s\t%s\n' "${AKAMv4}" "${CSCOv4}" "${CSCOv6}"

Wenn Sie nach einer privaten IP-Adresse oder nach einer Reihe aller der Box zugewiesenen IP-Adressen suchen, können Sie eine Kombination aus ifconfig(unter BSD und GNU / Linux), ip addr(unter GNU / Linux), hostname(Optionen -iund -Iein) verwenden GNU / Linux) und um netstatzu sehen, was los ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.