Come mostrare (solo) l'indirizzo IP del mio router?


22

Quale comando posso eseguire per ottenere solo l'indirizzo IP del mio router?

Con questo comando dovrei avere solo l'IP del mio router e non, ad esempio, l'intera tabella di routing (come quando corro route -n).

Risposte:


22

One-liner:

  • 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}' Nota: funziona solo se la macchina è l'unica sulla rete
  • ip route show | grep -i 'default via'| awk '{print $3 }'

uscita: 192.168.0.1per me

NOTA :

Per il 15.04 e successivi, no nm-tool, quindi usa nmcli dev show <IFACE>. Per esempio,

$ nmcli dev show wlan7 | grep GATEWAY                                                                                    
IP4.GATEWAY:                            192.168.0.1
IP6.GATEWAY:                            

Modifiche e informazioni aggiuntive

Come puoi vedere dall'esame del comando, prendiamo l'output di nm-tool(che, nota, prende le informazioni da NetworkManager), troviamo la riga contenente word gateway, stampa delle informazioni con eco (separato da spazi) e quindi tagliamo solo il secondo elemento dell'intero produzione. Nota che se hai due o più connessioni lì, potresti aver bisogno di rimuovere la xargs echo | cut -d' ' -f2parte superiore e sostituirla con awk '{print $2}'; in altre parole l'intera linea sarebbe simile a questa nm-tool | grep -i gateway | awk '{print $2}'. In alternativa, avresti potuto usare nm-tool | grep -oP '(?i)gateway:\s*\K\S+'come proposto da Avinash Raj nei commenti. Come puoi vedere non c'è niente di speciale fatto qui, e l'intero calvario qui è semplicemente un esercizio nell'uso di strumenti di modifica dell'output come cut, awk e grep.

Un altro metodo per ottenere le informazioni sul gateway è attraverso nmcli dev listil comando (sì, ancora facendo affidamento sul gestore di rete). nmcliè la versione da riga di comando di Network Manager. Potresti correre nmcli dev list | grep -i routerso potresti correre nmcli dev list | grep -i 'gw ='. Ancora una volta, puoi esercitarti nel tagliare tutte le altre informazioni tranne l'indirizzo IP desiderato, se lo desideri.

Dato che nella domanda originale l'unica specifica era stampare solo il gateway predefinito, qui mi affido all'output di nm-tool. NetworkManager viene fornito con Ubuntu per impostazione predefinita, questo è il modo standard per gestire le connessioni di rete di Ubuntu. Se usi qualcos'altro, come wicd o connettiti tramite wpa_cli, nm-tool non ti fornirà una risposta. In tal caso potresti trovare più utili le risposte di altre persone.

Un'opzione più distro-neutrale e config-neutra sarebbe usare netstat -n, che usa una tabella di routing del kernel, simile a route -n. L'output è muggito, niente di sorprendente.

  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

Ed ecco il modo per ritagliare le informazioni desiderate: netstat -nr | awk '$1 == "0.0.0.0"{print$2}'

Un altro, anche neutrale: arp -n | awk '{print $1}'


semplicenm-tool | grep -oP '(?i)gateway:\s*\K\S+'
Avinash Raj

@AvinashRaj Grazie! Non ho studiato grep e awk molto in profondità, quindi operando sulla conoscenza che avevo già. Sarà buono a sapersi
Sergiy Kolodyazhnyy il

Forse questo è dovuto a qualche peculiarità (aggiuntiva) della mia configurazione, ma su una macchina con adattatori eth0e wlan0, entrambi attivamente connessi ma con un gateway configurato solo su wlan0, nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2solo uscite 0.0.0.0. nm-tool | grep -oP '(?i)gateway:\s*\K\S+'genera due righe: 0.0.0.0seguito da 192.168.1.1. (I modi ip route ...e route -n ...producono giusto 192.168.1.1, che considererei il risultato più desiderabile.)
Eliah Kagan

Questo non funzionerà se la rete non è gestita network-managerad es. Da ifupdowno ... in ifconfigquei casi nm-toolnon genererà l'output desiderato ... in poche parole questa risposta si basa solo sulla rete gestita da network-manager...
heemayl

@EliahKagan Ah, capisco. Nel caso del mio comando, trova le linee con 'gateway' in esso, quindi le fa eco come una linea separata da spazi e taglia il secondo elemento al suo interno. Poiché ci sono due di queste righe lì, il mio comando ne stampa solo una. Il comando di Avinash è migliore in questo caso. Per quanto riguarda 0.0.0.0, ecco qualcosa di correlato . Per quanto riguarda il commento di Heemayl, sì, è vero, e non c'erano specifiche nella domanda del PO oltre a mostrare l'output
Sergiy Kolodyazhnyy,

7

Puoi trovarlo in molti modi

ip route show default

Una domanda migliore, cosa o come vuoi modellare l'output?

ip route show | awk '/default/ {print $3}'

tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2}' | uniq

Dai commenti - (grazie Avinash Raj 0

tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'

non è necessario o perché sarebbe uniqsolo 5 tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'pollici.
Avinash Raj,

così tante scelte. Sul mio sistema stampa due volte senza uniq. La tua soluzione funziona anche.
Pantera

Nota tracepathsupporta -msu alcune versioni di Ubuntu ma non su altre .
Eliah Kagan,

A proposito, @ bodhi.zazen, c'è una variazione nella tua risposta, usa traceroute. Stessa idea comando diverso, giusto?
Sergiy Kolodyazhnyy,

@serg certo, c'è probabilmente un lungo elenco di comandi e opzioni di filtro, sed, awk, perl, grep ...
Pantera

6

Di solito route -n, puoi provare questa sedsoluzione insieme a route -n:

route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p' 

Ecco un 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

Un altro modo sarebbe usare grep:

$ route -n | tr -s ' ' | grep -Po "(?<=0\.0\.0\.0 )[^ ]+(?= 0\.0\.0\.0)"
192.168.1.1

Come ha sottolineato @AvinashRaj, questo può essere fatto solo usando grep(non c'è bisogno di schiacciare gli spazi usando tr):

route -n | grep -Po "0\.0\.0\.0\s*\K\S+(?=\s*0\.0\.0\.0)"
192.168.1.1

non devi usarlo tr, solo grep farà il lavororoute -n | grep -Po "0\.0\.0\.0 \s*\K\S+(?=\s*0\.0\.0\.0)"
Avinash Raj,

1

Lo uso abbastanza spesso:

route -n | awk '{ print $2 }' | grep -Eo '[1-9]{0,3}\.[1-9]{0,3}\.[0-9]{0,3}\.[1-9]{0,3}'

Cosa succede se l'indirizzo è 192.168.0.1?
Avinash Raj,

1

Se hai accesso a un browser web sul sistema puoi andare su http://whatsmyrouterip.com/ e dovrebbe essere in grado di trovare il tuo IP senza alcun comando.

Altrimenti, basta aprire semplicemente il terminale e fare un ip route | grep defaultdovrebbe. Potrebbe dare più di uno a seconda delle interfacce di rete.


0

Lo uso abbastanza spesso e facile da ricordare:

route | grep default | awk '{print $2}'

0
hostname  -I

190.200.200.107 172.21.0.1 172.17.0.1 172.19.0.1 172.18.0.1

quindi per ottenere solo il problema IP

hostname -I | cut -d' ' -f1 

190.200.200.107

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.