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

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

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

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

Responder1

Uma linha:

  • 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}'Obs: funciona somente 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

OBSERVAÇÃO:

Para 15.04 e posteriores, 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, pegamos a saída de nm-tool(que, observe, pega informações do NetworkManager), encontramos a linha contendo word gateway, imprimimos as informações com echo (separadas por espaços) e, em seguida, cortamos apenas o segundo item de todo esse saída. Observe que se você tiver duas ou mais conexões, pode ser necessário remover xargs echo | cut -d' ' -f2a parte superior e substituí-la por awk '{print $2}'; em outras palavras, toda a linha ficaria assim nm-tool | grep -i gateway | awk '{print $2}'. Alternativamente, você poderia ter usado nm-tool | grep -oP '(?i)gateway:\s*\K\S+'conforme proposto por Avinash Raj nos comentários. Como você pode ver, não há nada de especial feito aqui, e toda a provação aqui é apenas um exercício de uso de ferramentas de edição de saída, como cut, awk e grep.

Outro método de obter as informações do gateway é através nmcli dev listdo comando (sim, ainda contando com o gerenciador de rede). nmclié a versão de linha de comando do gerenciador de rede. Você poderia correr nmcli dev list | grep -i routersou você poderia correr nmcli dev list | grep -i 'gw ='. Novamente, você pode cortar 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 contando com a saída da ferramenta nm aqui. O NetworkManager vem com o Ubuntu por padrão, esta é a forma padrão de gerenciar as conexões de rede do Ubuntu. Se você usar algo diferente, como wicd ou conectar-se através do wpa_cli, o nm-tool não fornecerá uma resposta. Nesse caso, você poderá achar as respostas de outras pessoas abaixo mais úteis.

Uma opção mais neutra em termos de distribuição e de configuração seria usar netstat -n, que usa tabela de roteamento do kernel, semelhante a route -n. A saída está abaixo, nada 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, também neutro:arp -n | awk '{print $1}'

Responder2

Você pode encontrá-lo de muitas 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}'

Responder3

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 forma seria usar grep:

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

Como @AvinashRaj apontou, isso pode ser feito apenas usando grep(não é necessário apertar 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

Responder4

Se você tiver acesso a um navegador da web no sistema, poderá acessarhttp://whatsmyrouterip.com/e deve ser capaz de encontrar seu ip sem nenhum comando.

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

informação relacionada