1

我使用 Android 的 ToyVpnClient 建立隧道并拦截传入和传出的数据包。我想将存储在 ByteBuffer 中的此隧道中的这些数据包写入 pcap 文件。我查看了 jpcap 和 jnetpcap,但它们似乎只支持从使用这些库捕获的数据包创建 pcap 文件,以首先侦听设备的网络接口。

是否有任何可用的 api 可以帮助我从存储在 ByteBuffer 中的隧道数据包数据创建 pcap 文件?如果我要创建自己的 pcap 编写器,我将如何从隧道中解析这个数据包并将其放入 pcap 格式?(我看过但没有找到任何例子)

以下是来自 ToyVpnClient 的相关代码示例:

    ...
    DatagramChannel tunnel = DatagramChannel.open();
    // Connect to the server.
    tunnel.connect(server);

    // Packets to be sent are queued in this input stream.
    FileInputStream in = new FileInputStream(mInterface.getFileDescriptor());

    // Packets received need to be written to this output stream.
    FileOutputStream out = new FileOutputStream(mInterface.getFileDescriptor());

    // Allocate the buffer for a single packet.
    ByteBuffer packet = ByteBuffer.allocate(32767);

    // keep forwarding packets till something goes wrong.
    while (true) {
        // Read the outgoing packet from the input stream.
        int length = in.read(packet.array());
        if (length > 0) {
        // Write the outgoing packet to the tunnel.
        packet.limit(length);
        tunnel.write(packet);

        //How to write to pcap file here?

        packet.clear();

        }
    ...
}

谢谢

4

1 回答 1

0

对于任何寻找类似解决方案的人,我使用 netutils 库的 PCapFileWriter 并对其进行修改以包含每个数据包的假以太网标头(http://code.google.com/p/netutils/

于 2013-05-30T17:39:49.477 回答