Eu não sou usuário de Python, mas é possível encontrar muito material sobre esse problema.
Por exemplo, a postagem ping da rede local em python contém duas soluções que eu reproduzo aqui (não testado).
Solução 1: Analisando a saída do comando ping
import subprocess
hostname = "10.20.16.30"
output = subprocess.Popen(["ping.exe",hostname],stdout = subprocess.PIPE).communicate()[0]
print(output)
if ('unreachable' in output):
print("Offline")
Também é possível testar esse caminho para "Solicitação expirada".
Solução 2: Usando um soquete (adaptado do código original, portanto, não garantido)
s = socket(AF_INET, SOCK_STREAM) # Creates socket
host = 'localhost' # Enter the IP of the workstation here
port = 80 # Select port which should be pinged
try:
s.connect((host, port)) # tries to connect to the host
except ConnectionRefusedError: # if failed to connect
print("Server offline") # server is offline
s.close() # close socket