¿Cómo comprobar desde una línea de comando que se puede acceder a la red?

¿Cómo comprobar desde una línea de comando que se puede acceder a la red?

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 comando si se puede acceder a la red y esperar en caso de que no lo sea?


Respuesta1

pinga un host externo puede fallar por una multitud de razones, de las cuales sólo algunas dicen algo útil sobre el estado de su propia red.

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

Deberías ver un resultado similar a

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.0y que su puerta de enlace predeterminada a través de la cual accede al resto de Internet se puede encontrar en 192.168.15.1.

A continuación, puedes intentar llegar a 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, puedes empezar a buscar con herramientas más avanzadas, como traceroutever dónde podría estar fallando tu conexión con el destino.

Sin embargo, después de una rápida comprobación en Google de lo que growlrealmente se supone que es, tengo la sensación de que algo más va mal. ¿Puede ampliar su pregunta para brindarnos algunos detalles más sobre lo que está intentando hacer, cómo lo está intentando y el resultado completo del error? La línea que nos estás dando actualmente se corta abruptamente...

Respuesta2

Una forma muy sencilla y rápida es utilizar 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). De lo contrario, es de esperar que pueda proporcionar una dirección IP/número válido de un sistema remoto y ver si se puede acceder a él.

Aquí esta lapágina de manual de ping.

Actualizar:

Como ejemplo rápido, puede consultar elvalor de retorno(por ejemplo, con "echo $?") from pingpara ver si el comando tuvo éxito (siempre puedes canalizar la salida del comando a > /dev/nul). Nota que uso -c 1aquí, pero podrías 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

Respuesta3

Lo utilizaría netcatpara el servicio deseado.

Por ejemplo, probar un puerto IP, tener éxito

> nc -zv 192.168.1.1 80
Connection to 172.26.0.1 80 port [tcp/http] succeeded!

...y fallando

> nc -zv 192.168.1.1 22
netcat: connect to 172.26.0.1 port 22 (tcp) failed: Connection refused

con tiempo de espera de 10 segundos

> nc -zv -w 10 10.0.0.1 80
netcat: connect to 10.0.0.1 port 80 (tcp) timed out: Operation now in progress

Respuesta4

Utilizo la siguiente función... El valor predeterminado es quad9 pero puedes pasar un dominio diferente. Se agotará el tiempo de espera después de 15 minutos de intentarlo.

wait_for_dns() {

   local fqhn="quad9.net"
   fqhn=${1:-$fqhn}

   printf "waiting"
   for i in {1..15}; do
      local a_record=$(dig +short +time=2 $fqhn)

      if [[ $a_record != '' ]]; then
         printf "\n"
         return 0
      fi

      printf '.'
      sleep 60
   done

   printf "\n"
   return 1
}

información relacionada