来自Java的PCAP纳秒分辨率

时间:2013-11-14 07:40:21

标签: java pcap libpcap tcpdump jnetpcap

上下文

当前状态

对于性能分析,我公司对纳秒分辨率感兴趣。到目前为止,我们一直在使用硬件时间戳,纳秒的支持很快就被攻入了C libpcap库。

似乎现在已将对纳秒的支持添加到库中(请参阅其他Stack Overflow答案here),git repository上的最后一个版本提供以下方法:

pcap_open_offline_with_tstamp_precision(pathname, PCAP_TSTAMP_PRECISION_NANO, errbuf);

未来

事实上,C已经证明自己难以维护,难以扩展,而且由于我们仅使用捕获进行分析,我们觉得我们可以从使用 Java 相反。在性能分析方面,能够使用适当的IDE,Maven,构建Web服务等似乎比执行速度更重要。

我首先希望能够使用jNetPcap,但我无法找到如何使用libpcap的Java绑定来支持纳秒分辨率。


问题

jNetPcap

有没有人知道使用jNetPcap读取具有纳秒精度的Pcap文件的简单方法?

更新:我刚刚在jNetPcap的Javadoc中发现了TimestampResolution枚举的提及。我会尝试使用它并稍后更新我的答案。

注意: 我还直接在jNetPcap's support forum询问了纳秒分辨率,如果我得到任何答案,我会更新我的问题...

其他解决方案

有没有人知道从Java生态系统中获利的另一种方式,同时仍然能够以纳秒精度读取PCap文件?


谢谢! :)

1 个答案:

答案 0 :(得分:1)

我知道这个问题已经过时了,但万一有其他人有这种需要 - 如果使用jNetPcap不是必须的,pcap4j似乎支持它。

打开上限:

PcapHandle h = Pcaps.openOffline(fname, PcapHandle.TimestampPrecision.NANO);

读取数据包和时间戳:

Packet nextPacket = h.getNextPacket();
Timestamp timestamp = h.getTimestamp();

希望有所帮助!