gpt4 book ai didi

java - jNetPcap - 从 PCAP 文件分析 ARP 数据包

转载 作者:行者123 更新时间:2023-11-30 11:16:58 25 4
gpt4 key购买 nike

我正在尝试使用 Java 的 jNetPcap 库在 PCAP 文件中获取有关 ARP 数据包的信息。我真正想要的是读取以太网帧中的源地址和目标地址,以及 ARP 数据包中的发送方 MAC 和目标 MAC。

到目前为止,我已经能够加载一个 PCAP 文件,遍历数据包捕获中的所有数据包,并显示那些确实属于 ARP 协议(protocol)的数据包的数据包编号(帧编号)。

我如何获得我想要的附加信息?

到目前为止,这是我的代码:

package firstjavapcaptest;

import org.jnetpcap.Pcap;
import org.jnetpcap.packet.PcapPacket;
import org.jnetpcap.packet.PcapPacketHandler;
import org.jnetpcap.protocol.lan.Ethernet;
import org.jnetpcap.protocol.network.Arp;
import org.jnetpcap.protocol.tcpip.Tcp;

public class FirstJavaPcapTest {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here

final StringBuilder errbuf = new StringBuilder(); // for any error messages
final String file = "Z:\\test_pcap.pcap";
Tcp tcp = new Tcp(); // Preallocate a TCP header
Arp arp = new Arp(); // Preallocate a ARP header
System.out.printf("Opening file for reading: %s%n", file);

Pcap pcap = Pcap.openOffline(file, errbuf);
if (pcap == null) {
System.err.printf("Error while opening device for capture: " + errbuf.toString());
return;
}

PcapPacketHandler<String> jphArp = new PcapPacketHandler<String>() {
public void nextPacket(PcapPacket packet, String user) {
Ethernet ethh = new Ethernet();
if (packet.hasHeader(arp)) {
System.out.println("[" + packet.getFrameNumber() + "]");
}
}
};

try {
pcap.loop(-1, jphArp, "");
} finally {
pcap.close();
}
}

}

最佳答案

您使用的是哪个版本的 jnetpcap?我假设 1.3。以下是关于 ARP 协议(protocol)中偏移量的维基百科文章:

...
8 发送方硬件地址 (SHA)(前 2 个字节)
10(接下来的 2 个字节)
12(最后 2 个字节)
14 发送方协议(protocol)地址 (SPA)(前 2 个字节)
16(最后 2 个字节)
18 目标硬件地址 (THA)(前 2 个字节)
20(接下来的 2 个字节)
22(最后 2 个字节)
24 目标协议(protocol)地址 (TPA)(前 2 个字节)
26(最后 2 个字节)

以下是来自 jnetpcap javadocs 的 Arp 类函数:

byte[]  sha()            Sha.
int shaLength() Sha length.
byte[] spa() Spa.
int spaLength() Spa length.
int spaOffset() Spa offset.
byte[] tha() Tha.
int thaLength() Tha length.
int thaOffset() Tha offset.
byte[] tpa() Tpa.
int tpaLength() Tpa length.
int tpaOffset() Tpa offset.`

关于java - jNetPcap - 从 PCAP 文件分析 ARP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24600609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com