diff --git a/DHCP2.py b/DHCP2.py index afc7eec..97dce31 100644 --- a/DHCP2.py +++ b/DHCP2.py @@ -8,7 +8,7 @@ DHCP_POOL_END = "192.168.1.200" # Fin de la plage d'adresses SUBNET_MASK = "255.255.255.0" ROUTER_IP = "192.168.1.2" # Adresse du routeur DNS_IP = "192.168.1.2" # Adresse du serveur DNS -LEASE_TIME = 86400 # Durée de location en secondes +LEASE_TIME = 86400 # Durée de location en secondes allocated_ips = set() # Pour suivre les adresses IP attribuées @@ -41,12 +41,34 @@ def generate_dhcp_offer(pkt): ("end") ]) ) - sendp(dhcp_offer, iface='eth0', verbose=False) # Remplacez 'eth0' par votre interface +def generate_dhcp_ack(pkt): + if pkt.haslayer(DHCP) and pkt[DHCP].options[0][1] == 3: # Request + client_mac = pkt[Ether].src + requested_ip = pkt[DHCP].options[2][1] # Adresse IP demandée + + # Construction de la réponse DHCP ACK + dhcp_ack = ( + 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=requested_ip, siaddr=DHCP_SERVER_IP, chaddr=client_mac) / + DHCP(options=[ + ("message-type", "ack"), + ("server_id", DHCP_SERVER_IP), + ("lease_time", LEASE_TIME), + ("subnet_mask", SUBNET_MASK), + ("router", ROUTER_IP), + ("dns", DNS_IP), + ("end") + ]) + ) + sendp(dhcp_ack, 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) + sniff(filter="udp and (port 67 or port 68)", prn=lambda x: generate_dhcp_offer(x) if x.haslayer(DHCP) and x[DHCP].options[0][1] == 1 else generate_dhcp_ack(x), store=0) if __name__ == "__main__": start_dhcp_server()