簡體   English   中英

全包長度 Scapy

[英]Whole packet length Scapy

我正在使用參數-s 100使用 tcpdump 捕獲 WiFi 流量(這意味着我只捕獲數據包的標頭)。

當我加載 .pcap 文件並使用 Scapy 處理它時,我會這樣做:

pkts = rdpcap(pcapfile)
totalbytes = 0
for pkt in pkts:
    totalbytes += len(pkt)

但是,當我截斷捕獲時,執行len(pkt)不會給我整個數據包長度(幀長度),它會給我捕獲的數據包長度 我怎樣才能得到真正的數據包長度?

額外:正如我之前在某些情況下所做的那樣,我在wireshark中打開 pcap 文件並搜索感興趣的十六進制值。 但在這種情況下( frame.len )將顯示我正在尋找的值,但我無法找到wireshark在沒有捕獲整個數據包的情況下獲取這個真實數據包長度的方式。

rdpcap函數使用PcapReader類來讀取數據包。 不幸的是,這個類丟棄了你在read_packet方法中尋找的信息,即使它是在 pcap 文件中找到的。 所以你必須直接使用RawPcapReader

totalbytes = 0
for pkt, (sec, usec, wirelen) in RawPcapReader(pcapfile):
    totalbytes += wirelen

如果由於某種原因您不想使用 RawPcapReader,您可以對 IPv4 數據包使用len屬性。

real_length = pkt[IP].len
truncated_length = len(pkt)

奇怪的是,Scapy 中的 IPv6 層沒有相同的屬性,但它確實有一個名為plen的屬性,它是有效負載的長度:

payload_length = pkt[IPv6].plen
real_length = payload_length + 40
truncated_length = len(pkt)

對於現代 Scapy 版本,正確的答案是使用pkt.wirelen 這僅存在於從 pcap 讀取的數據包中

暫無
暫無

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

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