Estoy tratando de obtener la puerta de enlace predeterminada, usando el destino 0.0.0.0
utilicé este comando: netstat -rn | grep 0.0.0.0
y devuelve 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
Mi objetivo aquí es hacer ping a la puerta de enlace predeterminada utilizando el destino 0.0.0.0; así, eso es "133.88.31.70"; pero este devuelve una lista por usar 'grep'.
La pregunta es: ¿cómo obtengo solo la puerta de enlace predeterminada? Lo necesitaré para que mi script bash identifique si la conexión de red está activa o no.
ip
por ahí. De hecho,ip route show
es un aliasip route list
y puede verificarman ip
si este subcomando tiene la sintaxisip route { list | flush } SELECTOR
... Y ninguno de los selectores válidos enumerados esdefault
. Siento queip route show table default
debería hacer lo que queremos, pero desafortunadamente no lo hace. Para cualquier otra persona, coincida también con el comienzo de la línea (se le ha advertido):ip route show | awk '/^default/{print $3}'
Este comando es mucho más rápido que el
ip route | grep
predeterminado en el sistema con muchas (10000+) rutasMire, por ejemplo, desde mi enrutador con BGP completa y ruta predeterminada manual como respaldo
ip route show default show
todas las rutas para mí no solo la ruta predeterminadaip route get
no acepta el valor predeterminado o 0.0.0.0/0 como parámetrofuente
ip route show default
debería hacer el truco para la puerta de enlace predeterminada, o puede usarip route get <someip>
para ver cuál es la ruta para una dirección IP en particular.fuente
Si desea hacer esto usando
netstat
(para que funcione en algo que NO sea Linux ) la solución general es:netstat -rn | grep '^\(default\|0\.0\.0\.0\)' | awk '{print $2}'
Esto muestra las tablas de enrutamiento, utilizando IP en lugar de resolver nombres de host (
netstat -rn
),busca la puerta de enlace predeterminada (líneas que comienzan con
0.0.0.0
odefault
)e imprime el host de la puerta de enlace (segundo campo de los resultados).
La proliferación de
\
caracteres en la expresión regular es significativa:\(
y\)
especificar un grupo\|
es el carácter de alternancia (la cosa de la izquierda o la de la derecha coincide)\.
, es decir, el carácter literal.
en lugar de una expresión regular.
(que coincide con cualquier carácter individual)fuente
grep -e
oegrep
también haría el truco sin necesidad de escapar de los soportes y la tuberíaegrep '^(default|0\.0\.0\.0)'
Así es como lo hago:
fuente
Lo hace aqui
fuente
grep default
cuando ya especificas ladefault
ruta en tuip
comando?La manera MUY fácil ... pregunte a la tabla de enrutamiento cómo llega a una IP fuera de su red
Google DNS == 8.8.8.8
ruta ip obtener 8.8.8.8
fuente
o
o
o
o
Si lo entiendo correctamente, la búsqueda de puerta de enlace predeterminada para esa ruta exacta, la ruta de todos ceros, es 0.0.0.0/0.0.0.0 (o 0/0) para IPv4 o 0000: 0000: 0000: 0000: 0000: 0000 : 0000: 0000 (o: :) para IPv6.
Sin embargo (!), Sin especificar el AF que desea utilizar (-4 o -6 o -f inet o -f inet6), o especificar la ruta de todos ceros como un prefijo IPv4 o IPv6 (0/0 implica IPv4) , no puede descubrir qué es 'predeterminado' ...
Personalmente, no creo que la página del manual sea muy clara al respecto, pero eso es solo mis dos centavos.
fuente