需要构造的部分:
应用层:DHCP,BOOTP
传输层:UDP
网络层:IP
数据链路层:Ether
代码:
from scapy.all import *
from scapy.layers.dhcp import BOOTP, DHCP
from scapy.layers.inet import *
import binascii
from random import randint
xid_random = randint(1,900000000) #随机产生事务ID
mac_random = str(RandMAC()) #随机产生MAC地址
clinet_mac_id = binascii.unhexlify(mac_random.replace(':','')) #MAC添加分隔符
print(mac_random)
ether= Ether(src= mac_random, dst = "ff:ff:ff:ff:ff:ff")
ip = IP(src = "0.0.0.0",dst = "255.255.255.255")
udp = UDP(sport =68,dport = 67)
dootp= BOOTP(chaddr =clinet_mac_id , xid = xid_random)
dhcp = DHCP(options=[("message-type","discover"),"end"])
dhcp_discover = ether/ip/udp/dootp/dhcp
sendp(dhcp_discover , iface='以太网')
print("\n\n\nSending DHCPDISCOVER on " + "以太网")
def detect_dhcp(pkt): #显示捕获到的DHCP offer数据包
if (DHCP in pkt):
ls(pkt)
sniff(filter="src port 67",iface = "以太网",prn=detect_dhcp)
结果: