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.

ippor ahí. De hecho,ip route showes un aliasip route listy puede verificarman ipsi este subcomando tiene la sintaxisip route { list | flush } SELECTOR... Y ninguno de los selectores válidos enumerados esdefault. Siento queip route show table defaultdeberí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 | greppredeterminado 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 showtodas las rutas para mí no solo la ruta predeterminadaip route getno acepta el valor predeterminado o 0.0.0.0/0 como parámetrofuente
ip route show defaultdeberí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.0odefault)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 -eoegreptambié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 defaultcuando ya especificas ladefaultruta en tuipcomando?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