Une bibliothèque qui surveille la vie et la mort d'autres machines en envoyant un ping à partir de Python

Comment vérifier la communication avec d'autres machines avec du code Python

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.

Surveillance de la vie et de la mort à l'aide de Pings

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.

Installation

Il peut être installé via pip.

pip install pings

Comment utiliser

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 ()

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

Paramètres plus fins

Je veux surveiller la vie et la mort de plusieurs cibles

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()

Je veux ignorer le ping plusieurs fois

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

Je souhaite afficher le résultat sur la sortie standard

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 conclusion

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.

référence

http://edo.blog.jp/archives/1790336.html

Recommended Posts

Une bibliothèque qui surveille la vie et la mort d'autres machines en envoyant un ping à partir de Python
D'un livre qui apprend de manière intéressante la façon de penser du programmeur (Python)
Prise en compte des forces et faiblesses de Python
[Python] Un programme qui calcule le nombre de mises à jour des enregistrements les plus élevés et les plus faibles
[Python] Un programme qui compte le nombre de vallées
Points Python du point de vue d'un programmeur en langage C
[Python] Un programme qui compare les positions des kangourous.
Un script python qui obtient le nombre de travaux pour une condition spécifiée sur Indeed.com
Une application cliente python qui télécharge et supprime des fichiers de S3 en spécifiant un compartiment
[Python] Représentation du nombre de plaintes des compagnies d'assurance-vie dans un graphique à barres
Différent du type d'importation de python. Signification de depuis A import B
Un exemple de mécanisme qui renvoie une prédiction par HTTP à partir du résultat de l'apprentissage automatique
Python: créer un dictionnaire à partir d'une liste de clés et de valeurs
Script Python qui peut vérifier l'état du serveur à partir du navigateur
Script Python qui compare le contenu de deux répertoires
[Python] Un programme pour trouver le nombre de pommes et d'oranges qui peuvent être récoltées
J'ai créé un robot Line qui devine le sexe et l'âge d'une personne à partir de l'image
[Python] Un programme qui compare chaque élément de la liste un par un et gagne ou perd. Zip *: français ()
Une formule qui calcule simplement l'âge à partir de la date de naissance
Lire la sortie standard d'un sous-processus ligne par ligne en Python
À partir d'un livre que le programmeur peut apprendre ... (Python): trouver la valeur la plus fréquente
À partir d'un livre que les programmeurs peuvent apprendre ... (Python): examen des tableaux
[Python] Obtenir la date de mise à jour d'un article d'actualité à partir de HTML
Une fonction qui mesure le temps de traitement d'une méthode en python
Vérification de la théorie selon laquelle "Python et Swift sont assez similaires"
[python] Une note que j'ai commencé à comprendre le comportement de matplotlib.pyplot
L'histoire de la création d'un module qui ignore le courrier avec python
[Python] Un programme qui fait pivoter le contenu de la liste vers la gauche
L'histoire de Python et l'histoire de NaN
Existence du point de vue de Python
Ceci et cela des propriétés python
Configurer un serveur SMTP factice avec Python et vérifier le fonctionnement de l'envoi depuis Action Mailer
[Python] J'ai analysé le journal d'un homme au cours de sa première année de vie professionnelle et j'ai fait un jugement positif / négatif sur la vie professionnelle.
Extension de Python par C ou C ++ (lorsqu'il y a plusieurs arguments, lors du passage d'une liste du côté Python)
Calculer l'itinéraire le plus court d'un graphe avec la méthode Dyxtra et Python
[Python] Un programme qui calcule le nombre de chaussettes jumelées
Extraire les lignes qui correspondent aux conditions d'un fichier texte avec python
Le type Enum, qui entre dans la bibliothèque standard de Python 3.4, est toujours utile
J'ai essayé de vérifier et d'analyser l'accélération de Python par Cython
Une note sur les fonctions de la bibliothèque Linux standard qui gère le temps
Découvrez le nom de la méthode qui l'a appelée à partir de la méthode qui est python
Lecture de code de faker, une bibliothèque qui génère des données de test en Python
[Python] Note: Fonction auto-conçue pour trouver la zone de distribution normale
Ceci et celui de la notation d'inclusion.
Notes d'apprentissage depuis le début de Python 1
Connectez beaucoup de Python ou et et
Article qui peut être une ressource humaine qui comprend et maîtrise le mécanisme de l'API (avec du code Python)
[python] [meta] Le type de python est-il un type?
Pandas du débutant, par le débutant, pour le débutant [Python]
[Python] Une fonction qui aligne la largeur en insérant un espace dans le texte qui est un mélange de pleine largeur et demi-largeur.
L'histoire du traitement A du blackjack (python)
Notes d'apprentissage depuis le début de Python 2
[Python] Un programme qui arrondit le score
Utilisez Ruby et Python pour trouver la probabilité qu'une carte avec un nombre naturel de 1 à 100 soit un multiple de 3 et non un multiple de 5.
Rendre la bibliothèque créée par Eigen of C ++ disponible à partir de Python avec Boost.Numpy.
L'histoire de la fabrication d'une boîte qui interconnecte la mémoire AL de Pepper et MQTT
Python --Lisez les données d'un fichier de données numériques et recherchez la ligne de régression multiple.
Script Python qui lit les fichiers SQL, exécute BigQuery et enregistre le csv