0

我正在尝试使用 JPCap 库实现网络嗅探器。

问题是,它只捕获其他节点的 UDP 数据包。未捕获 TCP 数据包。(实际上我电脑的 TCP 数据包只被嗅探)

这是我正在使用的代码:

captor=JpcapCaptor.openDevice(interfaceList[interfaceNumber], 65535, true, 20);
captor.setFilter("ip and tcp",true);


JpcapWriter writer=JpcapWriter.openDumpFile(captor,"pass.txt");

for(int i=0;i<10;i++){
      //capture a single packet
      Packet packet=captor.getPacket();
      //save it into the opened file
      writer.writePacket(packet);

    }
writer.close();
4

1 回答 1

0

您看到的来自其他节点的 UDP 数据包是否被发送到广播 MAC 地址 (ff:ff:ff:ff:ff:ff)?如果是这样,那么问题不在于您可以捕获UDP数据包而不能捕获TCP数据包,问题是您无法捕获来自其他主机的非广播数据包(UDP数据包可以是广播数据包,但大多数不是; TCP 数据包永远不会是广播数据包)。

我猜想openDevice方法的第三个参数jpcap.JpcapCaptor指定是否要设置混杂模式;如果是这样,您正在请求它,这是捕获从其他主机发送到其他主机的非广播数据包所必需的。

如果是这样,那么问题可能在于您使用的是交换网络。请参阅Wireshark Wiki 上的 CaptureSetup/Ethernet 页面,详细了解如何在交换的以太网上捕获“第三方”流量。

于 2012-08-31T03:20:58.123 回答