Wie kann ich (nur) die IP-Adresse meines Routers anzeigen?

22

Welchen Befehl kann ich ausführen, um nur die IP-Adresse meines Routers abzurufen?

Mit diesem Befehl sollte ich nur die IP meines Routers haben und nicht zum Beispiel die ganze Routing-Tabelle (wie wenn ich sie laufen lasse route -n).

kaio
quelle

Antworten:

22

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.1für mich

HINWEIS :

Für 15.04 und später gibt es keine nm-tool, also benutze nmcli dev show <IFACE>. Beispielsweise,

$ nmcli dev show wlan7 | grep GATEWAY                                                                                    
IP4.GATEWAY:                            192.168.0.1
IP6.GATEWAY:                            

Bearbeitungen und zusätzliche Infos

Wie Sie an der Prüfung des Befehls sehen können, nehmen wir die Ausgabe von nm-tool(die, wie zu beachten ist, Informationen aus dem NetworkManager entnimmt), suchen die Zeile mit dem Wort gateway, drucken als Informationen mit dem Echo (durch Leerzeichen getrennt) und schneiden dann nur das zweite Element dieses Ganzen ab Ausgabe. Beachten Sie, dass Sie, wenn Sie zwei oder mehr Verbindungen dort haben, möglicherweise ein oberes xargs echo | cut -d' ' -f2Teil entfernen und es durch ein awk '{print $2}'neues ersetzen müssen . mit anderen Worten würde die ganze Zeile so aussehen nm-tool | grep -i gateway | awk '{print $2}'. Alternativ hättest du nm-tool | grep -oP '(?i)gateway:\s*\K\S+'Avinash Rajs Vorschlag in den Kommentaren verwenden können. Wie Sie sehen, wird hier nichts Besonderes getan, und die ganze Prüfung hier ist lediglich eine Übung zur Verwendung von Ausgabebearbeitungswerkzeugen wie cut, awk und grep.

Eine andere Methode zum Abrufen der Gateway-Informationen ist der nmcli dev listBefehl (Ja, immer noch auf den Netzwerkmanager angewiesen). nmcliist die Befehlszeilenversion von Network Manager. Du nmcli dev list | grep -i routerskönntest rennen oder du könntest rennen nmcli dev list | grep -i 'gw ='. Auch hier können Sie alle anderen Informationen außer der gewünschten IP-Adresse abschneiden, wenn Sie dies möchten.

Da es in der ursprünglichen Frage nur darum ging, das Standard-Gateway zu drucken, verlasse ich mich hier auf die Ausgabe von nm-tool. NetworkManager wird standardmäßig mit Ubuntu ausgeliefert. Dies ist die Standardmethode für die Verwaltung der Ubuntu-Netzwerkverbindungen. Wenn Sie etwas anderes verwenden, z. B. wicd oder eine Verbindung über wpa_cli, erhalten Sie von nm-tool keine Antwort. In diesem Fall sind die Antworten anderer möglicherweise nützlicher.

Eine eher distro-neutrale und konfigurationsneutrale Option wäre netstat -ndie Verwendung einer Kernel-Routing-Tabelle, ähnlich der route -n. Die Ausgabe ist unten, 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 Ihre gewünschten Informationen aus: netstat -nr | awk '$1 == "0.0.0.0"{print$2}'

Ein anderer, auch neutral: arp -n | awk '{print $1}'

