2010-11-22 251 views
4

我最近開始探索Scapy。確實是一個很棒的工具使用Scapy時,ICMP Ping數據包未生成回覆

我有一個問題...當我使用Wireshark監控網卡時,我使用標準PING安裝從系統命令提示符執行常規ping,wireshark彈出「Ping請求」,然後「Ping回覆」表示它已發送回覆。但是當我在Scapy手動執行它時,它不會回覆回覆。這怎麼可能?我花了很多時間試圖弄清楚這一點,所以我真的很希望有人能闡明我這個問題的一些輕......

這裏是我使用的代碼:

>>> from scapy.all import IP, ICMP, send 
>>> IP = IP(dst="127.0.0.1") 
>>> Ping = ICMP() 
>>> send(IP/Ping) 

數據包發送成功Wireshark顯示收到的Ping請求,但不是它已發送迴應。

回答

5

存儲的答覆這是一個FAQ item

我無法ping 127.0.0.1。 Scapy不能與127.0.0.1或環回接口配合使用

環回接口是一個非常特殊的接口。經過它的包不是真正的組裝和拆卸。內核將數據包路由到它的目的地,同時仍然存儲內部結構。你所看到的tcpdump -i lo只是一個假的讓你覺得一切都很正常。內核沒有意識到Scapy在他背後做了什麼,所以你在loopback接口上看到的東西也是假的。除了這個不是來自當地的結構。因此內核永遠不會收到它。

爲了說話的本地應用程序,你需要建立你的數據包一層上,用PF_INET/SOCK_RAW插座,而不是PF_PACKET/SOCK_RAW(或等值的其他系統的Linux):

>>> conf.L3socket 
<class __main__.L3PacketSocket at 0xb7bdf5fc> 
>>> conf.L3socket=L3RawSocket 
>>> sr1(IP(dst="127.0.0.1")/ICMP()) 
<IP version=4L ihl=5L tos=0x0 len=28 id=40953 flags= frag=0L ttl=64 proto=ICMP chksum=0xdce5 src=127.0.0.1 dst=127.0.0.1 options='' |<ICMP type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |>> 
+0

我在那裏找到了我的答案。顯然,回送接口是「假的」,我不知道。謝謝! – Andesay 2010-11-22 15:44:07

+0

他們所說的「假」是指它永遠不會構建以太網數據包。相反,IP分組直接從發送方「傳送」(即複製)到接收方。這是回送接口的全部要點。 – 2010-11-22 15:52:34

0

試試這個

def ping(host, repeat=3): 
    packet = IP(dst=host)/ICMP() 
    for x in range(repeat): 
     response = sr1(packet) 
     response.show2() 

您無法正常

+0

仍然沒有工作.. Wireshark只顯示請求..這裏是一個scapy ping的截圖:http://tinypic.com/r/27z9ru9/7 和這裏的一個正常的標準安裝ping: http://tinypic.com/r/m7rleb/7 – Andesay 2010-11-22 14:12:25

+0

你確定有東西沒有阻止迴應嗎? – 2010-11-22 14:12:59

+0

嗯,我不知道當正常的ping工作時應該是什麼..我使用標準的ttl,標誌等​​是否可以呢? – Andesay 2010-11-22 14:16:35