Como mostrar (apenas) o endereço IP do meu roteador?

22

Qual comando posso executar para obter apenas o endereço IP do meu roteador?

Com este comando, eu deveria ter apenas o IP do meu roteador e não, por exemplo, toda a tabela de roteamento (como quando executo route -n).

Kaio
fonte

Respostas:

22

One-liners:

  • 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: funciona apenas se sua máquina for a única na rede
  • ip route show | grep -i 'default via'| awk '{print $3 }'

saída: 192.168.0.1para mim

NOTA :

Para 15.04 e posterior, não há nm-tool, então use nmcli dev show <IFACE>. Por exemplo,

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

Edições e informações adicionais

Como você pode ver ao examinar o comando, obtemos a saída de nm-tool(que, nota, obtém informações do NetworkManager), localizamos uma linha contendo a palavra gateway, imprimimos as informações com eco (separadas por espaços) e cortamos apenas o segundo item desse todo saída. Observe que, se você tiver duas ou mais conexões, poderá ser necessário remover a xargs echo | cut -d' ' -f2parte superior e substituí-la por awk '{print $2}'; em outras palavras, a linha inteira ficaria assim nm-tool | grep -i gateway | awk '{print $2}'. Alternativamente, você poderia ter usado nm-tool | grep -oP '(?i)gateway:\s*\K\S+'como proposto por Avinash Raj nos comentários. Como você pode ver, não há nada de especial aqui, e todo o calvário aqui é apenas um exercício no uso de ferramentas de edição de saída, como cut, awk e grep.

Outro método para obter as informações do gateway é através do nmcli dev listcomando (sim, ainda confiando no gerenciador de rede). nmclié a versão da linha de comando do gerenciador de rede. Você pode correr nmcli dev list | grep -i routersou você pode correr nmcli dev list | grep -i 'gw ='. Novamente, você pode se exercitar cortando todas as outras informações, exceto o endereço IP desejado, se desejar.

Como na pergunta original a única especificação era imprimir apenas o gateway padrão, estou confiando na saída da ferramenta nm aqui. O NetworkManager vem com o Ubuntu por padrão; esta é a maneira padrão de gerenciar as conexões de rede do Ubuntu. Se você usar algo diferente, como wicd ou conectar através do wpa_cli, o nm-tool não fornecerá uma resposta. Nesse caso, você pode achar as respostas de outras pessoas abaixo mais úteis.

Uma opção mais neutra em relação à distribuição e neutra em configuração seria usar netstat -n, que usa a tabela de roteamento do kernel, semelhante a route -n. Sua saída é abaixo, nada de surpreendente.

  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

E aqui está a maneira de cortar as informações desejadas: netstat -nr | awk '$1 == "0.0.0.0"{print$2}'

Outro, neutro também: arp -n | awk '{print $1}'

Sergiy Kolodyazhnyy
fonte
simplesnm-tool | grep -oP '(?i)gateway:\s*\K\S+'
Avinash Raj
@AvinashRaj Thanks! Eu não estudei grep e awk muito em profundidade, portanto, operando com o conhecimento que eu já tinha. Isso será bom saber #
Sergiy Kolodyazhnyy
Talvez isso se deva a alguma peculiaridade (adicional) da minha configuração, mas em uma máquina com adaptadores eth0e wlan0, ambos conectados ativamente, mas com um gateway configurado apenas para wlan0, nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2apenas as saídas 0.0.0.0. nm-tool | grep -oP '(?i)gateway:\s*\K\S+'produz duas linhas: 0.0.0.0seguida por 192.168.1.1. (A ip route ...e route -n ...maneiras produzir apenas 192.168.1.1, que eu considero o resultado mais desejável.)
Elias Kagan
Isso não funcionará se a rede não estiver sendo gerenciada por, por network-managerexemplo, ifupdownou ifconfig..nesses casos nm-tool, não gerará a saída desejada .. em poucas palavras, essa resposta depende apenas da rede que está sendo gerenciada por network-manager..
heemayl
@EliahKagan Ah, entendo. No caso do meu comando, ele encontra linhas com 'gateway', ecoando como uma linha separada por espaços e corta o segundo item. Como você tem duas linhas assim, meu comando imprime apenas uma delas. O comando do Avinash é melhor neste caso. Quanto ao 0.0.0.0, aqui está algo relacionado . Como para o comentário de heemayl, sim, isso é verdade, e não havia especificações na pergunta do OP que não seja apenas para mostrar a saída
Sergiy Kolodyazhnyy
7

Você pode encontrar de várias maneiras

ip route show default

Uma pergunta melhor, o que ou como você deseja moldar a saída?

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

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

Dos comentários - (obrigado Avinash Raj 0

tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
Pantera
fonte
você não precisa o para uniqapenas tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'seria 5in.
Avinash Raj
tantas escolhas. No meu sistema, ele imprime duas vezes sem o uniq. A sua solução também funciona.
Panther
Nota tracepathsuporta -mem algumas versões do Ubuntu, mas não em outras .
Eliah Kagan 05/04
A propósito, @ bodhi.zazen, há variação na sua resposta, use traceroute. Mesma idéia comando diferente, certo?
Sergiy Kolodyazhnyy
@serg certeza, provavelmente há uma longa lista de comandos e opções de filtragem, sed, awk, Perl, grep ...
Panther
6

Como você costuma usar route -n, você pode tentar esta sedsolução juntamente com route -n:

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

Aqui está um teste:

$ 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

Outra maneira seria usar grep:

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

Como o @AvinashRaj apontou, isso pode ser feito apenas usando grep(não há necessidade de espremer os espaços usando tr):

route -n | grep -Po "0\.0\.0\.0\s*\K\S+(?=\s*0\.0\.0\.0)"
192.168.1.1
heemail
fonte
você não precisa usar tr, grep só vai fazer o trabalhoroute -n | grep -Po "0\.0\.0\.0 \s*\K\S+(?=\s*0\.0\.0\.0)"
Avinash Raj
1

Eu uso esse com bastante frequência:

route -n | awk '{ print $2 }' | grep -Eo '[1-9]{0,3}\.[1-9]{0,3}\.[0-9]{0,3}\.[1-9]{0,3}'
krt
fonte
E se o endereço for 192.168.0.1?
Avinash Raj
1

Se você tiver acesso a um navegador da web no sistema, acesse http://whatsmyrouterip.com/ e ele poderá encontrar seu ip sem nenhum comando.

Caso contrário, basta abrir o terminal e fazer um ip route | grep defaultdeve ser suficiente. Pode dar mais de um, dependendo das interfaces de rede.

MaZZly
fonte
0

Eu uso isso com bastante frequência e fácil de lembrar:

route | grep default | awk '{print $2}'
sys0dm1n
fonte
0
hostname  -I

190.200.200.107 172.21.0.1 172.17.0.1 172.19.0.1 172.18.0.1

para obter apenas o problema de IP

hostname -I | cut -d' ' -f1 

190.200.200.107

Scott Stensland
fonte