1 votes

Code de sortie Ping et Python

J'utilise la commande os.system ("ping 192.168.178.5") pour envoyer un ping à une machine. Le plus drôle, c'est que j'obtiens le code de sortie 0 même si le ping échoue.

Comment puis-je obtenir quelque chose qui me dise que le ping a échoué ou que l'hôte est hors ligne ?

3voto

harrymc Points 394411

Je ne suis pas un utilisateur de Python, mais on peut trouver beaucoup de matériel sur ce problème.

Par exemple, le poste Ping sur le réseau local en Python contient deux solutions que je reproduis ici (non testées).

Solution 1 : Analyse de la sortie de la commande 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")

On peut aussi tester de cette façon le "Request timed out".

Solution 2 : Utilisation d'une socket (adapté du code original donc non garanti)

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

1voto

Hastur Points 17791

L'utilisation de os.system ("ping 192.168.178.5") La commande permettant d'envoyer un ping à une machine dépend du système sur lequel vous vous trouvez.

  • A partir d'un site web aide pour Ping sous Windows :

    Un PING réussi ne renvoie PAS toujours un %errorlevel% de 0. Par conséquent, pour détecter de manière fiable un ping réussi, placez la sortie dans FIND et recherchez le texte "TTL".

    Il semble donc que vous devriez utiliser à la place de ping 192.168.178.5 quelque chose comme ping -n 1 192.168.178.5 | find "TTL="

  • Desde man ping sur Linux (Manuel du gestionnaire du système : iputils)

    Si ping ne reçoit aucun paquet de réponse, il se termine avec le code 1. Si un nombre de paquets et une date limite sont tous deux spécifiés, et que moins de paquets que le nombre indiqué sont reçus à la date limite, le code 1 sera également utilisé. Pour toute autre erreur, le code 2 est utilisé. Sinon, il sort avec le code 0. Cela permet d'utiliser le code de sortie pour savoir si un hôte est vivant ou non.

    Dans ce cas, vous pouvez utiliser directement le code de sortie.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X