63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
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) |