Script de Ping

Ce script, nommé Ping_Script.py, a pour but de lister, dans un fichier, l’ensemble des nœuds actifs dans un réseau donné.

En effet, le script va utiliser une plage d’adresse donnée et va la parcourir pour faire un Ping sur chaque adresse de la plage. Si l’adresse a été attribuée à un nœud et que ce dernier est actif, il y aura une réponse de sa part. De ce fait, le script va créer un fichier, nommé IP_Adresses.txt, où il va mettre toutes les adresses des nœuds actifs.

Voici le script :

import os
import threading


def main():
    pass


if __name__ == '__main__':
    main()

liste = list()

#print(liste)


def ping(cmd, ip_address):
    # Envoie de la commande ping
    shell = os.popen(cmd)

    # Mettre la sortie de la commande ping dans une variable
    output = shell.read()
    if output.count("0% packet loss") == 1 and output.count("Unreachable") == 0:
        # Ajout des adresses IP actives dans une liste
        liste.append(ip_address)

        # Mettre la liste dans un fichier à utiliser ultérieurement
        with open('IP_Addresses.txt', 'w') as f:
            for ip in liste:
                f.write(ip + '\n')



# Thread pour lancer les ping en parallèle
for i in range(1, 251):
    ip = "192.168.3.{}".format(i)
    commande = "ping -c 1 {}".format(ip)
    threading.Thread(target=ping, args=(commande, ip,)).start()

Presque tout se passe dans la fonction ping() qui prend en entrée la commande ping et l’adresse IP du destinataire.

Dans cette fonction, un fichier va être créé. Si le destinataire répond au ping, c’est-à-dire output.count(« 0% packet loss ») == 1 and output.count(« Unreachable ») == 0, son adresse va être ajoutée dans ce fichier :

liste.append(ip_address)
with open('IP_Addresses.txt', 'w') as f:
     for ip in liste:
         f.write(ip + '\n')

Il faut noter que les Ping sont envoyés en parallèle en utilisant des Threads, pour gagner plus de temps :

for i in range(1, 251):
    ip = "192.168.3.{}".format(i)
    commande = "ping -c 1 {}".format(ip)
    threading.Thread(target=ping, args=(commande, ip,)).start()