Jpcap包的学习笔记(五)如何使用JpcapCaptor实例来捕捉网络数据包(上部)
2007-12-17 20:14
961 查看
如何使用JpcapCaptor实例来捕捉网络数据包
当你通过打开网卡设备得到JpcapCaptor实例后,就可以利用它来捕捉网络数据包了。你可以利用以下两种方法来捕捉网络数据包。第一种是通过回调函数的机制,另一种是利用JpcapCaptor实例的getPacket()的方法,一个数据包一个数据包的接收。第一种是类似与事件触发的机制。
方法一:回调函数机制。
首先,你要自定义一个类,该类必顺实现PacketReceiver接口,(在事件处理机制雷同)。PacketReciver接口只声名了receivePacket(Packet packet) 方法,所以你要在你自义的类中实现该方法,方法体里放置你处理接收到的数据包的代码,得到的数据包为型参packet.
接着,你就可以通过调用JpcapCaptor类的实例的processPacket()或loopPacket()来开始接收数据包。开始接收数据包后,当接收到数据包时就会回调实现PacketReceiver接口的类的receivePacket的方法,使理接收到的数据包。
public int processPacket(int n , PacketRecevier handler);
参数1 类型 int 解释:一次接收包的个数(个数到时到产生回调)
参数2 类型 PacketRecevier 解释:(回调者)事件临听者
返回值:捕捉到的数据包的个数
功能:捕捉自定义个数的网络数据包。与loopPacket()方法不同,当接收超时(这个由前面的openDevice()方法的最后一个接收超时参数所决定)该方法立即返回。同样的在非阻塞模式下是,没有数据所可接收,该方法也立即返回。
public int loopPacket(int n, PacketRecevier handler):
参数1 类型 int 解释:一次接收包的个数(个数到时到产生回调)
如下为一个简单的demo:
/**
* @(#)GetPacketDemo.java
*
* 演示利用回调机制来捕捉网络数据包
* @author scholar_ii
* @version 1.00 2007/12/17 */
import jpcap.*;
import jpcap.packet.*;
public class GetPacketDemo
{
public static 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, new Receiver());
}
}
class Receiver implements PacketReceiver
{
/*实例receivePacket方法*/
public void receivePacket(Packet packet)
{
/*进行简单的处理*/
System.out.println(packet);
}
}
参数2 类型 PacketRecevier 解释:(回调者)事件临听者
返回值:捕捉到的数据包的个数
功能:捉自定义个数的网络数据包。与processPacket()方法不同,该方法忽视超时,不支持工作在非阻塞模式。
注意:在这两个方法的第一个参数中,你可以设定其值为-1。这时你可以停的捕捉数据包,直到捕捉结束,或错误发生为止。
当你通过打开网卡设备得到JpcapCaptor实例后,就可以利用它来捕捉网络数据包了。你可以利用以下两种方法来捕捉网络数据包。第一种是通过回调函数的机制,另一种是利用JpcapCaptor实例的getPacket()的方法,一个数据包一个数据包的接收。第一种是类似与事件触发的机制。
方法一:回调函数机制。
首先,你要自定义一个类,该类必顺实现PacketReceiver接口,(在事件处理机制雷同)。PacketReciver接口只声名了receivePacket(Packet packet) 方法,所以你要在你自义的类中实现该方法,方法体里放置你处理接收到的数据包的代码,得到的数据包为型参packet.
接着,你就可以通过调用JpcapCaptor类的实例的processPacket()或loopPacket()来开始接收数据包。开始接收数据包后,当接收到数据包时就会回调实现PacketReceiver接口的类的receivePacket的方法,使理接收到的数据包。
public int processPacket(int n , PacketRecevier handler);
参数1 类型 int 解释:一次接收包的个数(个数到时到产生回调)
参数2 类型 PacketRecevier 解释:(回调者)事件临听者
返回值:捕捉到的数据包的个数
功能:捕捉自定义个数的网络数据包。与loopPacket()方法不同,当接收超时(这个由前面的openDevice()方法的最后一个接收超时参数所决定)该方法立即返回。同样的在非阻塞模式下是,没有数据所可接收,该方法也立即返回。
public int loopPacket(int n, PacketRecevier handler):
参数1 类型 int 解释:一次接收包的个数(个数到时到产生回调)
如下为一个简单的demo:
/**
* @(#)GetPacketDemo.java
*
* 演示利用回调机制来捕捉网络数据包
* @author scholar_ii
* @version 1.00 2007/12/17 */
import jpcap.*;
import jpcap.packet.*;
public class GetPacketDemo
{
public static 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, new Receiver());
}
}
class Receiver implements PacketReceiver
{
/*实例receivePacket方法*/
public void receivePacket(Packet packet)
{
/*进行简单的处理*/
System.out.println(packet);
}
}
参数2 类型 PacketRecevier 解释:(回调者)事件临听者
返回值:捕捉到的数据包的个数
功能:捉自定义个数的网络数据包。与processPacket()方法不同,该方法忽视超时,不支持工作在非阻塞模式。
注意:在这两个方法的第一个参数中,你可以设定其值为-1。这时你可以停的捕捉数据包,直到捕捉结束,或错误发生为止。
相关文章推荐
- 实战:使用JpcapCaptor实例来捕捉网络数据包(一)
- Jpcap包的学习笔记(八)如何使用Jpcap 包实现网络监听(下部)
- android 开发零起步学习笔记(二十):Android开发笔记:如何使用预先制作好的SQLite数据库(整理自网络)
- 网络数据包捕捉工具jNetPcap学习笔记(一)
- python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容
- Python学习笔记(十)使用类和实例
- 网络学习笔记----01--pathping跟踪数据包路径
- 学习笔记 Tianmao 篇 OkHttp 网络的使用的简单封装 获取Json用GSON来解析
- Java学习笔记摘录(标识符/变量是什么/如何命名变量/数据类型/变量的使用规则)
- ESP8266-01学习笔记01:如何使用USB转串口对ESP-01进行入门调试、烧录固件?
- 【深度学习】笔记6:使用caffe中的CIFAR10网络模型和自己的图片数据训练自己的模型(步骤详解)
- 如何寻找使用案例及其注意事项,学习笔记
- Xcode学习笔记---如何使用Xcode中的storyboard构建你的第一个IOS应用
- iOS学习笔记-141.网络01——使用Tomcat和JavaWeb来搭建自己的网络接口
- 【学习笔记】关于如何安装并使用webpack
- 王保明老师Linux学习笔记---------信号----signal()函数使用实例
- 吴恩达深度学习笔记 course4 week2 深度卷积网络 实例探究
- 【学习笔记】汇编:关于CMP的使用实例
- [原创]java WEB学习笔记55:Struts2学习之路---详解struts2 中 Action,如何访问web 资源,解耦方式(使用 ActionContext,实现 XxxAware 接口),耦合方式(通过ServletActionContext,通过实现 ServletRequestAware, ServletContextAware 等接口的方式)
- WPF学习笔记 - 如何用WPF创建单实例应用程序