在 C# 中使用 SharpPCap 解析时,如何判断是不是以有限的快照长度捕获了 PCAPNG 文件?

Posted

技术标签:

【中文标题】在 C# 中使用 SharpPCap 解析时,如何判断是不是以有限的快照长度捕获了 PCAPNG 文件?【英文标题】:How to tell if a PCAPNG file was captured with a limited snap length when parsing with SharpPCap in C#?在 C# 中使用 SharpPCap 解析时,如何判断是否以有限的快照长度捕获了 PCAPNG 文件? 【发布时间】:2020-08-24 02:04:32 【问题描述】:

这似乎是一个愚蠢的问题,但我找不到任何方法来判断数据包是否仅被部分捕获。我可以在数据包结构中找到的所有数据长度都使用来自标头的长度,甚至字节结构似乎也用垃圾填充数据。即,如果我捕获 768 字节数据包的 50 字节,则数据包中有 768 字节的“数据”。

Wireshark 源在解析数据包时似乎需要异常才能知道它仅被部分捕获。我只是在读取标头信息,所以我没有解析任何超出 TCP 标头的内容。

如果有办法做到这一点,我真正想做的是构建一个适用于快照长度限制捕获的进度条。

谢谢,

【问题讨论】:

【参考方案1】:

如果您在使用tsharktcpdump 进行数据包捕获时按 ctrl+c,则可以复制此操作。 pcap 和 pcapng 数据包头中的捕获长度和实际长度如果捕获在数据包中间被中断,则会有所不同。

根据documentation,对于单个数据包头,相关字段为:

Public Fields
  CaptureLength uint . The the bytes actually captured. If the capture length is 
                         small CaptureLength might be less than PacketLength  
  PacketLength  uint . The length of the packet on the line

我在the sharppcap repo 中没有看到 pcapng 代码,因此不太可能实现了解析器。

【讨论】:

非常 快速查看 SharpPcap 代码,它调用 libpcap 来解析数据包,而不是自己解析它们,因此,如果它使用的是足够新的 libpcap 版本(1.1,在 UN*X 上 - 在 Windows 上,我认为 WInPcap 不是基于足够新的版本,但 Npcap 是),其中 libpcap 可以读取一些 pcapng 文件,ShapPcap 也可以。 查看代码,SharpPcap 在使用 libpcap 时为 pcap 文件的数据包头字段提供绑定,但不为 winpcap 或 npcap 提供绑定。请注意,数据包标头不是数据包或 pcap 标头。在 libpcap、winpcap、npcap 的目录中,我没有看到 pcapng 的增强数据包块的任何绑定。如果这个项目中有任何 pcapng 功能,它确实出现在任何文档或代码中。 貌似library dependencies之一也有基本的数据包解析,但这里只检索到一个长度。

以上是关于在 C# 中使用 SharpPCap 解析时,如何判断是不是以有限的快照长度捕获了 PCAPNG 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C# 授予 Windows 10 中 Pcap 库的权限?

C#使用sharppcap实现网络抓包-----2

SharpPcap - 从标准输出捕获

c# 使用sharpPcap制作的网络监视器应用程序,每次调用应显示一个msgbox的方法每次调用显示多个msgbox

SharpPcap - 传入的数据包被丢弃

如何使用 SharpPcap 捕获 HTTP 数据包