我很可能在这里遗漏了一些内容,但PCAP specification未显示所捕获数据包的发件人 IP 地址和 PORT 。
有没有办法让我知道是谁在 PCAP 文件中发送了数据包?
答案 0 :(得分:1)
数据包来源位于IP数据包本身。所以它也不需要在PCap头文件中。
答案 1 :(得分:1)
根据EJP的说法,您必须自己解析数据包数据。请参阅the tcpdump.org link-layer header type page以获取文件头中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 Protocol Numbers registry; TCP为6,UDP为17.如果协议为TCP,请参阅RFC 793以获取TCP头的格式;如果协议是UDP,请参阅RFC 768以获取UDP标头的格式。
或者您可能希望使用现有的数据包解析库,例如用于C或C ++的libtrace或用于其他语言的其他库(我认为它们可能存在于Perl,Python,C#和Java中,例如),因为这可能会让你避免做很多上述事情。
(就此而言,您不需要查看pcap格式规范;您应该使用libpcap / WinPcap来读取pcap文件,因为这也意味着您的程序可能会读取一些pcap-ng文件,如果它使用的是最新版本的libpcap。)
答案 2 :(得分:0)
我可以使用下面的Github示例获得源端点和目标端点的IP地址和端口号:
https://github.com/arisath/Pcap-dissection/blob/master/PcapDissector.java