Como encontrar o endereço IP do gateway no Linux


9

Qual comando você pode usar para encontrar o Endereço IP do Gateway (por exemplo, endereço do roteador doméstico) para eth0 no Linux?

Preciso obter o endereço IP de um aplicativo de linha de comando para usar em um script de shell.


Você está procurando o endereço IP externo do roteador? No passado, usei um script de raspagem de tela para obter esse tipo de coisa nas páginas de configuração do roteador. A maioria dos roteadores domésticos possui uma configuração baseada em navegador que é fácil de acessar por dentro. É difícil fornecer uma solução geral, mas você pode usar curl ou wget para buscar a página e, em seguida, usar grep & awk para obter o endereço IP.
24610 Tom Bascom

Eu deveria ter sido mais claro na minha pergunta. Basicamente, desejo encontrar o endereço IP do gateway definido como eth0 em uma caixa que possui uma única interface Ethernet. Coincidentemente, esse deve ser o endereço IP de um roteador NAT doméstico, básico, do tipo Linksys ou mais. Eu preciso dele para poder fazer ping em um script de shell.
24909 J. Polfer

Parece mais complexo do que o que eu preciso, mas uma idéia legal e garantida para o trabalho.
24909 J. Polfer

Respostas:


18

Para imprimir apenas o IP gw padrão:

route -n | grep 'UG[ \t]' | awk '{print $2}'

Para imprimir informações de rota em todas as interfaces:

route -n

ou

netstat -rn

O UG não exigiria que a interface estivesse ativa? Eu acho que apenas G seria melhor.
24909 J. Polfer

De qualquer maneira, isso é imediato. Muitos Thanx.
24909 J. Polfer

Queria que você soubesse - na verdade, estou usando esta resposta, mas com apenas um G no padrão grep; não tinha iptools na máquina, eu preciso executar isso.
24909 J. Polfer

2
Você pode salvar o grep, o awk também pode filtrar:route -n | awk '{if($4=="UG")print $2}'
Kenny Rasschaert 20/12

Gostaria de sugerir algo como route -n|awk '$4~/G/{print $2; exit(0)}'para o primeiro gateway, mas ip route get IPé melhor, porque ele lista a rota que seria realmente levado para o determinado IP, que é difícil de encontrar com routesozinho
Tino

9
ip route show 0.0.0.0/0 dev eth0 | cut -d\  -f3

é a minha entrada :)


Eu melhoraria este: ip route show 0.0.0.0/0 | awk '{print $ 3}'
Dominic Eidson

Eu não sei ... o meu ainda é menos teclas :) #
MikeyB 24/06/09

E cuté ~ 20 vezes mais binário do que awk.
K3 --- rnc

Se eu deixar de fora o "dev eth0", ele funciona para eth0 ou wlan0? (I tentar este se eu tivesse um cabo lan tempo suficiente)
Eric Nelson

Seu trabalhou para mim para openwrt os :)
Joy Acharya

5

Você pode obter o gateway padrão do sistema a partir da saída netstat -rouroute


3
$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.199.0   0.0.0.0         255.255.255.240 U         0 0          0 virbr1
192.168.200.0   0.0.0.0         255.255.255.240 U         0 0          0 virbr2
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan0
192.168.122.0   0.0.0.0         255.255.255.0   U         0 0          0 virbr0
0.0.0.0         192.168.1.254   0.0.0.0         UG        0 0          0 wlan0

O 0.0.0.0 é o seu gateway padrão, apontando para 192.168.1.254 na minha casa.


2

A saída da rota -n ou netstat -rn e procure o destino 0.0.0.0.


2

Eu prefiro o pacote iproute :

# get the default route
ip route list | awk ' /^default/ {print $3}'
# get the default route but limit on eth0 (output may be empty)
ip route list dev eth0 | awk ' /^default/ {print $3}'

@ Sheepsimulator: Infelizmente, essa é uma suposição ruim a ser feita. A sugestão de Supermathie é melhor.
Dominic Eidson

@Dominic Eidson - Por quê? Há apenas uma interface Ethernet física na máquina.
24909 J. Polfer

11
exatamente o que é uma suposição ruim?
Martin M.

2

alguém mais baixo que isso? =)

ip r | awk '/^def/{print $3}'

11
Desafio aceito: ip r | awk 'END{print $3}'é três caracteres mais curto.
Kenny Rasschaert

legal, mas na minha caixa debian / squeeze local com pontes KVM meu gw padrão está na linha um. estranho mas verdade. Portanto, a sua solução legal não funciona em todos os lugares: - / (de qualquer maneira +1)
ThorstenS

ip não é um comando UNIX genérico - então, novamente, não funcionará em todos os lugares.
Mei

você está certo, mas em $ Subject está o Linux e não o UNIX;) @David: uau, você tem um blog muito bom!
ThorstenS

11
read x x i x< <(ip r g 1), Resultado está em variável $ i para uso posterior
Tino

1

netstat -rn |awk '{if($1=="0.0.0.0") print $2}'

isso imprimirá claramente o IP do gateway. (o que seria o script linux sem o awk ?)


Então você teria que usar o sed ...netstat -rn|sed -n '/^0.0.0.0/{ s/^[0. ]*//; s/ .*$//; p; }
Mei

0

Se você deseja obter o gateway do arquivo de interfaces:

#!/bin/bash
gateway=$(grep -P '^\tgateway' /etc/network/interfaces)
gateway=$(echo ${gateway:9})    # Remove "  gateway "   
echo "gateway = $gateway"
if [ $gateway == "" ]; then
    echo "gateway is blank"
    exit -1
fi

0

Meu comando one liner para obter o endereço IP do gateway padrão:

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

-2

Abrir o terminal no sistema operacional Linux Geralmente, ele está localizado na barra superior ou na barra inferior, dependendo da distribuição do Linux usada. Depois de abrir a janela do Terminal, digite os seguintes comandos “ip route | Agora, espere um segundo pela saída e anote o endereço de gateway padrão na tela. O endereço de gateway deve se parecer com 192.168.1.1. Depois de conhecê-lo, você pode começar a configurar seu roteador através do painel de administração da web.

Se isso não corrigiu sua rede, você pode precisar de um novo roteador.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.