如何从数据包中显示 IP 地址。
我能够显示端口和协议,但不能显示来自pcap file
.
我正在使用jnetpcap
. 有什么帮助吗?
jnetpcap 团队表示“虽然这些是本地 C 库教程,但您会发现调用的过程和顺序几乎相同。如果您了解 C 和 java 语言,那么将这些教程翻译成 java 和 jNetPcap 应该不会有太大问题API。 ”话虽如此,看看jnetpcap 团队在他们的网站上推荐的这个非常深入的教程。
看看最后,在实际嗅探下,教程列出了内存中的数据包内容,并告诉您在哪里可以找到 IP 标头。
其他解决方案:
如果您能够获得 pcap 文件,您应该能够使用本机DatagramPacket类来满足您的需要。DatagramPacket 有一个名为getSocketAddress()的方法,它可以获取 IP 地址和端口号。
PcapPacketHandler<String> jpacketHandler = new PcapPacketHandler<String>() {
final Tcp tcp=new Tcp();
final Ip4 ip = new Ip4();
public void nextPacket(PcapPacket packet, String user) {
final Tcp tcp=new Tcp();
if(packet.hasHeader(tcp)){
if(packet.hasHeader(ip)){
packet.getHeader(tcp);
System.out.printf("Received packet at %s caplen=%-4d len=%-4d %s %s\n",
new Date(packet.getCaptureHeader().timestampInMillis()),
packet.getCaptureHeader().caplen(), // Length actually captured
packet.getCaptureHeader().wirelen(), // Original length
user,FormatUtils.ip(ip.source()) // User supplied object
);
//JBuffer buffer = packet;
//int size=packet.size();
byte[] arr=packet.getByteArray(0, packet.size());
}}}
};
wireshark 能够显示(和捕获)数据。我将研究 jnetpcap。
编辑:我查看了教程(http://jnetpcap.com/tutorial/usage)。请参见第 72 行(创建返回对象)和第 108-112 行(填充和读取返回对象)。
我能够使用以下 Github 示例从 PCAP 获取源端点和目标端点的 IP 地址和端口号:
https://github.com/arisath/Pcap-dissection/blob/master/PcapDissector.java