![](/img/trans.png)
[英]Getting the first and last timestamp for a packet type in a pcap file using python
[英]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,最后它死了。 但是第二種選擇對我來說效果很好,因為它沒有將整個文件讀入內存。 我有以下三個問題
90M的pcap文件太大而無法重播嗎?
每當我們使用tcpdump / wireshark時,每個數據包都有與之關聯的時間戳。 假設數據包1在時間T到達,數據包2在時間T + 10到達,scapy會以類似的方式重放數據包嗎,第一個數據包在時間T和第二個數據包在T + 10? 否則它將一直循環發送,我認為稍后是PcapReader。
如果以上問題的答案是否定的(它只是在循環中重播,而不考慮數據包的到達時間),那么我們還有其他Python庫可以為我完成這項工作嗎? 甚至python都不是我的約束。
要回答您的第一個問題,聽起來您自己也回答了! 嘗試在另一個40-50 MB的pcap文件上再次運行第一個選項,然后查看是否出錯。 這樣,您至少可以與Scapy一起檢查文件是否對您的系統而言足夠大(系統中沒有足夠的RAM來處理Scapy如何運行其算法,因為它一次只能處理幾個數據包,而不是一個90MB的pcap文件),或者僅僅是代碼中的內容。
為了回答您的第二個問題,基於過去幾周來我在Scapy上所做的研究,我堅信這是肯定的。 但是,我不知道有什么消息可以備份此驗證。
忍者編輯-我在另一個StackOverflow問題上看到了這一點- 在Scapy中為每個數據包指定時間戳嗎?
雖然這是針對單個數據包的-如果每個數據包都在Scapy中加了時間戳,那么我想這對於您讀入的大型pcap文件中的每個數據包都將是相同的。這樣,當您重放數據包時,應該將其放入相同的順序。
這個答案有很多有根據的猜測,希望對您有幫助!
不會。它不應該占用3GB的內存。 我經常在只有2GB內存的機器上打開較大的pcap文件。 只需嘗試執行pkts = rdpcap(<filename>)
來查看需要多少內存,然后從那里開始。 如果問題仍然存在,您可能希望嘗試使用其他版本的Scapy。
不, sendp()
默認情況下不執行此操作。 您可以嘗試使用實時參數(在控制台上鍵入help(sendp)
)。 但是總的來說,根據我的經驗,scapy不太擅長保持准確的時間。
我使用的是tcpreplay(Linux CLI工具)。 它有很多選擇,包括各種計時機制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.