我正在尝试使用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();
您看到的来自其他节点的UDP数据包是否被发送到广播MAC地址(ff:ff:ff:fff:ff:ff)?如果是这样,那么问题不在于你可以捕获UDP数据包,而不能捕获TCP数据包,问题在于你不能捕获来自其他主机的非广播数据包(UDP数据包可以是广播数据包,但大多数不是;TCP数据包从来都不是广播数据包)。
我猜jpcap.JpcapCaptor
的openDevice
方法的第三个参数指定了是否要设置混杂模式;如果是这样,那么您请求它,这对于捕获从其他主机发送到其他主机的非广播数据包是必要的。
如果是这样,那么问题可能是你在一个交换网络上。请参阅Wireshark Wiki上的CaptureSetup/Ethernet页面,了解在交换式以太网上捕获"第三方"流量所需的详细信息。