一.JPCAP简介
众所周知,Java语言虽然在TCP/UDP传输方面给予了良好的定义,但对于网络层以下的控制,却是无能为力的。JPCAP扩展包弥补了这一点。
JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用wincap/libpcap,而给JAVA语言提供一个公共的接口,从而实现了平台无关性。在官方网站上声明,JPCAP支持FreeBSD 3.x, Linux RedHat 6.1, Fedora Core 4, Solaris, and Microsoft windows 2000/XP等系统。
使用Jpcap能做的事:
1.Jpcap是直接抓取经过数据链路层的数据包。因此可以自己写IP数据包直接发送给数据链路层。
2.Jpcap会对抓取到的数据包进行一定程序的解析,根据数据包内容,将数据包封装为对应的对象()。
3.根据用户设定的信息,过滤数据包(其实就是在解析的时候,对不需要的数据直接丢弃,不解析)
4.Jpcap 只是直接从数据链路层上读取数据,并向数据链路层中发送数据,因此,Jpcap并不能操作其他程序从数据链路层中读数据或者向网卡中发送数据。(IP层协议程序)
二.Jpcap和Winpcap下载
Jpcap下载地址:
http://netresearch.ics.uci.edu/kfujii/Jpcap/doc/download.html
Wincap下载地址:
http://www.winpcap.org/archive/,在VC或VS上的配置不再敖述,本文重点介绍JAVA方法。下载后安装winpcap。
JPCAP还有一个图形界面的工具JpcapDumper。看起来很不错:http://netresearch.ics.uci.edu/kfujii/jpcapdumper/doc/index.html
三.Jpcap包的安装与配置(Eclipse环境下)
1) 下载并安装JRE(提供的JDK中就默认安装JRE了,所以不要在下载其他版本的JRE了);
2) 下载并安装winpcap(尽量下载最新版本);
3) 配置Jpcap路径:这一步也是最重要的一步。具体路径为,把Jpcap文件夹下lib文件夹里的Jpcap.dll复制到"C:\Program Files\Java\jre1.6.0_07\bin"文件夹里面(复制到你机器JRE文件夹放到bin文件夹里面就可以了,其中JRE的版本一定要与Eclipse配置的版本一致),再把Jpcap文件夹下lib文件夹里的Jpcap.jar复制到"C:\Program Files\Java\jre1.6.0_07\lib\ext"文件夹里面(复制到你机器JRE文件夹->lib->ext放到ext文件夹里面就可以了),
4) 配置Eclipse的JRE环境,(一定需要),选择Window->preferences->Java->Installed JREs,在Installed JREs选择框中选择相应的JRE版本,点Edit,
选择Add External JARs…,选择你的Jpcap.jar包("C:\Program Files\Java\jre1.6.0_07\lib\ext"文件夹里),在Finish就配置全部完成了;
5) 编写,调试,运行程序。
四.可能出现的问题
第一个错误:
加进来后,死活提示项目有错误,明明一切包都放好了,还是不行。网上找了很多,都不靠谱,有的甚至写的很深奥。最后把JRE删掉再重新导入,就好了。方法:右键点你的项目->properties->Java buildpath->remove,然后再导入。
第二个错误:
错误提示是“no dependence libray”,这个简单,90%是你没装winpcap。
第三个错误:
这是最常见的, java.lang.UnsatisfiedLinkError: no jpcap in java.library.path。解决这个错误的办法说实在的,估计有很多,在这里我只说我的。
这个错误提示是在java的library路径里找不到jpcap.dll,于是我System.out.println(System.getProperty("java.library.path"));发现路径很多,包括system32,于是我把jpcap.dll复制到system32,还是不行。继续复制到别的路径,依然不行。我又在run配置里加入-Djava.library.path=C:/WINDOWS/system32,还是不行。就在我一筹莫展时,我发现那JRE包路径是在“D:/Program Files/Genuitec/Common/binary/com.sun.java.jdk.win32.x86_1.6.0.013/”,于是顺藤摸瓜进去,发现有个jre文件夹,里面有bin和lib,就又把dll之类的复制过去,这下可以了,顺利编译。根路径不一定全部相同,自己找一下。
五.API
http://netresearch.ics.uci.edu/kfujii/Jpcap/doc/javadoc/index.html?overview-summary.html