我正在尝试开发一种软件,在其中我从网络接口捕获数据包,更改它们,并将更改的数据包写入我的本地光盘(输出文件)。
问题是,当我打开输出文件时,我看到我所做的更改没有提交。例如,我捕获了一个 IP 数据包并将源 IP 地址更改为 0.0.0.0。之后,我将更改后的数据包保存在输出文件中。当我打开输出文件时,我看到源 IP 地址与更改它之前相同。
if (packet instanceof TCPPacket) {
try {
((IPPacket)packet).src_ip = InetAddress.getByName("0.0.0.0");
} catch (UnknownHostException e) {
e.printStackTrace();
}
System.out.println(packet);
outputFile.writePacket(packet);
}
我错过了什么?
关于 JpcapWriter 的事情是它与 JpcapCaptor 一起运行,这就是为什么你需要在初始化时给它一个捕获器作为字段。因此,当您遍历捕获器并获取数据包时,即使您对其进行了更改,这些更改也仅存储在您在 java 中创建的对象中,并且捕获器会将未更改的数据包传递给编写器。
我遇到了类似的问题。所以我只是将数据包写入文件,而不使用内置的编写器。我提取我想要的数据并将其写成纯文本。这样做的唯一缺点是它使重新加载捕获文件有点棘手。
如果您还有其他问题,请告诉我。