¿Cómo verificar desde una línea de comando que la red es accesible?


12

Quiero enviarme un gruñido después de que el servidor SuSE finalice el proceso de arranque. Recibí este mensaje socket_sendto(): unable to write to socket [101]: Network is unreachable in.

¿Cómo puedo verificar desde la línea de comandos si la red es accesible y esperar en caso de que no lo sea?



Linux one-liner para responder sí o no, ¿estamos conectados a internet ping -c 1 www.yourtrustedserver.com | grep " 0% packet loss"? Lo que esto hace es hacer ping al servidor con un paquete, y greps la salida para la cadena "0% de pérdida de paquetes". (el espacio antes del 0% es importante) Si el comando devuelve una fila, está conectado, de lo contrario, no está conectado.
Eric Leschinski

Respuestas:


13

ping a un host externo puede fallar por una multitud de razones, solo algunas de las cuales realmente dicen algo útil sobre el estado de su propia red.

Como primer paso, abra una ventana de terminal y escriba ip route ls

Debería ver una salida a lo largo de las líneas de

shadur@equinox:~$ ip route ls
192.168.15.0/24 dev eth0  proto kernel  scope link  src 192.168.15.102 
default via 192.168.15.1 dev eth0 

Esto indica que su red local es una conexión ethernet ( eth0) con la dirección 192.168.15.0, y que se puede encontrar su puerta de enlace predeterminada a través de la cual accede al resto de Internet 192.168.15.1.

A continuación, puede intentar con pingesa dirección:

shadur@equinox:~$ ping 192.168.15.1
PING 192.168.15.1 (192.168.15.1) 56(84) bytes of data.
64 bytes from 192.168.15.1: icmp_req=1 ttl=255 time=0.352 ms
64 bytes from 192.168.15.1: icmp_req=2 ttl=255 time=0.269 ms
^C
--- 192.168.15.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.269/0.310/0.352/0.045 ms

Si ve algo similar a lo anterior, su propia red local está, al menos, bien. En este punto, puede comenzar a buscar con herramientas más avanzadas como traceroutever dónde puede fallar su conexión con el destino.

Sin embargo, después de un rápido chequeo en Google de lo growlque realmente se supone que es, tengo la sensación de que algo más está yendo mal. ¿Puede ampliar su pregunta para darnos algunos detalles más sobre lo que está tratando de hacer, cómo lo está intentando y el resultado completo del error? La línea que nos está dando actualmente se corta abruptamente ...


3
ip route get 1.2.3.4es más confiable que solo hacer ip route ls. El primero tendrá en cuenta las reglas vigentes además de las rutas. También elimina la posibilidad de leer mal las tablas de enrutamiento.
Patrick

3

Una manera muy simple y rápida es usar el pingcomando.

Puedes simplemente escribir

 $ ping yahoo.com

(o cnn.com o cualquier otro host) y vea si obtiene algún resultado. Esto supone que los nombres de host se pueden resolver (es decir, dns está funcionando). Si no es así, es de esperar que pueda proporcionar una dirección IP / número válido de un sistema remoto y ver si se puede alcanzar.

Aquí está la página del comando man .

Actualización :

Como un ejemplo rápido, puede verificar el valor de retorno (por ejemplo, con "echo $?") de pingpara ver si el comando tuvo éxito (siempre puede canalizar la salida del comando a > /dev/nul). Tenga en cuenta que uso -c 1aquí, pero podría usar más.

$ ping -c 1 yahoo.com
PING yahoo.com (72.30.38.140) 56(84) bytes of data.
64 bytes from ir1.fp.vip.sp2.yahoo.com (72.30.38.140): icmp_seq=1 ttl=52 time=83.5 ms

--- yahoo.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 83.593/83.593/83.593/0.000 ms

echo $?
0


$ ping -c 1 unicorns.are.here
ping: unknown host unicorns.are.here

$ echo $?
2

Pero, ¿cómo puedo darme cuenta al usar ping que todo está bien?
Radek

1
@Radek ¿Ya has intentado ejecutarlo? ping te dice si recibe respuestas.
jw013

¿Qué sucede si el servidor está solo en la intranet y no tiene acceso al mundo exterior?
Radek

@ jw013: No lo he intentado ... No sé usar ping desde un script desatendido.
Radek

3
@Radek es bastante simple. Supongo que por "conectividad" quiere decir que puede hablar con algún otro host en la intranet. Por lo tanto, ejecute ping -c 2 -n <other host's IP>y opere con el código de retorno: si es verdadero (0), entonces tiene conectividad; si es falso (1), entonces no puede hablar con esa máquina.
lxop

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.