Lancer un scan des adresse ip depuis Home Assistant
Révision datée du 26 septembre 2023 à 17:52 par 192.168.2.1 (discussion)
Il s'agit d'un exercice, qui consiste à définir un service dans Home Assistant pour scanner des adresses IP.
Une fois de plus, j'ai fait appel à ChatGPT, pour créer un script Python.
Voici ce qu'il m'a proposé, je l'ai stocké dans le dossier Scripts
# Importez les modules nécessaires import sys import socket from scapy.all import ARP, Ether, srp # Définissez une fonction pour scanner les adresses IP def scan_ips(start_ip, end_ip): # Générez une liste d'adresses IP dans la plage spécifiée ip_range = [f'192.168.0.{i}' for i in range(start_ip, end_ip + 1)] # Créez un objet ARP avec les adresses IP de la plage arp = ARP(pdst=ip_range) # Créez un objet Ether avec une adresse de destination spéciale ether = Ether(dst="ff:ff:ff:ff:ff:ff") # Combinez les objets Ether et ARP pour créer un paquet packet = ether/arp # Envoyez le paquet et attendez les réponses pendant 3 secondes result = srp(packet, timeout=3, verbose=0)[0] # Parcourez les paires de paquets envoyés et reçus for sent, received in result: # Affichez l'adresse IP source et tentez de résoudre le nom d'hôte print(f"IP: {received.psrc}, Nom d'hôte: {socket.getfqdn(received.psrc)}") # Vérifiez si le script est exécuté en tant que programme principal if __name__ == "__main__": # Vérifiez si le nombre d'arguments est incorrect if len(sys.argv) != 3: # Affichez un message d'utilisation print("Utilisation : python3 scan-ip.py <start_ip> <end_ip>") # Terminez l'exécution du script avec un code de sortie non nul (1) sys.exit(1) # Récupérez les arguments de la ligne de commande start_ip = int(sys.argv[1]) # Premier argument : start_ip end_ip = int(sys.argv[2]) # Deuxième argument : end_ip # Appelez la fonction scan_ips avec les arguments spécifiés scan_ips(start_ip, end_ip)
On ajoute aussi la définition du service dans le fichier Configuration.yaml, comme ceci,
shell_command: scan_ip_shell: 'python3 /config/scripts/scan-ip.py {{ start_ip }} {{ end_ip }}'
Voilà ce que ça donne en sortie,
stdout: |- IP: 192.168.0.1, Nom d'hôte: 192.168.0.1 IP: 192.168.0.2, Nom d'hôte: 192.168.0.2 IP: 192.168.0.5, Nom d'hôte: 192.168.0.5 IP: 192.168.0.10, Nom d'hôte: 192.168.0.10 stderr: "" returncode: 0
Bref on peut assez facilement coder des trucs à insérer ensuite dans Home Assistant.
Denis