2012-05-29 98 views
5

我正在使用Scala的rdpcap函數來讀取PCAP文件。 我也使用link to HTTP support in Scapy中描述的模塊,這是我需要的,因爲我必須檢索所有的HTTP請求和響應及其相關的數據包。Scapy和rdpcap函數

我注意到解析一個大的PCAP文件rdpcap函數需要太多時間來讀取它。

是否有解決方案快速讀取pcap文件?

+0

你的pcap文件有多大?閱讀它需要多長時間?是否真的太長(即使只裝載一次)?你想讀多少次(反問題)? –

+0

我的文件大於300 MB,我不得不多次啓動Python腳本。 – auino

+0

@auino,讀取時間的問題具體是什麼?每當您進行更改時解析300MB文件時是否需要花費太長時間來開發腳本,或者是否存在實時處理要求?此外,請給我們一個什麼是可接受的解析時間的感覺 –

回答

4

儘管我同意加載時間比預期的要長,但這很可能是因爲正在解析文件以生成高度組合的對象數組。我所要做的就是使用editcap來截斷數據包捕獲,使它們更容易閱讀。例如:

$ editcap -B 2013-05-2810:05:55 -i 5 -F libpcap inputcapture.pcap outputcapture.pcap 

請注意:此命令的開關的完整說明,請here

此外,-F libpcap部分似乎是必要的(至少對我來說)讓scapy的pcap函數能夠解析文件。 (這應該是默認的pcap文件輸出格式,但是對於我來說這種情況並非如此,無論出於何種原因,您可以使用capinfos來驗證輸入和輸出文件的文件類型(例如,只需輸入capinfos your_capture.pcap

兩個capinfoseditcap可與Wireshark的分佈

2

Scapy的還有另外一個方法sniff,你可以用它來讀取PCAP文件了:

def method_filter_HTTP(pkt): 
    #Your processing 

sniff(offline="your_file.pcap",prn=method_filter_HTTP,store=0) 

rdpcap負載整個PCAP文件到內存中。 H因爲它使用了大量的內存,正如你所說的那樣緩慢。而sniff一次只讀取一個數據包,並將其傳遞給提供的prn函數。 store=0參數確保數據包在處理完成後立即從內存中刪除。