0

我很可能在这里遗漏了一些东西,但是PCAP 规范没有显示捕获的数据包的发送者IP地址和端口

有没有办法让我知道谁在PCAP文件中发送了数据包?

http://wiki.wireshark.org/Development/LibpcapFileFormat

4

3 回答 3

1

数据包来源在 IP 数据包本身。所以它也不需要在 PCap 标头中。

于 2012-09-16T09:43:09.703 回答
1

根据 EJP 所说,您必须自己解析数据包数据。请参阅tcpdump.org 链接层标头类型页面以获取文件标头中字段的值列表以及network数据包数据开头的标头的相应格式。

您需要查看这些标头以确定数据包是否为 IP 数据包;如果是,那么您需要解析 IPv4 或 IPv6 标头(取决于标头是否指示它是 IPv4 或 IPv6 数据包,或者,取决于标头中的“版本”字段是 4 还是 6 - “版本”字段出现在 IPv4 和 IPv6 标头中的相同位置;对于LINKTYPE_RAW,您必须查看“版本”字段,因为 IPv4 或 IPv6 标头前面没有标头)才能找到源 IP 地址。IPv4 标头的形式参见RFC 791;有关 IPv6 标头的形式,请参阅RFC 2460

如果您需要端口号,则必须检查 IPv4 标头的“协议”字段,或检查 IPv6 标头的“下一个标头”字段处理扩展标头,以确定 IP 之上承载的协议。有关该字段的值,请参阅IANA 协议编号注册表;TCP 为 6,UDP 为 17。如果协议是 TCP,TCP 头的格式见RFC 793;如果协议是 UDP,请参阅RFC 768了解 UDP 标头的格式。

或者您可能想要使用现有的数据包解析库,例如用于 C 或 C++ 的libtrace或用于其他语言的其他库(例如,我认为它们可能存在于 Perl、Python、C# 和 Java 中),因为这可能会让您避免做很多上述事情。

(就此而言,您不需要查看 pcap 格式规范;您应该使用 libpcap/WinPcap 来读取 pcap 文件,因为这也意味着您的程序也可以读取一些 pcap-ng 文件,如果它使用的是最新版本的 libpcap。)

于 2012-09-16T23:36:49.527 回答
0

我能够使用以下 Github 示例获取源端点和目标端点的 IP 地址和端口号:

https://github.com/arisath/Pcap-dissection/blob/master/PcapDissector.java

于 2018-07-14T18:08:26.273 回答