Welchen Befehl kann ich ausführen, um nur die IP-Adresse meines Routers zu erhalten?
Mit diesem Befehl müsste ich nur die IP meines Routers haben und nicht beispielsweise die ganze Routing-Tabelle (wie wenn ich ausführe route -n
).
Antwort1
Einzeiler:
nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2
nm-tool | grep -i gateway | awk '{print $2}
netstat -nr | awk '$1 == "0.0.0.0"{print$2}'
arp -n | awk '{print $1}'
Hinweis: Funktioniert nur, wenn Ihr Computer der einzige im Netzwerk ist.ip route show | grep -i 'default via'| awk '{print $3 }'
Ausgabe: 192.168.0.1
für mich
NOTIZ:
Für 15.04 und höher gibt es kein nm-tool
, verwenden Sie also nmcli dev show <IFACE>
. Beispiel:
$ nmcli dev show wlan7 | grep GATEWAY
IP4.GATEWAY: 192.168.0.1
IP6.GATEWAY:
Änderungen und zusätzliche Informationen
Wie Sie beim Untersuchen des Befehls sehen können, nehmen wir die Ausgabe von nm-tool
(die, beachten Sie, Informationen von NetworkManager übernimmt), suchen die Zeile, die das Wort enthält gateway
, drucken die Informationen mit Echo (durch Leerzeichen getrennt) und schneiden dann nur das zweite Element der gesamten Ausgabe ab. Beachten Sie, dass Sie, wenn Sie dort zwei oder mehr Verbindungen haben, möglicherweise den oberen xargs echo | cut -d' ' -f2
Teil entfernen und durch ersetzen müssen awk '{print $2}'
; mit anderen Worten, die gesamte Zeile würde so aussehen nm-tool | grep -i gateway | awk '{print $2}'
. Alternativ hätten Sie es nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
so verwenden können, wie von Avinash Raj in den Kommentaren vorgeschlagen. Wie Sie sehen, wird hier nichts Besonderes getan, und die ganze Angelegenheit hier ist lediglich eine Übung im Umgang mit Ausgabebearbeitungstools wie Cut, Awk und Grep.
Eine weitere Methode, um die Gateway-Informationen abzurufen, ist nmcli dev list
der Befehl (ja, immer noch abhängig vom Netzwerkmanager). nmcli
ist die Befehlszeilenversion des Netzwerkmanagers. Sie können ausführen nmcli dev list | grep -i routers
oder ausführen nmcli dev list | grep -i 'gw ='
. Auch hier können Sie alle anderen Informationen außer der gewünschten IP-Adresse ausschneiden, wenn Sie möchten.
Da in der ursprünglichen Frage nur angegeben wurde, nur das Standard-Gateway zu drucken, verlasse ich mich hier auf die Ausgabe von nm-tool. NetworkManager ist standardmäßig in Ubuntu enthalten und ist die Standardmethode zum Verwalten der Netzwerkverbindungen von Ubuntu. Wenn Sie etwas anderes verwenden, z. B. wicd, oder eine Verbindung über wpa_cli herstellen, gibt Ihnen nm-tool keine Antwort. In diesem Fall finden Sie die Antworten anderer Leute unten möglicherweise nützlicher.
Eine distributions- und konfigurationsneutralere Option wäre die Verwendung von netstat -n
, das ähnlich wie eine Kernel-Routingtabelle verwendet route -n
. Die Ausgabe ist wie folgt, nichts Überraschendes.
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 wlan0
192.168.0.0 0.0.0.0 255.255.255.0 U 9 0 0 wlan0
Und so schneiden Sie die gewünschten Informationen aus:netstat -nr | awk '$1 == "0.0.0.0"{print$2}'
Noch einer, ebenfalls neutral:arp -n | awk '{print $1}'
Antwort2
Sie können es auf viele Arten finden
ip route show default
Eine bessere Frage: Was oder wie möchten Sie die Ausgabe gestalten?
ip route show | awk '/default/ {print $3}'
tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2}' | uniq
Aus den Kommentaren -(danke Avinash Raj 0
tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
Antwort3
Da Sie normalerweise verwenden route -n
, können Sie diese sed
Lösung in Verbindung mit ausprobieren route -n
:
route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p'
Hier ist ein Test:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
192.168.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
$ route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p'
192.168.1.1
Eine andere Möglichkeit wäre, Folgendes zu verwenden grep
:
$ route -n | tr -s ' ' | grep -Po "(?<=0\.0\.0\.0 )[^ ]+(?= 0\.0\.0\.0)"
192.168.1.1
Wie @AvinashRaj betont hat, ist dies nur durch die Verwendung von möglich grep
(die Leerzeichen müssen nicht mithilfe von zusammengedrückt werden tr
):
route -n | grep -Po "0\.0\.0\.0\s*\K\S+(?=\s*0\.0\.0\.0)"
192.168.1.1
Antwort4
Wenn Sie Zugriff auf einen Webbrowser auf dem System haben, können Sie zuhttp://whatsmyrouterip.com/und es sollte in der Lage sein, Ihre IP ohne Befehl zu finden.
Ansonsten sollte es ausreichen, einfach das Terminal zu öffnen und ein auszuführen ip route | grep default
. Abhängig von Ihren Netzwerkschnittstellen kann es jedoch auch mehrere Ergebnisse geben.