Antworten:
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 istip route show | grep -i 'default via'| awk '{print $3 }'
Ausgabe: 192.168.0.1
fü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' ' -f2
Teil 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 list
Befehl (Ja, immer noch auf den Netzwerkmanager angewiesen). nmcli
ist die Befehlszeilenversion von Network Manager. Du nmcli dev list | grep -i routers
kö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 -n
die 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}'
eth0
und wlan0
sowohl aktiv verbunden , sondern mit einem Gateway nur konfiguriert wlan0
, nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2
Ausgänge lediglich 0.0.0.0
. nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
gibt zwei Zeilen aus: 0.0.0.0
gefolgt 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-manager
z. B. ifupdown
oder verwaltet wird. In ifconfig
diesen Fällen nm-tool
wird 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}'
uniq
nur tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
5in o sein.
Wie gewohnt route -n
können Sie diese sed
Lösung in Verbindung mit route -n
folgenden 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 default
zu 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+'