¿Hay alguna forma de iniciar un ping (repetido) mientras no se puede acceder a la red?

¿Hay alguna forma de iniciar un ping (repetido) mientras no se puede acceder a la red?

Mi comando ping (en Debian 6 o 7) intentará repetidamente hacer ping a un servidor incluso cuando la red esté inactiva.sila red estaba activa cuando se inició. ¿Hay alguna manera de comenzar a hacer ping mientras la red está inactiva y obtener el mismo comportamiento?

He aquí un ejemplo. Si inicio un ping repetido mientras la red está activa y mientras el ping se está ejecutando, la red se cae, el ping continúa repitiéndose. Si la red vuelve a funcionar, seguirá haciendo ping:

me@here:~$ ping -n 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=46 time=117 ms
...
64 bytes from 8.8.8.8: icmp_req=6 ttl=46 time=116 ms
ping: sendmsg: Network is unreachable
...
ping: sendmsg: Network is unreachable
64 bytes from 8.8.8.8: icmp_req=108 ttl=46 time=694 ms
...

Sin embargo, si la red no funciona cuando ejecuto ping:

me@here:~$ ping -n 8.8.8.8
connect: Network is unreachable
me@here:~$

Este es el mismo problema de red inalcanzable, pero el ping no continúa hasta que la red vuelve a estar activa, como antes.

Respuesta1

Puedes usar un bucle while en un script de shell:

failed=1 # any number not equal to zero
while [ $failed -ne 0 ]
do
   ping -n 8.8.8.8
   failed=$?
done
# after the  $? becomes "0" it will get out of the while loop
echo "ping succeeded"

Para dejar de seguir imprimiendo el connect: Network is unreachablemensaje, puede editar la línea con ping de esta manera:

ping -n 8.8.8.8 2> /dev/null

O puede agregar un sleepbucle para reducir la cantidad de esos mensajes.

El guión se puede simplificar a

while ! ping -n 8.8.8.8
do
    sleep 1
done

Lo que permite escribirlo en una línea:

while ! ping -n 8.8.8.8; do sleep 1; done

Respuesta2

AFAICT, pingno se ejecutará si no puede abrir un socket en una interfaz (porque la interfaz está inactiva). Si revisa sus dispositivos con ip link show, verá qué dispositivos estánarribaoabajo.

Intente activar el dispositivo de red primero.

$ sudo ip link set <iface> up
$ ping -n 8.8.8.8

Probé esto en mi caja Arch Linux con unabajointerfaz wifi y unarribainterfaz virtual ethernet (sin dirección IP asignada). A pingen el primero se cierra, mientras que el segundo pinges continuo.

De lo contrario, utilice el script de shell del networker.

Respuesta3

Puedes usarlo fpingcon sus opciones -ly , en lugar de . Esto requiere conocer el nombre de la interfaz y ejecutarla como root:-Iping

root@here:~# fping -l -I wlan0 -n 8.8.8.8

me@here:~$ sudo fping -l -I eth0 -n 8.8.8.8

información relacionada