2012-09-16 46 views

回答

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;请参阅RFC 2460了解IPv6报头的格式。

如果您想要端口号,您将需要检查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版本。)

1

包的起源是在IP数据包本身。所以它也不需要在PCap头文件中。

相关问题