Odpowiedzi:
Jednowarstwowe:
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}' 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.1dla 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' ' -f2częś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. nmclito wersja menedżera sieci w wierszu polecenia. Możesz biegać nmcli dev list | grep -i routerslub 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}'
eth0i wlan0zarówno aktywnie podłączony ale z bramy skonfigurowanym tylko wlan0, nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2wyjść tylko 0.0.0.0. nm-tool | grep -oP '(?i)gateway:\s*\K\S+'wypisuje dwie linie: 0.0.0.0nastę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-managernp przez ifupdownlub ifconfig..w tych przypadkach nm-toolnie 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}'
uniqpo 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 sedrozwią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+'