Shell-Befehl zum Abrufen der IP-Adresse?

24

Gibt es einen Bash-Befehl, um die IP-Adresse für eine Ubuntu-Box zu finden? Ich muss die IP-Adresse finden, damit ich später auf den Computer zugreifen kann.

opierce
quelle

Antworten:

32

/sbin/ifconfig -a

mpbloch
quelle
Ja, und wenn Sie vorhaben, den Server remote zu verwalten, vi /etc/network/interfacesstellen Sie die Benutzeroberfläche auf static(siehe help.ubuntu.com/8.10/serverguide/C/network-configuration.html )
gravyface
Wenn Sie diesen Befehl ausführen, wird eine ganze Liste von Zahlen angezeigt. Welches sollten wir verwenden? Die inet addr?
ComputerScientist
25

Sie können verwenden:

/bin/ip addr
Robert Swisher
quelle
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
nik
quelle
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

James
quelle
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}'
Johan
quelle
+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
Brad Gilbert
quelle
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
LoreLLo
quelle
3

Locken Sie einfach diese Seite :

$ curl wtfismyip.com/text

Mansi
quelle
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

Sorin
quelle
2
LOCAL_IP=`/bin/hostname -I | sed 's/ //g'`
Mohammed Saqib Rajput
quelle
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.

David North
quelle
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.

Saabi
quelle
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.

Regenmann
quelle
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 };
    }'
jlliagre
quelle
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 }' 
DmitrySemenov
quelle
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.

cnst
quelle