无法在WiFi网络中使用jpcap接收数据包

时间:2015-05-11 11:15:48

标签: java networking winpcap jpcap

我想在WiFi网络中发送和接收数据包。 使用以下代码

发送数据包。

int id = Integer.parseInt(text_device.getText().trim());
JpcapCaptor jpcap = JpcapCaptor.openDevice(devices[id], 65535, true, 20);
JpcapSender sender = jpcap.getJpcapSenderInstance();
TCPPacket packet = new TCPPacket(210, 210, 0l, 12l, true, true, true, true, true, true, true, true, 1, 2);
packet.setIPv4Parameter(0, true, true, true, 0, true, true, true, 0, 1010101, 100, IPPacket.IPPROTO_TCP, InetAddress.getLocalHost(), InetAddress.getByName(text_ip.getText().trim()));
packet.data = "Sample Data".getBytes();
Date date = new Date();
packet.usec = date.getTime();
packet.sec = date.getTime();
EthernetPacket ether = new EthernetPacket();
ether.src_mac = new byte[]{(byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1};
ether.dst_mac = new byte[]{(byte) 255, (byte) 255, (byte) 255, (byte) 255, (byte) 255, (byte) 255};
ether.frametype = EthernetPacket.ETHERTYPE_IP;
packet.datalink = ether;
sender.sendPacket(packet);

要接收数据包,我在public void receivePacket(Packet packet)

中编写此代码
TCPPacket tcp = (TCPPacket) packet;
String src = tcp.src_ip.getHostAddress();
int src_port = tcp.src_port;
String dst = tcp.dst_ip.getHostAddress();
int dst_port = tcp.dst_port;
String data = new String(tcp.data);
System.out.println("" + data + "");

当我使用LAN连接两台机器时,它可以工作,但是当我连接WiFi时无法接收数据包。

任何人都可以建议我,哪里出错?

1 个答案:

答案 0 :(得分:1)

我怀疑答案与JPCAP FAQ的引用有关:

  

问:我可以从WiFi(802.11)网络接口捕获数据包吗?

     

答案取决于您运行的操作系统和操作系统   您系统的WiFi设备。在Windows上,您可能无法   从某些WiFi设备捕获数据包。 Linux或BSD可能更高   使用WiFi设备支持数据包捕获的概率。

如果您分享精确的适配器类型和Windows版本详细信息,那么您可以在Google discussion group上获得更好的JPcap成功。