Estoy tratando de escribir un script que enumere todos los hosts en mi LAN (hay unos 20 de ellos) y escribe el estado de ping junto a cada host. Tengo el archivo de arrendamientos DHCP, así que tengo todas las IP (por ejemplo, 10.0.0.1, 10.0.0.2, etc.), todo lo que necesito es el estado de ping para cada host.
Entonces, mi script lanza un solo ping para cada host:
ping -c 1 10.0.0.1
Desafortunadamente, cuando un host está fuera de línea, el ping demora mucho tiempo. Lo comprobé man ping
, parece que hay dos opciones para configurar el tiempo de espera: -w deadline
y -W timeout
. Creo que estoy interesado en lo último.
Entonces intenté esto:
ping -c 1 -W 1 10.0.0.1
Pero esperar un segundo por host sin conexión todavía es demasiado largo. Intenté establecerlo por debajo de un segundo, pero no parece tener en cuenta el parámetro en absoluto:
ping -c 1 -W 0.1 10.0.0.1 # timeout option is ignored, apparently
¿Hay alguna manera de establecer el tiempo de espera en un valor inferior? Si no, ¿hay alguna alternativa?
Editar
- El sistema operativo es Debian Lenny.
- Los hosts que estoy intentando hacer ping son en realidad puntos de acceso. Están en la misma vlan y subred que los usuarios (por simplicidad de implementación y reemplazo). Es por eso que no quiero escanear toda la subred (con un
ping -b
por ejemplo).
Editar # 2
Acepté la fping
solución (gracias por todas las otras respuestas). Este comando hace exactamente lo que estaba buscando:
fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4
Este comando tarda como máximo 500 ms en completarse y me da el estado de ping de todos los hosts a la vez:
10.0.0.1 : [0], 84 bytes, 5.71 ms (5.71 avg, 0% loss)
10.0.0.2 : [0], 84 bytes, 7.95 ms (7.95 avg, 0% loss)
10.0.0.3 : [0], 84 bytes, 16.1 ms (16.1 avg, 0% loss)
10.0.0.4 : [0], 84 bytes, 48.0 ms (48.0 avg, 0% loss)
10.0.0.1 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 5.71/5.71/5.71
10.0.0.2 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 7.95/7.95/7.95
10.0.0.3 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 16.1/16.1/16.1
10.0.0.4 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 48.0/48.0/48.0
En Debian Lenny, la instalación es trivial:
aptitude update
aptitude install fping
Para las personas que buscan una solución que implique
ping
, use el-i
interruptor.O, si desea usar 0.1, deberá ejecutarlo como root
No es necesario descargar utilidades adicionales.
fuente
ping
esperará una respuesta, sino que simplemente envía pings consecutivos más rápido ...Puede establecer un tiempo de espera corto con el
timeout
comando en Ubuntu / Debian:fuente
timeout (GNU coreutils) 8.4
.DURATION is a floating point number with an optional suffix: 's' for seconds (the default),
... En misman timeout
informes de casosGNU coreutils 8.26
. BWT, estoy usando Ubuntu 17.04.Estaría usando nmap para esta tarea.
nmap -sP --max-retries=1 --host-timeout=1500ms 10.0.0.1
Consulte la documentación de nmap para obtener más detalles al respecto.
fuente
es posible que desee ver la herramienta arp ping si todos sus hosts están en la LAN física. Hace lo mismo pero usa los paquetes arp de capa 2 para hacer el 'ping'. Puede usar una combinación de arpping y icmp ping, o de hecho tcp ping, para determinar cuál es la falla. El ejemplo es un bloqueo de la pila tcp, aunque es raro en estos días, podríamos encontrar si una pila tcp de la máquina se ha bloqueado, ya que la máquina no respondería al ping, pero respondería a arp (que es un código diferente en el host) .
utilizando una combinación de arpping, tcpping e icmp ping, puede averiguar si el servicio en la máquina se ha bloqueado, la pila de tcp se ha bloqueado o la máquina se ha bloqueado por completo. Si ha administrado conmutadores Ethernet, puede obtener datos de enlace físico, revelando si la máquina está realmente encendida o si se ha desconectado físicamente. Tuvimos una situación en la que las máquinas (clientes en salas públicas) estarían apagadas, reunimos esos datos y los paquetes lanzados de estela para encender las máquinas. :-)
Independientemente de las soluciones que cree, si su red está ocupada, piense en implementar algún tipo de qos, de modo que sus paquetes de monitoreo tengan prioridad en la red, y la pérdida de paquetes de medición debido a la congestión de la red puede generar falsas alarmas. Si usa qos para monitorear paquetes, entonces deberá pensar en recopilar datos sobre la utilización de la red.
Por lo tanto, puede hacer que su solución de monitoreo sea tan compleja o fácil como desee. Encontramos que incluso el sistema de monitoreo más elemental es un paso en la dirección correcta, al menos algún administrador vigila las máquinas :-).
¡buena suerte!
fuente
@ jordon-bedwell tiene una gran sugerencia.
@ laszlo-valko https://stackoverflow.com/questions/20359487/why-does-ping-not-timeout-in-linux explica que los tiempos de espera de ping solo comienzan después de que se haya determinado la dirección IP. Si usa un dns y su estación de trabajo está fuera de línea, entonces ping no puede determinar la dirección IP y parece esperar aproximadamente 20 segundos por defecto antes de devolver falso.
El uso de la herramienta 'timeout' de linux proporciona más control al ejecutar ping con un nombre de dominio.
Gracias chicos
fuente
Use el interruptor -w , tanto en Windows como en Debian.
Es una manera rápida de verificar si la máquina responde, suponiendo que responda a tiempo menos de la cantidad de segundos especificada.
fuente
Si puede escanear su subred (o parte de ella) sin activar alarmas de seguridad, y no le importa un poco de datos adicionales, Angry IP Scanner es rápido, gratuito, le permite hacer clic para ordenar por estado y puede proporcionar información más detallada .
fuente
¿Por qué no iniciar ping en segundo plano, con salida a un archivo temporal, en paralelo para cada host? Luego duerma un segundo, elimine los procesos de ping que aún se estén ejecutando y lea los archivos para recopilar la salida.
fuente
El tiempo de espera es un valor entero que indica hasta qué punto se puede enviar el paquete. Los valores por debajo de 1 no tienen sentido. Un valor de 1 indica que solo está haciendo ping a vecinos inmediatos.
La única forma de acelerar las cosas es realizar una verificación de antecedentes y cosechar los resultados. Esto es lo que hacen herramientas como Nagios.
fuente
Podrías probar algo como esto. Pero tarda 15 minutos en ejecutarse.
fuente
nmap
que sería la herramienta adecuada para el trabajo.prueba esto:
fuente
fping
?ping tiene opciones [-t timeout] y [-W waittime] para que pueda hacer:
fuente