Odpowiedzi:
Jednowarstwowe:
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}'
Uwaga: działa tylko wtedy, gdy twoje urządzenie jest jedynym w sieciip route show | grep -i 'default via'| awk '{print $3 }'
wyjście: 192.168.0.1
dla mnie
UWAGA :
Do 15.04 i późniejszych nie ma nm-tool
, więc użyj nmcli dev show <IFACE>
. Na przykład,
$ nmcli dev show wlan7 | grep GATEWAY
IP4.GATEWAY: 192.168.0.1
IP6.GATEWAY:
Zmiany i dodatkowe informacje
Jak widać z analizy polecenia, pobieramy dane wyjściowe nm-tool
(które, uwaga, pobiera informacje z NetworkManager), znajdujemy wiersz zawierający słowo gateway
, drukujemy niż informacje za pomocą echa (oddzielone spacjami), a następnie odcinamy tylko drugi element całości wydajność. Uwaga: jeśli masz tam dwa lub więcej połączeń, możesz potrzebować górnej xargs echo | cut -d' ' -f2
części do usunięcia i zastąp ją awk '{print $2}'
; innymi słowy, cała linia wyglądałaby tak nm-tool | grep -i gateway | awk '{print $2}'
. Alternatywnie możesz użyć, nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
jak zaproponował Avinash Raj w komentarzach. Jak widać, nie ma tu nic specjalnego, a cała ta próba jest jedynie ćwiczeniem w korzystaniu z narzędzi do edycji danych wyjściowych, takich jak cut, awk i grep.
Inną metodą uzyskania informacji o bramie jest nmcli dev list
(tak, nadal poleganie na menedżerze sieci) polecenie. nmcli
to wersja menedżera sieci w wierszu polecenia. Możesz biegać nmcli dev list | grep -i routers
lub biegać nmcli dev list | grep -i 'gw ='
. Ponownie, jeśli chcesz, możesz ćwiczyć wycinanie wszystkich innych informacji oprócz pożądanego adresu IP.
Ponieważ w pierwotnym pytaniu jedyną specyfikacją było wydrukowanie tylko domyślnej bramy, polegam tutaj na wyjściu nm-tool. NetworkManager jest domyślnie dostarczany z Ubuntu, jest to standardowy sposób zarządzania połączeniami sieciowymi Ubuntu. Jeśli użyjesz czegoś innego, na przykład wicd lub połączysz przez wpa_cli, nm-tool nie dostarczy ci odpowiedzi. W takim przypadku odpowiedzi innych osób mogą okazać się bardziej przydatne.
Bardziej neutralną dla dystrybucji i neutralną dla konfiguracji opcją byłoby użycie netstat -n
, która korzysta z tabeli routingu jądra, podobnej do route -n
. Jego wydajność jest poniżej, nic dziwnego.
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
A oto sposób na wycięcie żądanych informacji: netstat -nr | awk '$1 == "0.0.0.0"{print$2}'
Kolejny, również neutralny: arp -n | awk '{print $1}'
eth0
i wlan0
zarówno aktywnie podłączony ale z bramy skonfigurowanym tylko wlan0
, nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2
wyjść tylko 0.0.0.0
. nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
wypisuje dwie linie: 0.0.0.0
następnie 192.168.1.1
. (A ip route ...
i route -n ...
sposoby dają po prostu 192.168.1.1
, co uważam za najbardziej pożądany rezultat.)
network-manager
np przez ifupdown
lub ifconfig
..w tych przypadkach nm-tool
nie przyniesie pożądanego output..in skrócie odpowiedź ta opiera się wyłącznie na sieci zarządzane przez network-manager
..
Możesz to znaleźć na wiele sposobów
ip route show default
Lepsze pytanie, co lub jak chcesz kształtować wynik?
ip route show | awk '/default/ {print $3}'
tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2}' | uniq
Z komentarzy - (dziękuję Avinash Raj 0
tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
uniq
po prostu tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
byłoby 5 cali.
Jak zwykle używasz route -n
, możesz wypróbować to sed
rozwiązanie w połączeniu z route -n
:
route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p'
Oto 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
Innym sposobem byłoby użycie grep
:
$ route -n | tr -s ' ' | grep -Po "(?<=0\.0\.0\.0 )[^ ]+(?= 0\.0\.0\.0)"
192.168.1.1
Jak zauważył @AvinashRaj, można to zrobić tylko za pomocą grep
(nie trzeba wciskać spacji za pomocą tr
):
route -n | grep -Po "0\.0\.0\.0\s*\K\S+(?=\s*0\.0\.0\.0)"
192.168.1.1
tr
, sam grep wykona robotęroute -n | grep -Po "0\.0\.0\.0 \s*\K\S+(?=\s*0\.0\.0\.0)"
Używam tego dość często:
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
?
Jeśli masz dostęp do przeglądarki internetowej w systemie, możesz przejść do strony http://whatsmyrouterip.com/ i powinna ona znaleźć Twój adres IP bez żadnego polecenia.
W przeciwnym razie wystarczy otworzyć terminal i zrobić ip route | grep default
. Może to dać więcej niż jeden w zależności od interfejsów sieciowych.
hostname -I
190.200.200.107 172.21.0.1 172.17.0.1 172.19.0.1 172.18.0.1
aby uzyskać tylko problem z adresem IP
hostname -I | cut -d' ' -f1
190.200.200.107
nm-tool | grep -oP '(?i)gateway:\s*\K\S+'