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.10" # 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" 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 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", ROUTER_IP), ("dns", DNS_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()