2013-11-04 128 views
3

我正在嗅探數據包,需要知道哪些數據包是ICMPv6 Echo Request數據包,哪些數據包是UDP數據包。Scapy - 如何檢查數據包類型的嗅探數據包

我知道我能做到

P = sniff(filter='ip6 and host fe80::xx:xx:xx:xx',count=0) 

IP in P #will return false (my packets are IPv6) 
UDP in P #will return true (when the specific packet is indeed UDP) 

,但我不知道如何檢查ICMPv6報文,甚至更特別ICMPv6回顯請求 ...它似乎並不像我甚至可以檢查任何6 IP版本:

IPv6的IP6,IPV6,IP6,ICMPv6的,ICMPv6的,ICMP6,ICMP6所有返回

NameError: name 'x' is not defined 

不任何人都知道有辦法做這樣的事情?

+1

你有什麼版本的scapy?運行scapy 2.1.0(在OS X 10.8.5上的Python 2.7.2上),「P中的IPv6」適用於我。 – abarnert

+0

特別是在確認我捕獲了一個UDP v6包之後:'P中的UDP爲False,'P [0]中的UDP爲真,'P中的IPv6爲假','P中的IPv6'爲真, 'P [0] [IPv6]'是一個IPv6數據包,... – abarnert

回答

3

如果您使用的是Scapy v1.x,它不處理IPv6,正如它在文檔中的各個位置所述。例如,在Download and Installation中:

Scapy v2.x.當前的開發版本增加了一些功能(例如IPv6)。

如果您使用的是2.x,它應該可以在IPv6下正常工作。例如,在我的電腦上(Scapy 2.1.0,Apple預裝Python 2.7.2,OS X 10.8.5):

>>> P = sniff(filter='ip6', count=0) 
… make sure to capture an IPv6 UDP packet … 
>>> UDP in P 
False 
>>> IPv6 in P 
False 
>>> UDP in P[0] 
True 
>>> IPv6 in P[0] 
True 
>>> P[0][IPv6] 
<IPv6 version=6L tc=0L fl=0L plen=98 nh=UDP … 
>>> ICMPv6EchoRequest in P[0] 
False 
>>> ICMPv6EchoRequest 
<class 'scapy.layers.inet6.ICMPv6EchoRequest'> 
+0

啊,我們走了,我覺得很蠢。這是我的版本!謝謝! – geeoph