Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 如何从PCAP文件中的数据包中获取发送方IP地址?_Sockets_Networking_Tcp_Udp_Pcap - Fatal编程技术网

Sockets 如何从PCAP文件中的数据包中获取发送方IP地址?

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文件中发送了数据包


数据包来源于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地址和端口号: