2012-08-01 70 views
0

我正在使用Scapy的sniff()函數來嗅探來自以太網的數據包。我將它存儲在一個名爲pkt的變量中。後來我想通過在另一個變量buffpkt中附加pkt的內容來製作相同的副本。最初我將兩個變量都聲明爲列表,但一旦pkt存儲sniff()輸出,它將其類型更改爲實例。以下是代碼。列表不能複製

pkt=[] 
buffpkt=[] 
pkt=sniff(prn=lambda x:x.sprintf("{IP : %IP.src% %IP.dst%\n\n} "),timeout=5,store=1) 
buffpkt=pkt 

我要讓所有通過附加結果buffpkt嗅探數據包的大名單,但我不能。有什麼建議麼?

回答

1

通過將一個列表分配給另一個列表,您只需將第一個列表指向第二個列表即可。要複製的列表,你可以使用切片運算符,就像這樣:

buffpkt = pkt[:] 

現在buffpkt將是一個副本。

+0

但是,這能否幫助我追加新的結果嗎? – Abhinav 2012-08-01 09:00:42

+0

buffpkt + = pkt [:] WORKS! – Abhinav 2012-08-01 09:09:41

+1

@sHoM「sniff」的返回值實際上不是一個列表,而是一個實現類列表訪問的自定義對象(使用__getitem__函數)。這就是類型是'instance'的原因。 – 2012-08-01 09:16:05