Antworten:
Einzeiler:
nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2nm-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 istip 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}'
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.)
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.
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}'
uniqnur tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'5in o sein.
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
tr, grep allein erledigt den Jobroute -n | grep -Po "0\.0\.0\.0 \s*\K\S+(?=\s*0\.0\.0\.0)"
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}'
192.168.0.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.
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
nm-tool | grep -oP '(?i)gateway:\s*\K\S+'