Sergiy Kolodyazhnyy
quelle
simplenm-tool | grep -oP '(?i)gateway:\s*\K\S+'
Avinash Raj
@AvinashRaj Danke! Ich habe grep und awk nicht sehr gründlich studiert, um mein bereits vorhandenes Wissen zu verarbeiten. Dies wird gut zu wissen sein
Sergiy Kolodyazhnyy
Vielleicht ist dies aufgrund eines (zusätzlichen) Eigentümlichkeit meiner Konfiguration, aber auf einer Maschine mit Adaptern eth0und wlan0sowohl aktiv verbunden , sondern mit einem Gateway nur konfiguriert wlan0, nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2Ausgänge lediglich 0.0.0.0. nm-tool | grep -oP '(?i)gateway:\s*\K\S+'gibt zwei Zeilen aus: 0.0.0.0gefolgt von 192.168.1.1. (Die ip route ...und route -n ...Wege produzieren gerade 192.168.1.1, was ich als das wünschenswerteste Ergebnis betrachten würde.)
Eliah Kagan
Dies funktioniert nicht, wenn das Netzwerk nicht von network-managerz. B. ifupdownoder verwaltet wird. In ifconfigdiesen Fällen nm-toolwird die gewünschte Ausgabe nicht generiert. Kurz gesagt, diese Antwort beruht ausschließlich auf dem Netzwerk, das von verwaltet wird network-manager.
heemayl
@EliahKagan Ah, ich verstehe. Bei meinem Befehl werden Zeilen mit dem Zusatz 'gateway' gefunden, anschließend als eine durch Leerzeichen getrennte Zeile wiedergegeben und das zweite Element abgeschnitten. Da Sie dort zwei solcher Zeilen haben, gibt mein Befehl nur eine davon aus. Avinashs Befehl ist in diesem Fall besser. In Bezug auf 0.0.0.0 ist hier etwas im Zusammenhang . Was Heemayls Kommentar betrifft, stimmt das, und es gab keine weiteren Angaben in der Frage des OP, als nur die Ausgabe zu zeigen
Sergiy Kolodyazhnyy,
7

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}'
Panther
quelle
Sie müssen nicht für uniqnur tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'5in o sein.
Avinash Raj
so viele Möglichkeiten. Auf meinem System wird zweimal ohne Uniq gedruckt. Ihre Lösung funktioniert auch.
Panther
Hinweis tracepathunterstützt -mauf einigen Versionen von Ubuntu, aber nicht auf anderen .
Eliah Kagan
By the way, @ bodhi.zazen, es gibt Variationen in Ihrer Antwort, verwenden Sie Traceroute. Gleiche Idee anderer Befehl, oder?
Sergiy Kolodyazhnyy
@serg sicher, es gibt wahrscheinlich eine lange Liste von Befehlen und Filteroptionen, sed, awk, perl, grep ...
Panther
6

Wie gewohnt route -nkönnen Sie diese sedLösung in Verbindung mit route -nfolgenden Komponenten ausprobieren :

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

Ein anderer Weg wäre grep:

$ route -n | tr -s ' ' | grep -Po "(?<=0\.0\.0\.0 )[^ ]+(?= 0\.0\.0\.0)"
192.168.1.1

Wie @AvinashRaj darauf hingewiesen hat, kann dies nur mithilfe von erfolgen grep(keine Notwendigkeit, die Leerzeichen mithilfe von zu quetschen tr):

route -n | grep -Po "0\.0\.0\.0\s*\K\S+(?=\s*0\.0\.0\.0)"
192.168.1.1
heemayl
quelle
Sie brauchen nicht zu verwenden tr, grep allein erledigt den Jobroute -n | grep -Po "0\.0\.0\.0 \s*\K\S+(?=\s*0\.0\.0\.0)"
Avinash Raj
1

Ich benutze dieses ziemlich oft:

route -n | awk '{ print $2 }' | grep -Eo '[1-9]{0,3}\.[1-9]{0,3}\.[0-9]{0,3}\.[1-9]{0,3}'
krt
quelle
Was ist, wenn die Adresse ist 192.168.0.1?
Avinash Raj
1

Wenn Sie Zugriff auf einen Webbrowser auf dem System haben, können Sie http://whatsmyrouterip.com/ aufrufen und Ihre IP-Adresse sollte ohne Befehl gefunden werden können.

Ansonsten reicht es aus, einfach das Terminal zu öffnen und ein ip route | grep defaultzu machen. Je nach Netzwerkschnittstelle kann es mehrere geben.

MaZZly
quelle
0

Ich benutze dies ziemlich oft und leicht zu merken:

route | grep default | awk '{print $2}'
sys0dm1n
quelle
0
hostname  -I

190.200.200.107 172.21.0.1 172.17.0.1 172.19.0.1 172.18.0.1

also nur die IP ausgabe bekommen

hostname -I | cut -d' ' -f1 

190.200.200.107

Scott Stensland
quelle