簡體   English   中英

使用Scapy根據數據包時間戳重播Pcap文件

[英]Pcap file replay based on the packet timestamp using scapy

我有一個pcap文件(〜90M),我想重播該文件。 我遇到了Scapy,它提供了讀取pcap文件並重播它的方法。 我嘗試了以下兩種方式重播數據包

sendp(rdpcap(<filename>)

pkts = PcapReader(<filename>);
for pkt in pkts:
     sendp(pkt)

我的第一個游戲出現內存錯誤,python進程的內存消耗上升到3 gig,最后它死了。 但是第二種選擇對我來說效果很好,因為它沒有將整個文件讀入內存。 我有以下三個問題

  1. 90M的pcap文件太大而無法重播嗎?

  2. 每當我們使用tcpdump / wireshark時,每個數據包都有與之關聯的時間戳。 假設數據包1在時間T到達,數據包2在時間T + 10到達,scapy會以類似的方式重放數據包嗎,第一個數據包在時間T和第二個數據包在T + 10? 否則它將一直循環發送,我認為稍后是PcapReader。

  3. 如果以上問題的答案是否定的(它只是在循環中重播,而不考慮數據包的到達時間),那么我們還有其他Python庫可以為我完成這項工作嗎? 甚至python都不是我的約束。

要回答您的第一個問題,聽起來您自己也回答了! 嘗試在另一個40-50 MB的pcap文件上再次運行第一個選項,然后查看是否出錯。 這樣,您至少可以與Scapy一起檢查文件是否對您的系統而言足夠大(系統中沒有足夠的RAM來處理Scapy如何運行其算法,因為它一次只能處理幾個數據包,而不是一個90MB的pcap文件),或者僅僅是代碼中的內容。

為了回答您的第二個問題,基於過去幾周來我在Scapy上所做的研究,我堅信這是肯定的。 但是,我不知道有什么消息可以備份此驗證。

忍者編輯-我在另一個StackOverflow問題上看到了這一點- 在Scapy中為每個數據包指定時間戳嗎?

雖然這是針對單個數據包的-如果每個數據包都在Scapy中加了時間戳,那么我想這對於您讀入的大型pcap文件中的每個數據包都將是相同的。這樣,當您重放數據包時,應該將其放入相同的順序。

這個答案有很多有根據的猜測,希望對您有幫助!

  1. 不會。它不應該占用3GB的內存。 我經常在只有2GB內存的機器上打開較大的pcap文件。 只需嘗試執行pkts = rdpcap(<filename>)來查看需要多少內存,然后從那里開始。 如果問題仍然存在,您可能希望嘗試使用其他版本的Scapy。

  2. 不, sendp()默認情況下不執行此操作。 您可以嘗試使用實時參數(在控制台上鍵入help(sendp) )。 但是總的來說,根據我的經驗,scapy不太擅長保持准確的時間。

  3. 我使用的是tcpreplay(Linux CLI工具)。 它有很多選擇,包括各種計時機制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM