分享Jpcap简易教程
创始人
2024-07-26 03:41:54
0

题记:首先,其实根本就没必要写Jpcap的教程,Jpcap官网的文档还是很详细很给力的,自己也几乎是对着官网文档学的,很快就上手了。 但自己的学习笔记一直存在word里面,始终不放心。(看着文件夹里30多个word的学习笔记,头都大,一直没弄博客上来)。 于是,就还是把它写到博客上来,就当是自己的学习笔记吧。

首先,使用Jpcap的几个小问题:

我们为什么需要Jpcap?

什么是Jpcap?Jpcap的工作原理是什么?

怎么配置Jpcap(Jpcap的安装)?

Jpcap使用步骤

Jpcap有啥特性?

一。我们为什么需要Jpcap?

Java的.net包中,给出了传输层协议 TCP和UDP有关的API,用户只能操作传输层数据,要想直接操作网络层{比如自己写传输层数据报(自己写传输层包头),或者自己写好IP数据包向网络中发}则是无能为力的。 而JPCAP扩展包弥补了这一点,使我们可以支持从网卡中接收IP数据包,或者向网卡中发送IP数据包。

二。什么是Jpcap?Jpcap的工作原理是什么?

Jpcap实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用wincap/libpcap,而给JAVA语言提供一个公共的接口,从而实现了平台无关性。

三。怎么配置Jpcap(Jpcap的安装)?

Jpcap下载地址: http://netresearch.ics.uci.edu/kfujii/Jpcap/doc/download.html

下载后,直接安装,安装,将生成的jar文件和动态库 dll 文件分别拷到

%JAVA_HOME%\lib\ext\ 和 %JAVA_HOME%\jre\bin\ 目录下。

因为Jpcap是调用的wincap,所以必须将动态库放入jre/bin下。 将jar放入ext下,则无需在项目中再加载该jar包

四。Jpcap使用步骤

1.首先,获得所有网卡列表

NetworkInterface[] devices = JpcapCaptor.getDeviceList();

2.通过网卡,打开一个捕捉器。 //openDevice(NetworkInterface intrface, int snaplen, boolean promics, int to_ms); JpcapCaptor captor=JpcapCaptor.openDevice(device[index], 65535, false, 20);

各个参数意义:

intrface 需要监听的网卡

snaplen 每次捕获的数据包***长度(设置为IP包***长度即可)

promics 是否过滤(Mac地址不是当前网卡的IP数据包)

to_ms 超时时间

3.通过捕捉器捕获数据:

有两种方式:

3.1.回调方法

3.1.1.实现一个方法处理器接口的类PacketReceiver,并将该类的一个对象,注册到捕获器中。(回调方法的实现, 其实就是监听器模型)

3.1.2.将消息处理器(PacketReceiver) 注册到捕获器(JpcapCaptor)有两种方式

captor.processPacket(int number,PacketReceiver reciver);//1 loopPacket(int number,PacketReceiver reciver);//2

参数意义:

***个参数为需要捕获的IP包个数,-1表示一直捕获。

第二个参数表示需要注册的处理器。

processPacket() 和 loopPacket() 的区别:

Tutorial中给出的说法为:

Usually you might want to use processPacket() because it supports timeout and non_blocking mode, while loopPacket() doesn't.

可是,processPacket() 和 loopPacket() 两个方法明明都是通过回调方法实现的,回调方法使用监听器模型,不就是在某个模块被调用的时刻不确定,才使用的嘛?如果是这样,那么根本就没有block存在啊? 此处还请高手指点。

另外,自己做的测试中:使用loopPacket()的时候,会一直有回调,但是使用processPacket()程序直接执行完就结束了,对捕捉器设置了nonblock为flase也没用?

3.2.主动获取。

通过捕获器的getPacket() 可以主动的,一个数据包一个数据包的获取。

比较:

主动获取,可以每次需要处理数据包的时候,自己去主动获取。然后写出处理逻辑。但是因为不知道何时去产生数据包,而一直去调用getPacket() 的话,无疑效率是很低的。(主动获取,不管有没有包,都会一直执行循环去获取)

通过回调方法,可以在产生需要的数据包时,调用我们的处理逻辑,无疑更优美。

五。使用Jpcap能做的事

1.Jpcap是直接抓取经过数据链路层的数据包。 因此可以自己写IP数据包直接发送给数据链路层。

2.Jpcap会对抓取到的数据包进行一定程序的解析,根据数据包内容,将数据包封装为对应的对象()。

3.根据用户设定的信息,过滤数据包(其实就是在解析的时候,对不需要的数据直接丢弃,不解析)

4.Jpcap 只是直接从数据链路层上读取数据,并向数据链路层中发送数据,因此,Jpcap并不能操作 其他程序从数据链路层中读数据或者向网卡中发送数据。(IP层协议程序)

因此,我们可以使用Jpcap:

1.监控网络内容

2.自定义传输层乃至网络层网络协议(net包中,我们只能自定义引用此协议)

正在进行:使用Jpcap,进行ARP欺骗,从而使整个子网的IP包都发给我,于是,可以监控整个局域网。

【相关文章】

  • 使用Java来实现编辑器的Undo Redo功能
  • Java访问在接口中定义的常量
  • Java中使用Draw2D和SWT绘图

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...