En Python, ¿hay una manera de hacer ping a un servidor a través de ICMP y devolver TRUE si el servidor responde, o FALSE si no hay respuesta?
Si no necesita dar soporte a Windows, aquí tiene una forma muy concisa de hacerlo:
import os
hostname = "google.com" #example
response = os.system("ping -c 1 " + hostname)
#and then check the response...
if response == 0:
print hostname, 'is up!'
else:
print hostname, 'is down!'
Esto funciona porque ping devuelve un valor no nulo si la conexión falla. (El valor de retorno realmente difiere dependiendo del error de la red.) También puede cambiar el tiempo de espera de ping (en segundos) usando la opción '-t'. Tenga en cuenta que esto mostrará un texto en la consola.
1 #!/usr/bin/python
2
3 import os
4 import sys
5 import time
6
7 os.system("clear")
8 home_network = "172.16.23."
9 mine = []
10
11 for i in range(1, 256):
12 z = home_network + str(i)
13 result = os.system("ping -c 1 "+ str(z))
14 os.system("clear")
15 if result == 0:
16 mine.append(z)
17
18 for j in mine:
19 print "host ", j ," is up"
¡Una simple que acabo de cocinar en un minuto... usando icmplib necesita privilegios de root el siguiente funciona bastante bien! HTH