【发布时间】:2014-03-19 10:48:02
【问题描述】:
我尝试在 scapy 中实现一个 DHCP 服务器。我用 iface="Local Area Connection 3" 嗅探 udp sport 67 和 dport 68 的 DHCP 发现,然后使用 sendp 命令发送 DHCP Offer。我在 Wireshark 中看不到我的数据包,DHCP Clinet 也没有收到,它继续发送 DHCP Discovers。
在 wireshark 上,我只看到来自客户端的 DHCP 发现。
代码如下:
def sniff_DHCP_discovers():
sniff(filter='port 67 or port 68', prn=startThread, iface="Local Area Connection 3")
def startThread(pkt):
thread = threading.Thread(target=process_DHCP_discover, args=(pkt,))
thread.deamon = True
thread.start()
def process_DHCP_discover(pkt):
print 'Process ', ls(pkt)
if DHCP in pkt:
if pkt[DHCP].options[0][1]==1:
print '\tDetected DHCP Discover from client: ', pkt[Ether].src
#Create DHCP Offer
Ethernet = Ether(src="00:50:B6:0E:FE:36", dst=pkt[Ether].src)
IPo = IP(src="192.168.0.100", dst="255.255.255.255")
UDPo = UDP(sport=67, dport=68)
BOOTPo = BOOTP(op=2, yiaddr="192.168.0.1", siaddr="192.168.0.100", giaddr='0.0.0.0', xid=pkt[BOOTP].xid)
DHCPo = DHCP(options=[('message-type', 'offer'),('subnet_mask',IPv4_ConfigParam.SUBNET_MASK),('server_id', "192.168.0.100"), ('lease_time', 1800),('end')])
pkt_Offer = Ethernet/IPo/UDPo/BOOTPo/DHCPo
sendp(pkt_Offer, iface="Local Area Connection 3")
print 'DHCP Offer sent: ', ls(pkt_Offer)
【问题讨论】:
-
找到了一些东西,但在 Wireshark 中仍然看不到我的数据包。将本地连接 3 替换为 eth2,因为来自 scapy 的 ifaces 命令将本地连接 3 检测为 eth2。重复还是没有解决问题