2014-02-19 32 views
1

我嘗試在scapy中實現DHCP服務器。我用iface =「Local Area Connection 3」查看udp sport 67和dport 68的DHCP Discovers,然後用sendp命令發送DHCP Offer。我無法在Wireshark中看到我的數據包,並且DHCP Clinet也不會收到,它會繼續發送DHCP發現消息。無法看到從scapy sendp發送的Wireshark中的DHCP offer數據包

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

發現了一些東西,但仍然沒有看到我的數據包在Wireshark中。替換本地連接3與eth2,因爲來自scapy的ifaces命令將局域連接3檢測爲eth2。重複仍然沒有解決問題 – user2399087

回答

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" 
+0

如果我發送沒有指定iface的數據包仍然無法在Wireshark中看到數據包。我會試試AnsweringMachine。你能給我一個在我的代碼中使用bootpd()的例子嗎?謝謝 – user2399087

+0

剛剛更新了我的答案。 – Pierre

0

管理中的Wireshark查看數據包。我使用了srp1(),而不是sendp()。

現在發現了另一個問題。當我想模擬一個DHCP服務器併發送DHCP Offer時,如果我發送BOOTP.op = 2的報價,它應該是這樣的,數據包不會被髮送。我無法看到它wireshark和我的DHCP客戶端不作任何請求。如果我發送BOOTP.op = 1的DHCP Offer,我在Wireshark上看到數據包,但這是不正確的(op = 1是BOOTREQUEST,op = 2是BOOTREPLY)

相關問題