Ich versuche, nur die IP-Adresse (inet) als Parameter in einem Skript zu verwenden, das ich geschrieben habe.
Gibt es in einem Unix-Terminal eine einfache Möglichkeit, nur die IP-Adresse abzurufen, anstatt sie durchzusehen ifconfig
?
shell
unix
ip-address
Mason
quelle
quelle
ip -o address
viel einfacher zu bearbeiten ist als die Ausgabe vonip address
.Antworten:
Sie können ein Skript schreiben, das nur die IP zurückgibt, wie:
Für MAC:
Oder für Linux-System
quelle
hostname -i
auf meinem kehrt es zurück:::1 127.0.1.1 192.168.1.100
hostname
ist also nicht portabel.Dadurch erhalten Sie alle IPv4-Schnittstellen, einschließlich des Loopbacks 127.0.0.1:
Dies wird nur zeigen
eth0
:Und auf diese Weise können Sie IPv6-Adressen erhalten:
Nur
eth0
IPv6:quelle
grep -oP
schlägt auf Busybox v1.24.1 fehl: ungültige Option - P-P
für reguläre Perl-Ausdrücke wechseln, sonst können wir das Lookbehind-(?<=inet\s)
Token nicht verwenden . Sie können ein ähnliches Ergebnis erzielen, indem Sie ausführengrep -oe 'inet [0-9\.]\+'
odergrep -oe 'inet6 [0-9a-f:]\+'
aber auf diese Weise kann ich das erste Wort nicht loswerden. In SuSE-man grep
Berichten ist dieses-P
Flag experimentell.ip -4 a show eth0 | grep -Po 'inet \K[0-9.]*'
Im Allgemeinen kann niemals garantiert werden, dass ein System nur eine IP-Adresse hat. Sie können beispielsweise sowohl eine Ethernet- als auch eine WLAN-Verbindung haben. Wenn Sie eine aktive VPN-Verbindung haben, haben Sie eine weitere IP-Adresse.
Linux
Listet unter Linux
hostname -I
die aktuelle (n) IP-Adresse (n) auf. Wenn Sie sich darauf verlassen, dass immer nur eine IP-Adresse zurückgegeben wird, funktioniert dies in einigen Szenarien höchstwahrscheinlich nicht wie erwartet (dh eine VPN-Verbindung ist hergestellt). Eine zuverlässigere Methode wäre daher, das Ergebnis in ein Array zu konvertieren und dann die Elemente zu durchlaufen:OSX
Wenn Sie unter OSX die Benutzeroberfläche kennen , können Sie Folgendes verwenden:
Dies gibt nur die IP-Adresse zurück.
Oder Sie können mögliche Schnittstellennamen durchlaufen, beginnend mit einem Suffix, dh
en
:Das Abrufen der IP-Adresse wird auch nicht deterministisch, wenn sowohl Kabel- als auch WLAN-Verbindungen hergestellt werden, wenn ein Computer über mehr als eine Ethernet-Schnittstelle verfügt oder wenn VPN-Tunnel vorhanden sind.
Abrufen der externen IP
Wenn Sie die externe IP benötigen, können Sie einen Dienst im Textmodus abfragen, z. B.
curl https://ipecho.net/plain
eine externe IP im Nur-Text-Modus zurückgeben .Ein noch schnellerer Weg, um die externe IP zu erhalten, besteht darin, einen bekannten DNS-Server abzufragen:
quelle
Dieser Befehl gibt Ihnen die genaue IP-Adresse, die Sie in Ubuntu möchten.
quelle
In den neuesten Ubuntu- Versionen ( 14.04 - 16.04 ) hat dieser Befehl den Trick für mich getan.
quelle
print $1
möglicherweise das richtige Ergebnis erhalten oder nicht.Wenn Sie eine eingeschränkte Umgebung haben, können Sie diesen Befehl verwenden:
quelle
ip -o -4 addr show dev eth0 | cut -d' ' -f7 | cut -d'/' -f1
ip -4 addr show eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1
. Für v4 und v6:ip addr show eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1
ip -4 addr show eth0 | grep inet
ip -4 addr show | grep 192
Um unter Mac OS X nur die IP-Adresse abzurufen , können Sie den folgenden Befehl eingeben:
quelle
Der Befehl
ifconfig
ist veraltet und Sie sollten denip
Befehl unter Linux verwenden.Außerdem erhalten
ip a
Sie einen Gültigkeitsbereich in derselben Zeile wie IP, sodass die Verwendung einfacher ist.Dieser Befehl zeigt Ihnen Ihre globale (externe) IP:
Alle IPv4 (auch 127.0.0.1):
Alle IPv6 (auch :: 1):
quelle
Wir können einfach nur 2 Befehle (ifconfig + awk) verwenden, um genau die IP (v4) zu erhalten, die wir möchten:
eth0
Führen Sie unter Linux den folgenden Befehl aus, vorausgesetzt, Sie erhalten die IP-Adresse von der Schnittstelle:Führen Sie unter OSX
en0
den folgenden Befehl aus , um die IP-Adresse von der Schnittstelle abzurufen :Fügen Sie diese Funktion hinzu, um unsere öffentliche / externe IP zu kennen
~/.bashrc
Dann renne,
whatismyip
quelle
Ich wollte etwas Einfaches, das als Bash-Alias funktioniert. Ich fand, dass das
hostname -I
für mich am besten funktioniert (Hostname v3.15). Gibthostname -i
aus irgendeinem Grund die Loopback-IP zurück,hostname -I
gibt mir jedoch die richtige IP für wlan0 und ohne die Ausgabe über grep oder awk weiterleiten zu müssen. Ein Nachteil ist, dass alle IPshostname -I
ausgegeben werden , wenn Sie mehr als eine haben.quelle
So drucken Sie nur die IP-Adresse von
eth0
, ohne anderen Text:Verwenden Sie Folgendes, um Ihre primäre Schnittstelle zu bestimmen (da sie möglicherweise nicht "eth0" ist):
Die beiden oben genannten Zeilen können wie folgt zu einem einzigen Befehl kombiniert werden:
quelle
Das würde den Trick in einem Mac machen:
Das löste sich
ping 192.168.1.2
in meiner Maschine auf.Pro-Tipp :
$(...)
bedeutet, dass alles, was sich in den Klammern befindet, in einer Unterschale ausgeführt und als Wert zurückgegeben wird.quelle
Es
man hostname
gibt noch eine einfachere Möglichkeit, Loopback-IP automatisch auszuschließen und nur eine durch Leerzeichen getrennte Liste aller Host-IP-Adressen zuzuweisen:quelle
Sie können auch den folgenden Befehl verwenden:
HINWEIS: Dies funktioniert nur, wenn Sie eine Verbindung zum Internet haben.
quelle
Erscheinen einige Antworten mit dem neueren werden
ip
Befehl (Ersatzifconfig
) hier so ist man , dass Anwendungenip addr
,grep
undawk
einfach die IPv4 - Adresse mit der zugehörigen druckenwlan0
Schnittstelle:Obwohl es nicht die kompakteste oder ausgefallenste Lösung ist, ist es (wohl) leicht zu verstehen (siehe Erklärung unten) und kann für andere Zwecke geändert werden, z. B. um die letzten 3 Oktette der MAC-Adresse wie folgt abzurufen:
Erläuterung:
ip addr show wlan0
Gibt Informationen aus, die der genannten Netzwerkschnittstelle zugeordnet sind.wlan0
Diese sollten ungefähr so aussehen:Als nächstes
grep inet
filtert die Linien , die „inet“ (IPv4 und IPv6 - Konfiguration) und enthält keinegrep -v inet6
filtert die restlichen Zeilen , die nicht „inet6“ enthalten, die in einer einzigen Zeile wie diese führen sollten:Schließlich
awk
extrahiert der erste das Feld "172.18.18.1/24" und der zweite entfernt die Kurzform der Netzwerkmaske, wobei nur die IPv4-Adresse übrig bleibt.Ich denke auch, dass es erwähnenswert ist, dass es beim Erstellen von Skripten oft viele umfangreichere und / oder robustere Tools gibt, um diese Informationen zu erhalten, die Sie möglicherweise stattdessen verwenden möchten. Wenn Sie beispielsweise Node.js verwenden, gibt es
ipaddr-linux
Rubylinux-ip-parser
usw.Siehe auch /unix/119269/how-to-get-ip-address-using-shell-script
quelle
Verwenden Sie den folgenden Befehl:
quelle
Hier ist meine Version, in der Sie eine Liste von Schnittstellen übergeben können, sortiert nach Priorität:
Wenn ich also mit VPN, Wifi und Ethernet verbunden bin, wird meine VPN-Adresse (auf der Schnittstelle tap0) zurückgegeben. Das Skript funktioniert sowohl unter Linux als auch unter OSX und kann Argumente annehmen, wenn Sie IFLIST überschreiben möchten
Beachten Sie, dass Sie 'inet' durch 'inet6' ersetzen müssen, wenn Sie IPV6 verwenden möchten.
quelle
Ich brauche das immer zu den unerwartetsten Zeiten und suche auf SO nach solchen Threads. Also habe ich ein einfaches Skript zu erhalten IPv4 - Adressen über netstat, genannt schrieb
echoip
- können Sie es hier finden . Die Bash für Netzwerkadressen sieht folgendermaßen aus. Sie erhält auch Ihre öffentliche Adresse von ipecho.net:Das
echoip
Skript liefert eine Ausgabe wie folgt:quelle
Verwenden Sie dieses einzeilige Skript:
ifconfig | grep "inet " | grep -v 127.0.0.1|awk 'match($0, /([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/) {print substr($0,RSTART,RLENGTH)}'
Mac & Linux (in Ubuntu getestet) funktionieren beide.quelle
ifconfig en0
oderifconfig eth1
usw. aufrufen, wenn Sie die gewünschte Schnittstelle kennen :)Ich bevorzuge es nicht
awk
und solche in Skripten zu verwenden ..ip
hat die Option, in JSON auszugeben.Wenn Sie weglassen, erhalten
$interface
Sie alle IP-Adressen:quelle
bash ip -j addr show eth0 | jp "[0].addr_info[?family== 'inet'].local | [0]"
zeigt alle deine ips
quelle
Auf Redhat 64bit löste dieses Problem für mich.
quelle
quelle
Wenn Sie Ihre externe IP-Adresse auf einem NAT-Host nachschlagen, empfehlen einige Antworten die Verwendung von HTTP-basierten Methoden wie
ifconfig.me
z.Im Laufe der Jahre habe ich viele dieser Websites kommen und gehen sehen. Ich finde diese DNS-basierte Methode robuster:
Ich habe diesen praktischen Alias in meinem
~/.bashrc
:quelle
Diese beiden Möglichkeiten haben bei mir funktioniert:
Um die IP-Adresse Ihrer Schnittstelle eth0 zu erhalten. Ersetzen Sie eth0 im folgenden Beispiel durch Ihren Schnittstellennamen.
ifconfig eth0 | grep -w "inet" | tr -s " " | cut -f3 -d" "
Verwenden des Hostnamens: Dies gibt Ihnen das Inet, dh die IP-Adresse Ihres Ethos. Wenn Sie -I verwenden, erhalten Sie den Inet-Wert aller Schnittstellen, sofern dieser Wert vorhanden ist.
hostname -i
quelle
Dies gibt nur die IP-Adresse Ihres Systems zurück.
quelle
Ich würde verwenden
Hostname -L
, um nur die IP als Variable in einem Skript zu verwenden.quelle
hostname -i
oderhostname -I
?user@linux:~$ Hostname -L -bash: Hostname: command not found user@linux:~$
1. KapitalH
ist falsch 2. Kein solches-L