import argparse import time ### Générer adresse IP import random import socket import struct def ip_address(): return socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff))) ### Fin du bloc de l'addresse IP parser = argparse.ArgumentParser(prog="NetInfo", description= "Outil réseau") parser.add_argument("-v", "--verbose", action="store_true", help="Mode verbeux") subparsers = parser.add_subparsers(dest="commande", help="Commande à exécuter") # parent_parser = argparse.ArgumentParser(add_help=False) # parent_parser.add_argument("-v", "--verbose", action="store_true", help="Mode verbeux") scan_parser = subparsers.add_parser("scan", help="Scan d'un hôte") scan_parser.add_argument("host", default="192.168.1.1", help="Adresse IP de l'hôte cible") scan_parser.add_argument("-p", "--ports", default=[80], nargs= "+", type= int) whois_parser = subparsers.add_parser("whois", help="Ping sur un hôte") whois_parser.add_argument("domain", help="Domaine désiré pour les informations") args = parser.parse_args() def net_info(fonction): def internal_wrapper(args): if args.verbose: print(f"[DEBUG] Lancement de la commande...") start_time = time.perf_counter() result = fonction(args) print(f"[DEBUG] Commande terminée.") print(f"[DEBUG] Commande exécutée en {time.perf_counter() - start_time} secondes.") return result return fonction(args) return internal_wrapper @net_info def scan(args): print(f"Scan de l'hôte: {args.host}") results = [] for port in args.ports: status = "ouvert" if port % 2 == 0 else "fermé" results.append(f"Port {port}: {status}") print(f"Port {port}: {status}") return results @net_info def whois(args): print(f"WHOIS pour {args.domain}") print(f"\ IP : {ip_address()}\n\ Registrar : Exemple\n\ Expirattion : Bientôt\n\ ") if args.commande == "scan": scan(args) elif args.commande == "whois": whois(args)