[英]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.