整个包长度Scapy

问题描述 投票:1回答:3

我正在使用参数-s 100通过tcpdump捕获WiFi流量(这意味着我仅在捕获数据包的标头)。

当我加载.pcap文件并用Scapy处理时,我这样做:

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

但是,当我截断捕获时,执行len(pkt)不会给我完整的数据包长度(帧长度),而是给我已捕获的数据包长度。如何获得真实的数据包长度?

Extra:就像我之前在某些场合所做的那样,我在wireshark中打开pcap文件并搜索感兴趣的十六进制值。但是在这种情况下(frame.len)将显示我正在寻找的值,但是我找不到在没有捕获整个数据包的情况下wirehark获取此实际数据包长度的方法。

python wireshark packet scapy
3个回答
2
投票

rdpcap函数使用PcapReader类读取数据包。不幸的是,即使可以在pcap文件中找到该类,该类也会丢弃您在read_packet方法中寻找的信息。因此,您必须直接使用RawPcapReader

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

0
投票

如果由于某些原因您不想使用RawPcapReader,则可以将len属性用于IPv4数据包。

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

0
投票

对于现代的Scapy版本,正确的答案是使用pkt.wirelen。仅存在于从pcap读取的数据包中]

© www.soinside.com 2019 - 2024. All rights reserved.