如何使用pcap4j操作数据包并写入pcap文件

时间:2016-07-11 09:15:52

标签: pcap libpcap packet-capture packet-sniffers

我想通过pcap文件并转到每个数据包。然后获取IP地址并进行操作。最后,我将把它写入一个新的pcap文件。

我使用pcap4j版本1.6.4及以下是我获取源IP地址的方法:

String fname = "FileName";
String dumpFile = "newFileName";
PcapHandle h = Pcaps.openOffline(fname);
PcapDumper dumper = h.dumpOpen(newFileName);
Packet p = null;
while ((p = h.getNextPacket()) != null) {
    IpV4Packet ip = p.get(IpV4Packet.class);
    Inet4Address srcAddr = ip.getHeader().getSrcAddr();
}

正如我所提到的,我获得了源IP地址,现在我不知道如何设置新的源IP地址并将其写入NewFileName。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

pcap4j中的数据包对象是不可变的。但是,您可以基于现有数据包创建新数据包,然后使用Builder对其进行修改。

在下面的代码片段中,我正在创建一个新修改的数据包(假设replace()包含创建新IP地址的逻辑):

        Packet.Builder builder = p.getBuilder();
        builder.get(IpV4Packet.Builder.class)
                .srcAddr(replace(srcAddr));

        Packet newPacket = builder.build();

然后您可以使用以下方式转储创建的数据包:

        dumper.dump(newPacket);