我正在尝试使用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();
答案 0 :(得分:0)
您看到的其他节点的UDP数据包是否被发送到广播MAC地址(ff:ff:ff:ff:ff:ff)?如果是这样,那么问题不在于您可以捕获UDP数据包而不能捕获TCP数据包,问题是您无法捕获来自其他主机的非广播数据包(UDP数据包可以是广播数据包,但大多数数据包不是; TCP数据包永远不会广播数据包。)
我猜测openDevice
jpcap.JpcapCaptor
方法的第三个参数指定是否设置混杂模式;如果是这样,你要求它,这是为了捕获从其他主机发送到其他主机的非广播数据包所必需的。
如果是这样,那么问题可能是您在交换网络上。有关在交换式以太网上捕获“第三方”流量需要执行的操作的详细信息,请参阅the CaptureSetup/Ethernet page on the Wireshark Wiki。