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

18

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 eu corro route -n ).

    
por kaio 05.04.2015 / 02:04

7 respostas

16

Linhas diretas:

  • nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2
  • nm-tool | grep -i gateway | awk '{print }
  • netstat -nr | awk ' == "0.0.0.0"{print}'
  • arp -n | awk '{print }' Nota: funciona apenas se a sua máquina for a única na rede
  • ip route show | grep -i 'default via'| awk '{print }'

saída: 192.168.0.1 para mim

NOTA :

Para 15.04 e posterior, não há nm-tool , portanto 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, tomamos as informações do NetworkManager), encontramos a linha contendo a palavra gateway , imprimimos as informações com eco (separadas por espaços) e em seguida, corte apenas o segundo item dessa saída inteira. Observe que, se você tiver duas ou mais conexões, talvez seja necessário remover top xargs echo | cut -d' ' -f2 part e substituí-lo por awk '{print }' ; em outras palavras, toda a linha ficaria assim em nm-tool | grep -i gateway | awk '{print }' . 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 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 para obter as informações do gateway é através do comando nmcli dev list (sim, ainda contando com o gerenciador de rede). nmcli é a versão de linha de comando do gerenciador de rede. Você pode executar nmcli dev list | grep -i routers ou executar nmcli dev list | grep -i 'gw =' . Novamente, você poderia se exercitar no corte de todas as outras informações, exceto o endereço IP desejado, se quisesse.

Como na pergunta original a única especificação era imprimir apenas o gateway padrão, estou contando com a saída da nm-tool 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 o wicd ou o wpa_cli, a ferramenta nm não fornecerá uma resposta. Nesse caso, você pode encontrar as respostas de outras pessoas abaixo mais úteis.

Uma opção mais neutra e neutra de 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 suas informações desejadas: netstat -nr | awk ' == "0.0.0.0"{print}'

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

    
por Sergiy Kolodyazhnyy 05.04.2015 / 06:28
8

Você pode encontrar 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 }'

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

Dos comentários - (obrigado Avinash Raj 0

tracepath -m 1 8.8.8.8 | awk '/1:/ {print ;exit}'
    
por Panther 05.04.2015 / 02:18
5

Como você normalmente usa route -n , pode tentar esta solução sed juntamente com route -n :

route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +.*//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) +([^ ]+) +.*//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 @AvinashRaj apontou, isso pode ser feito usando apenas grep (não é necessário 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
    
por heemayl 05.04.2015 / 02:28
1

Eu uso esse aqui com bastante frequência:

route -n | awk '{ print  }' | grep -Eo '[1-9]{0,3}\.[1-9]{0,3}\.[0-9]{0,3}\.[1-9]{0,3}'
    
por krt 05.04.2015 / 15:56
1

Se você tiver acesso a um navegador da Web no sistema, poderá acessar o link e ele poderá encontrar seu ip sem nenhum comando .

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

    
por MaZZly 05.06.2018 / 18:43
0

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

route | grep default | awk '{print }'
    
por sys0dm1n 05.11.2017 / 13:18
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

    
por Scott Stensland 05.06.2018 / 18:50