Search code examples
pythonethernetscapy

How can I add a parameter request list in DHCP header with Scapy?


I try to make a DHCP pachet with parameter request list option and to add three parameters in that request.

This is what i done but the pachet I see on Wireshark look`s to be malformed:

dhcp_pkt = Ether(dst="ff:ff:ff:ff:ff:ff")/IP(src="0.0.0.0",dst="255.255.255.255")/UDP(sport=68,dport=67)/BOOTP(chaddr=MAC_SOURCE)/DHCP(options=[("message-type","request"),("param_req_list", "subnet_mask", "router", "domain"),"end"])

I also try to pass the parametes as a list of codes of the parameters i want to be included in the request list, but still the packet is malformed.


Solution

  • (this answer deals with a discover packet, not a request packet, because that's what I'm writing)

    You can create the DHCP frame like this:

    dhcp_options = [
        ("message-type", "discover"),
        ("param_req_list", [
             DHCPRevOptions["subnet_mask"][0], # by name
             DHCPRevOptions["router"][0],
             DHCPRevOptions["name_server"][0],
             15, # aka "domain name
        ]),
        "end"
    ]
    dhcp = DHCP(options=dhcp_options)
    

    Once you've crafted the ether, ip, udp and bootp frames:

    packet = ether/ip/udp/bootp/dhcp