Como obtenho o gateway padrão no LINUX dado o destino?

12

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 é fazer 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 faço para obter apenas o gateway padrão? Vou precisar dele para o meu script bash para identificar se a conexão com a rede está ativa ou não.

    
por Suezy 30.07.2009 / 08:53

7 respostas

20
DEFAULT_ROUTE=$(ip route show default | awk '/default/ {print $3}')
ping -c 1 $DEFAULT_ROUTE

Isso deve resolver seu problema.

    
por 30.07.2009 / 09:07
3

ip route show default deve fazer o truque para o gateway padrão ou você pode usar ip route get <someip> para ver qual é a rota de um determinado endereço IP.

    
por 30.07.2009 / 08:57
3
 ip route show default 0.0.0.0/0

Este comando é muito mais rápido que ip route | grep default no sistema com muitas rotas (10000+)

Procure, por exemplo, meu roteador com BGP completo e rota padrão manual como backup

router:~# time ip route show default 0.0.0.0/0
default via XXX.XXX.192.254 dev eth0.123 

real    0m0.707s
router:~# time ip route | grep default
default via XXX.XXX.192.254 dev eth0.123 

real    0m8.596s
  • porque ip route show default show todas as rotas para mim não apenas a rota padrão
  • porque ip route get não aceita padrão ou 0.0.0.0/0 como parâmetro
por 23.10.2015 / 08:59
2

Se você quiser fazer isso usando netstat (para que funcione em algo que é NÃO 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 que começam com 0.0.0.0 ou default ),
e imprime o host do gateway (segundo campo dos resultados).

A proliferação de caracteres \ na expressão regular é significativa:

  • \( e \) especificam um grupo
  • \| é o caractere de alternação (a coisa à esquerda ou a coisa à direita)
  • os pontos no endereço IP são representados por \. - significando o caractere literal . em oposição a uma Expressão Regular . (correspondendo a qualquer caractere único)
por 27.09.2012 / 19:37
1

É assim que eu faço:

#!/bin/sh
GATEWAY_DEFAULT=$(ip route list | sed -n -e "s/^default.*[[:space:]]\([[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\).*//p")
echo ${GATEWAY_DEFAULT}
    
por 24.07.2012 / 01:51
1
 ip route show default | grep default | awk {'print $3'}

Isso aqui

    
por 27.09.2012 / 18:54
-1

A maneira muito fácil ... perguntar a tabela de roteamento como ele chega a um IP fora de sua rede

DNS do Google == 8.8.8.8

ip route obtém 8.8.8.8

    
por 20.11.2014 / 16:19

Tags