2014-07-07 40 views
0

我有一個python + Scapy代碼,用於嗅探數據包並測量它們的時間旅行。 除了sniff()選項停止代碼的運行外,一切都很好。與程序同時進行嗅探

所以,如果我有一個看起來像這樣的代碼:

print "hello" 
print "world" 
sniff(iface="lo") 
print "this will not show" 

的原因在於該sniff運行,4號線將不會得到執行。

我該如何改變這種情況? 預先感謝您!

+0

你可以使用'multiprocessing'(甚至'threading'),但是並行處理比串行更難。考慮重新安排您的數據結構以進行串行,一次一個的操作。 – johntellsall

+0

我會,但即使我把「嗅探」放在開頭,以後的代碼也不會執行。 – user2634624

+0

當「嗅」運行時,你想要做什麼? –

回答

0

我不確定這是否符合您的需求,但sniff需要一個prn關鍵字參數,用於在數據包進入時將數據包打印到屏幕,但也可用於實時處理它們。

http://www.secdev.org/projects/scapy/doc/usage.html#simplistic-arp-monitor

例如:

def process(pkt): 
    # do stuff 

sniff(iface="lo", prn=process) 

process將每接收到的分組被調用一次。這可能允許您在收到數據包時執行其他任務,但仍不會允許您執行任何通用目的的後臺任務。

+0

這並不能阻止我的問題。由於「嗅探」也在嗅探不在「def」中的代碼的流量, – user2634624