方法一:回调函数机制。
首先,你要自定义一个类,该类必顺实现PacketReceiver接口,(在事件处理机制雷同)。PacketReciver接口只声名了receivePacket(Packetpacket)方法,所以你要在你自义的类中实现该方法,方法体里放置你处理接收到的数据包的代码,得到的数据包为型参packet.
接着,你就可以通过调用JpcapCaptor类的实例的processPacket()或loopPacket()来开始接收数据包。开始接收数据包后,当接收到数据包时就会回调实现PacketReceiver接口的类的receivePacket的方法,使理接收到的数据包。
public int processPacket(int n , PacketRecevierhandler);
参数1 类型int解释:一次接收包的个数(个数到时到产生回调)
参数2 类型PacketRecevier解释:(回调者)事件临听者
返回值:捕捉到的数据包的个数
功能:捕捉自定义个数的网络数据包。与loopPacket()方法不同,当接收超时(这个由前面的openDevice()方法的最后一个接收超时参数所决定)该方法立即返回。同样的在非阻塞模式下是,没有数据所可接收,该方法也立即返回。
publicint loopPacket(int n, PacketRecevier handler):
参数1类型int解释:一次接收包的个数(个数到时到产生回调)
如下为一个简单的demo:
importjpcap.*;
import jpcap.packet.*;
public classGetPacketDemo
{
publicstatic void main(String [] args) throws Exception
{
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
int index =0;
if(devices.length>1)
index = 1;
JpcapCaptor captor = JpcapCaptor.openDevice(devices[index], 65535,false, 20);
captor.loopPacket(-1, newReceiver());
}
}
class Receiverimplements PacketReceiver
{
public voidreceivePacket(Packet packet)
{
System.out.println(packet);
}
}
参数2 类型PacketRecevier解释:(回调者)事件临听者
返回值:捕捉到的数据包的个数
功能:捉自定义个数的网络数据包。与processPacket()方法不同,该方法忽视超时,不支持工作在非阻塞模式。
注意:在这两个方法的第一个参数中,你可以设定其值为-1。这时你可以停的捕捉数据包,直到捕捉结束,或错误发生为止