我有一个通过特殊开关捕获的数据包捕获,该开关在 FCS 之前附加时间戳。这些通常被称为“预告片时间戳”。
但是,在这样做之后,FCS
数据包末尾的 不会更新。因此,当我将数据包捕获加载到 Wireshark 中时,所有数据包都被报告为具有不正确的帧检查序列。
有没有像editcap
etc.. 这样的实用程序,我可以用它来删除x
每个数据包的最后一个字节pcap
?
请在 Wireshark 问题列表中为此提出问题;特殊处理带有捕获切换预告片的帧可能是有意义的。
是的,editcap
可以删除x
每个数据包的最后一个字节。从editcap
手册页:
-C [offset:]<choplen>
Sets the chop length to use when writing the packet data. Each packet is
chopped by <choplen> bytes of data. Positive values chop at the packet
beginning while negative values chop at the packet end.
示例:删除每个数据包的最后 4 个字节
editcap.exe -C -4 foo.pcap foo_chopped.pcap
当然,这样做会导致每个数据包被指示为:
[Packet size limited during capture: Ethertype truncated]
...这当然是一个误导性的消息,因为 Ethertype 没有被截断,在这种情况下,只有 FCS 被删除的以太网帧。尽管如此,这是一个相当无害的指示,因此该解决方案可能适合您的需求。
或者,您可以更简单地禁用以太网校验和验证。通过 执行此操作Edit -> Preferences -> Protocols -> Ethernet -> Validate the Ethernet checksum if possible:deslect -> OK
。
我使用https://github.com/seladb/PcapPlusPlus编写了自己的应用程序
基本上你可以使用 pcapplusplus 并遍历每个 RawPacket 并执行类似的操作
rawPacket.removeData(rawPacket.getRawDataLen() - FCS_LEN - bytesToRemove, bytesToRemove);