Files
AUX200-Securite_systeme_Linux/DHCP2.py
T
2024-10-18 13:05:40 +02:00

75 lines
2.9 KiB
Python

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 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=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()