Jakie polecenie mogę uruchomić, aby uzyskać tylko adres IP mojego routera?
Za pomocą tego polecenia powinienem mieć tylko adres IP routera, a nie na przykład całą tabelę routingu (jak podczas uruchamiania route -n
).
źródło
Jakie polecenie mogę uruchomić, aby uzyskać tylko adres IP mojego routera?
Za pomocą tego polecenia powinienem mieć tylko adres IP routera, a nie na przykład całą tabelę routingu (jak podczas uruchamiania route -n
).
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}'
nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
eth0
iwlan0
zarówno aktywnie podłączony ale z bramy skonfigurowanym tylkowlan0
,nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2
wyjść tylko0.0.0.0
.nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
wypisuje dwie linie:0.0.0.0
następnie192.168.1.1
. (Aip route ...
iroute -n ...
sposoby dają po prostu192.168.1.1
, co uważam za najbardziej pożądany rezultat.)network-manager
np przezifupdown
lubifconfig
..w tych przypadkachnm-tool
nie przyniesie pożądanego output..in skrócie odpowiedź ta opiera się wyłącznie na sieci zarządzane przeznetwork-manager
..Możesz to znaleźć na wiele sposobów
Lepsze pytanie, co lub jak chcesz kształtować wynik?
Z komentarzy - (dziękuję Avinash Raj 0
źródło
uniq
po prostutracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
byłoby 5 cali.tracepath
podpory-m
na niektórych wersjach Ubuntu , ale nie na innych .Jak zwykle używasz
route -n
, możesz wypróbować tosed
rozwiązanie w połączeniu zroute -n
:Oto test:
Innym sposobem byłoby użycie
grep
:Jak zauważył @AvinashRaj, można to zrobić tylko za pomocą
grep
(nie trzeba wciskać spacji za pomocątr
):źródło
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:
źródło
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.źródło
Używam tego dość często i łatwo zapamiętać:
źródło
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
190.200.200.107
źródło