Si vous gérez le système, vous pouvez rencontrer un cas où vous souhaitez surveiller la vitalité d'autres machines avec la commande ping. Dans un tel cas, lors de l'utilisation de la commande ping à partir d'un système réalisé avec Python, je pense qu'il est courant d'appeler la commande ping du système d'exploitation en utilisant un sous-processus. Cependant, dans ce cas, étant donné que des commandes externes sont utilisées, il y a des problèmes que cela dépend de l'environnement externe et que le contrôle fin est difficile.
Par conséquent, cette fois, je vais introduire une bibliothèque pour la surveillance de la vie et de la mort par socket afin qu'elle puisse être complétée en Python.
pings est une bibliothèque d'envoi de pings en Python. Comme mentionné ci-dessus, le paquet ICMP utilisé pour le ping peut être envoyé en utilisant socket sans utiliser la commande subprocess.
** Remarque **: les pings doivent être exécutés en tant qu'utilisateur root / admin.
Il peut être installé via pip.
pip install pings
Si vous souhaitez surveiller l'état actif de la cible, procédez comme suit. * Assurez-vous de l'exécuter en tant que ** utilisateur root / utilisateur admin ** lors de l'exécution.
--Initialiser l'objet Ping
--Spécifiez la cible de surveillance dans l'argument de la méthode ping ()
response
comme valeur de retour.Plus précisément, le code ressemble à ceci:
.python
import pings
p = pings.Ping() #Création d'objets Ping
res = p.ping("google.com") #Surveiller google
if res.is_reached():
#J'ai pu me connecter à la cible de surveillance
do_something()
else:
#Impossible de se connecter à la cible surveillée
do_something()
Vous pouvez utiliser l'objet response
obtenu comme valeur de retour de la méthode ping pour aider à surveiller l'état du réseau.
res = p.ping("google.com")
res.print_messages() #Le message est affiché
Exemple de résultat d'exécution:
PING google.com (172.217.27.174): 55 data bytes
47 bytes from 172.217.27.174: icmp_seq=0 ttl=49 time=32.333 ms
--- google.com ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max = 32.333/32.333/32.333 ms
Pour surveiller la vitalité de plusieurs machines, procédez comme suit.
.python
import pings
#Adresse IP de la machine de surveillance active
hosts = ["192.168.0.1", "192.168.0.2", "192.168.0.3"]
p = pings.Ping()
#Extraire les adresses IP des machines une par une et exécuter la commande ping
for h in hosts:
res = p.ping(h)
if not res.is_reached():
#Que faire si vous ne pouvez pas vous connecter
do_something()
Avec les paramètres par défaut, vous ne sautez qu'un seul ping, utilisez donc l'option times
si vous souhaitez envoyer plusieurs fois.
.python
import pings
p = pings.Ping()
res = p.ping("google.com", times=3) #Surveiller google,Passer le ping 3 fois
res.print_messages()
Exemple de résultat d'exécution:
PING google.com (172.217.27.174): 55 data bytes
47 bytes from 172.217.27.174: icmp_seq=0 ttl=49 time=32.333 ms
--- google.com ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max = 32.333/32.333/32.333 ms
En spécifiant l'option quiet
sur False
lors de l'initialisation de la classe Ping, le résultat du ping sera affiché dans la sortie standard pendant l'exécution.
.python
import pings
p = pings.Ping(quiet=False)
res = p.ping("google.com") #Surveiller google
Exemple de résultat d'exécution:
PING google.com (172.217.27.174): 55 data bytes
47 bytes from 172.217.27.174: icmp_seq=0 ttl=49 time=32.333 ms
--- google.com ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max = 32.333/32.333/32.333 ms
En raison de tests insuffisants, il peut y avoir des problèmes tels que ne pas fonctionner ou ne pas bien fonctionner dans certains environnements. Si vous souhaitez l'utiliser, veuillez en être conscient avant de l'utiliser.
Si vous avez des problèmes ou des commentaires, veuillez les écrire dans la section commentaires ou dans le numéro sur Github.
http://edo.blog.jp/archives/1790336.html
Recommended Posts