无法在Wireshark中看到从scapy随sendp发送的DHCP提供数据包

无法在Wireshark中看到从scapy随sendp发送的DHCP提供数据包,dhcp,scapy,Dhcp,Scapy,我尝试在scapy中实现一个DHCP服务器。我使用iface=“Local Area Connection 3”嗅探udp sport 67和dport 68中的DHCP发现,然后使用sendp命令发送DHCP提供。我在Wireshark中看不到我的数据包,DHCP客户端也没有接收,它继续发送DHCP发现 在wireshark上,我只看到来自客户端的DHCP发现 代码如下: def sniff_DHCP_discovers(): sniff(filter='port 67 or port

我尝试在scapy中实现一个DHCP服务器。我使用iface=“Local Area Connection 3”嗅探udp sport 67和dport 68中的DHCP发现,然后使用sendp命令发送DHCP提供。我在Wireshark中看不到我的数据包,DHCP客户端也没有接收,它继续发送DHCP发现

在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)

您是否尝试过简单地发送数据包,然后看看它是否可以开始工作?它起作用了吗?即使使用
iface=“局域网连接3”

无论如何,要想做你想做的事,你应该使用
应答机
。Scapy已经提供了一个实现,
BOOTP\u am
,您可能需要查看代码;您可以直接使用Scapy函数
bootpd()

首先,您可以不带参数地使用
bootpd()
;您可以在(当/如果有效)之后使用的选项包括(其默认值取自):


设法在Wireshark中查看数据包。我使用的是srp1(),而不是sendp()


现在发现了另一个问题。当我想要模拟一个DHCP服务器并发送DHCP提供时,如果我发送的是BOOTP.op=2的提供,则不会发送数据包。我看不到wireshark,我的DHCP客户端也没有提出任何请求。如果我发送带有BOOTP.op=1的DHCP提供,我会在Wireshark上看到数据包,但这是不正确的(op=1是BOOTREQUEST,op=2是BOOTREPLY)

找到了一些内容,但在Wireshark中仍然看不到我的数据包。将局域网连接3替换为eth2,因为来自scapy的ifaces命令将局域网连接3检测为eth2。重复仍然没有解决问题如果我发送没有指定iface的数据包,仍然无法在Wireshark中看到数据包。我试试应答机。你能给我一个在我的代码中使用bootpd()的例子吗?谢谢
pool=Net("192.168.1.128/25")
network="192.168.1.0/24",gw="192.168.1.1"
domain="localnet"