Estou tentando obter o gateway padrão, usando o destino 0.0.0.0
eu usei este comando: netstat -rn | grep 0.0.0.0
e retorna esta lista:
Destination - Gateway - Genmask - Flags - MSS - Window - irtt - Iface
10.9.9.17 - 0.0.0.0 - 255.255.255.255 - UH - 0 0 0 - tun0
133.88.0.0 - 0.0.0.0 - 255.255.0.0 - U - 0 0 0 - eth0
0.0.0.0 - 133.88.31.70 - 0.0.0.0 - UG - 0 0 0 - eth0
Meu objetivo aqui é executar ping no gateway padrão usando o destino 0.0.0.0; assim, isso é "133.88.31.70"; mas este retorna uma lista por causa do uso de 'grep'.
A pergunta é: Como obtenho apenas o gateway padrão? Vou precisar dele para o meu script bash para identificar se a conexão de rede está ativa ou não.
ip
. Na verdade,ip route show
é um alias paraip route list
e você pode verificarman ip
se esse subcomando tem a sintaxeip route { list | flush } SELECTOR
... E não é um único seletor válido listadodefault
. Eu sinto queip route show table default
deveria fazer o que queremos, mas infelizmente isso não acontece. Para qualquer outra pessoa, coincide com o início da linha, também (você foi avisado):ip route show | awk '/^default/{print $3}'
Esse comando é muito mais rápido que o
ip route | grep
padrão no sistema com muitas rotas (10000+)Veja, por exemplo, no meu roteador com BGP completo e rota padrão manual como backup
ip route show default show
todas as rotas para mim não apenas a rota padrãoip route get
não aceita o padrão ou 0.0.0.0/0 como parâmetrofonte
ip route show default
deve executar o truque para o gateway padrão ou você pode usarip route get <someip>
para ver qual é a rota para um endereço IP específico.fonte
Se você quiser fazer isso usando
netstat
(para que funcione em algo que NÃO seja Linux ), a solução geral é:netstat -rn | grep '^\(default\|0\.0\.0\.0\)' | awk '{print $2}'
Isso mostra as tabelas de roteamento, usando IPs, em vez de resolver nomes de host (
netstat -rn
),procura o gateway padrão (linhas começando com
0.0.0.0
oudefault
)e imprime o host de gateway (segundo campo dos resultados).
A proliferação de
\
caracteres na expressão regular é significativa:\(
e\)
especifique um grupo\|
é o caractere de alternância (a coisa à esquerda ou a coisa à direita corresponde)\.
- significando o caractere literal.
em oposição a uma Expressão regular.
(que corresponde a qualquer caractere único)fonte
grep -e
ouegrep
também fazer o truque sem a necessidade dos suportes e do tubo a ser escapouegrep '^(default|0\.0\.0\.0)'
É assim que eu faço:
fonte
Faz aqui
fonte
grep default
quando você já especifica adefault
rota em seuip
comando?A maneira MUITO fácil ... pergunte à tabela de roteamento como chega a um IP fora da rede
DNS do Google == 8.8.8.8
ip route get 8.8.8.8
fonte
ou
ou
ou
ou
Se entendi direito, a pesquisa de gateway padrão para essa rota exata - a rota com todos os zeros - é 0.0.0.0/0.0.0.0 (ou 0/0) para IPv4 ou 0000: 0000: 0000: 0000: 0000: 0000 : 0000: 0000 (ou: :) para IPv6.
No entanto (!), Sem especificar o AF que você deseja usar (-4 ou -6 ou -f inet ou -f inet6) ou especificar a rota all-zeros como um prefixo IPv4 ou IPv6 (0/0 implica IPv4) , ele não pode descobrir o que é 'padrão' ...
Pessoalmente, não acho que a página de manual seja muito clara sobre isso, mas esses são apenas meus dois centavos.
fonte