Sockets 如何从PCAP文件中的数据包中获取发送方IP地址?
我很可能在这里遗漏了一些内容,但是没有显示捕获的数据包的发送方IP地址和端口 有没有办法让我知道谁在PCAP文件中发送了数据包Sockets 如何从PCAP文件中的数据包中获取发送方IP地址?,sockets,networking,tcp,udp,pcap,Sockets,Networking,Tcp,Udp,Pcap,我很可能在这里遗漏了一些内容,但是没有显示捕获的数据包的发送方IP地址和端口 有没有办法让我知道谁在PCAP文件中发送了数据包 数据包来源于IP数据包本身。因此它也不需要在PCap头中。根据EJP的说法,您必须自己解析数据包数据。有关文件头中网络字段的值列表,以及数据包数据开头的相应格式,请参阅 您需要查看这些报头以确定该数据包是否为IP数据包;如果是,则需要解析IPv4或IPv6报头(取决于报头是否指示它是IPv4或IPv6数据包,或者报头中的“版本”字段是4还是6—“版本”字段显示在IPv4
数据包来源于IP数据包本身。因此它也不需要在PCap头中。根据EJP的说法,您必须自己解析数据包数据。有关文件头中
网络
字段的值列表,以及数据包数据开头的相应格式,请参阅
您需要查看这些报头以确定该数据包是否为IP数据包;如果是,则需要解析IPv4或IPv6报头(取决于报头是否指示它是IPv4或IPv6数据包,或者报头中的“版本”字段是4还是6—“版本”字段显示在IPv4和IPv6报头中的相同位置;对于LINKTYPE_RAW
,您必须查看“版本”字段,因为在IPv4或IPv6标头之前没有标头)以查找源IP地址。请参阅以了解IPv4标头的形式;请参阅以了解IPv6标头的形式
如果需要端口号,则必须检查IPv4标头的“协议”字段,或检查“下一个标头”“IPv6标头和句柄扩展标头的字段,以确定在IP上承载的协议。有关该字段的值,请参见;TCP为6,UDP为17。如果协议为TCP,请参阅了解TCP头的格式;如果协议为UDP,请参阅以了解UDP标头的格式
或者您可能希望使用现有的包解析库,例如C或C++或其他语言的其他库(例如,它们可能存在于Perl、Python、C、java),因为这样可以避免您做很多以上的事情。
(就此而言,您不需要查看pcap格式规范;您应该使用libpcap/WinPcap来读取pcap文件,因为这也意味着您的程序也可以读取一些pcap ng文件,如果它使用的是足够新的libpcap版本。)我能够使用下面的Github示例获取源和目标端点的IP地址和端口号: