Simple example how to send a UDP packet with Scapy in a Python application:
import random from scapy.all import Ether, IP, UDP, BOOTP, DHCP, sendp def mac_to_bytes(mac_addr: str) -> bytes: """ Converts a MAC address string to bytes. """ return int(mac_addr.replace(":", ""), 16).to_bytes(6, "big") client_mac = "01:02:03:04:05:06" packet = ( 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_to_bytes(client_mac), xid=random.randint(1, 2**32-1), ) / DHCP(options=[("message-type", "discover"), "end"]) ) sendp(packet, iface="ens192", verbose=False)
When using sendp()
it is necessary to construct the full packet, starting from L2 Ethernet frame.
The "/"
operator is cleverly used when combining the layers of the packet.