From 9557a24a994df8cd664e56a1fe04e82a96a70d20 Mon Sep 17 00:00:00 2001 From: Polaire Date: Fri, 18 Oct 2024 11:23:47 +0200 Subject: [PATCH] Ajouter DHCP.py --- DHCP.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 DHCP.py diff --git a/DHCP.py b/DHCP.py new file mode 100644 index 0000000..7a21281 --- /dev/null +++ b/DHCP.py @@ -0,0 +1,49 @@ +from scapy.all import Ether, IP, UDP, BOOTP, DHCP, sendp, sniff, RandMAC +import random + +# Configuration des paramètres DHCP +DHCP_SERVER_IP = "192.168.1.1" # L'adresse IP du serveur DHCP +DHCP_POOL_START = "192.168.1.100" # Début de la plage d'adresses +DHCP_POOL_END = "192.168.1.200" # Fin de la plage d'adresses +SUBNET_MASK = "255.255.255.0" +LEASE_TIME = 86400 # Durée de location en secondes + +allocated_ips = set() # Pour suivre les adresses IP attribuées + +def generate_ip(): + # Générer une adresse IP dans la plage DHCP + while True: + ip = f"192.168.1.{random.randint(100, 200)}" + if ip not in allocated_ips: + allocated_ips.add(ip) + return ip + +def generate_dhcp_offer(pkt): + if pkt.haslayer(DHCP) and pkt[DHCP].options[0][1] == 1: # Discover + client_mac = pkt[Ether].src + offered_ip = generate_ip() + + # Construction de la réponse DHCP Offer + dhcp_offer = ( + Ether(dst=client_mac, src=RandMAC()) / + IP(src=DHCP_SERVER_IP, dst='255.255.255.255') / + UDP(sport=67, dport=68) / + BOOTP(op=2, yiaddr=offered_ip, siaddr=DHCP_SERVER_IP, chaddr=client_mac) / + DHCP(options=[ + ("message-type", "offer"), + ("server_id", DHCP_SERVER_IP), + ("lease_time", LEASE_TIME), + ("subnet_mask", SUBNET_MASK), + ("router", DHCP_SERVER_IP), + ("end") + ]) + ) + + sendp(dhcp_offer, iface='eth0', verbose=False) # Remplacez 'eth0' par votre interface + +def start_dhcp_server(): + print("Démarrage du serveur DHCP...") + sniff(filter="udp and (port 67 or port 68)", prn=generate_dhcp_offer, store=0) + +if __name__ == "__main__": + start_dhcp_server()