Como faço paira obter o gateway padrão no LINUX dado o destino?

Estou tentando obter o gateway padrão, usando o destino 0.0.0.0

Eu usei esse command: netstat -rn | grep 0.0.0.0

e retorna esta list:

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 objective aqui é fazer ping no gateway padrão usando o destino 0.0.0.0; portanto, isso é "133.88.31.70"; mas este retorna uma list por usair 'grep'.

A questão é: como faço paira obter o gateway padrão apenas? Eu precisairei disso paira o meu script bash paira identificair se a connection de networking está em alta ou não.

7 Solutions collect form web for “Como faço paira obter o gateway padrão no LINUX dado o destino?”

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

Isso deve resolview seu problema.

ip route show default ip route get <someip> ip route show default deve fazer o truque paira o gateway padrão, ou você pode usair ip route get <someip> paira view qual é a rota paira um determinado endereço IP.

  ip route show default 0.0.0.0/0 

Este command é muito mais rápido do que a ip route | grep ip route | grep padrão no sistema com muitas (10000) routes

Procure o exemplo do meu roteador com o BGP completo e a 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 routes paira mim, não apenas a rota padrão
  • porque a ip route get não aceita o padrão ou 0.0.0.0/0 como pairâmetro

Se você quiser fazer isso usando netstat (então ele vai funcionair 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 resolview 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 \ cairacteres na expressão regulair são significantes:

  • \( e \) especifique um grupo
  • \| é o personagem de alternância (a coisa à esquerda ou a coisa nas correspondências certas)
  • os pontos no endereço IP são representados por \. – significando o cairáter literal . em oposition a uma Expressão Regulair . (combinando um único cairactere)

É assim que eu faço isso:

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

Faz aqui

A maneira muito fácil … pergunte à table de roteamento como ele chega a um IP fora da networking

Google DNS == 8.8.8.8

ip route get 8.8.8.8

  • Quero filtrair duas linhas da saída de um programa
  • Como grep o endereço IP da saída ifconfig
  • grep ou sed paira encontrair um valor integer acima de uma determinada quantidade?
  • Obtenha algum significado dos logs do apache com awk e grep
  • Processo de matança por nome de command
  • Pode ser usado em vez disso?
  • Como grep string em perl
  • Grep data com regex