首页 文章

无法通过scapy发送的sendp发送Wireshark中的DHCP offer数据包

提问于
浏览
2

我尝试在scapy中实现DHCP服务器 . 我使用iface =“Local Area Connection 3”为udp sport 67和dport 68进行DHCP发现,然后使用sendp命令发送DHCP Offer . 我无法在Wireshark中看到我的数据包,而且DHCP Clinet也没有收到,它还会发送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)

2 回答

  • 2

    管理在Wireshark中查看数据包 . 我使用的是srp1(),而不是sendp() .

    现在发现另一个问题 . 当我想模拟DHCP服务器并发送DHCP Offer时,如果我按原样发送BOOTP.op = 2的报价,则不发送报文 . 我看不到它wirehark和我的DHCP客户端没有提出任何请求 . 如果我发送带有BOOTP.op = 1的DHCP Offer,我在Wireshark上看到了这个数据包,但这不正确(op = 1是BOOTREQUEST,op = 2是BOOTREPLY)

  • 1

    您是否尝试过简单地发送数据包并查看它是否可以启动?它有效吗?即使 iface="Local Area Connection 3"

    无论如何,要做你想做的事,你应该使用 AnsweringMachine . Scapy已经附带了一个实现, BOOTP_am ,您可能希望查看代码;你可以直接使用Scapy函数 bootpd() .

    首先,你可以使用没有参数的 bootpd() ;您可以使用的选项(当/如果有效)(使用默认值,取自https://bitbucket.org/secdev/scapy/src/1d36e8fd9df8dfddbb5e9b3819910ace5e21e233/scapy/layers/dhcp.py?at=default#cl-300):

    pool=Net("192.168.1.128/25")
    network="192.168.1.0/24",gw="192.168.1.1"
    domain="localnet"
    

相关问题