Léon

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

一.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层协议程序)

 

二.JpcapWinpcap下载

    Jpcap下载地址:

    http://netresearch.ics.uci.edu/kfujii/Jpcap/doc/download.html

    Wincap下载地址:

    http://www.winpcap.org/archive/,在VCVS上的配置不再敖述,本文重点介绍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) 配置EclipseJRE环境,(一定需要),选择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。解决这个错误的办法说实在的,估计有很多,在这里我只说我的。

    这个错误提示是在javalibrary路径里找不到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文件夹,里面有binlib,就又把dll之类的复制过去,这下可以了,顺利编译。根路径不一定全部相同,自己找一下。

 

.API

    http://netresearch.ics.uci.edu/kfujii/Jpcap/doc/javadoc/index.html?overview-summary.html

posted on 2011-10-12 10:17  Léon  阅读(7597)  评论(0编辑  收藏  举报