我使用Scapy的函數send
來發送數據包,這些數據包將在路由器上生成ICMP數據包並轉儲那些作爲子進程啓動的tcpdump
的ICMP數據包。Scapy中的小車行爲
然後,我會用scapy的內置rdpcap
函數將這些ICMP數據包讀回到我的程序中。
嗯,事實證明,rdpcap
有時弄亂的東西,只要我想偷看我的捕獲的數據包,它返回如下:
(InteractiveConsole)
>>> icmpPackets
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/scapy/plist.py", line 57, in __repr__
if self._elt2pkt(r).haslayer(p):
AttributeError: 'NoneType' object has no attribute 'haslayer'
然後,我將只需要再次調用rdpcap
在相同說法,一切都將回到正常:
>>> icmpPackets = rdpcap(tcpdumpFileName)
>>> icmpPackets
<icmpPackets.cap: TCP:0 UDP:0 ICMP:1428 Other:1>
這是一些bug,對不對?
編輯:好吧,我得到這個錯誤之前我做的一件事是以下,這可能不是太正統,但我不需要以太網層,當我僞造數據包。如果我刪除這兩條線,我不會得到任何這樣的錯誤:
for i in range(len(icmpPackets)):
icmpPackets[i] = icmpPackets[i].getlayer(IP)
我這樣做,其他地方之前,從來沒有得到一個問題。這裏發生了什麼事?
你可能在不知不覺中更新了你的Scapy版本? – 2012-08-07 22:15:02
我不這麼認爲...... – 2012-08-08 09:40:15