众所周知,Java虽然在TCP/UDP传输方面给予了良好的定义,但是标准库java.net对于网络层以下的控制是无能为力的。Jpcap就是为了处理这一问题而出现的中间件。它调用底层的winpcap/libpcap来实现对数据链路层的控制,并给Java语言提供一个公共的接口,从而实现了平台无关性。
本文不涉及到介绍Jpcap的应用,只是简单地记录一下在Ubuntu & Windows 下安装及配置Jpcap的过程。
学习Jpcap的使用,请转到 jpcap入门指南
一、Ubuntu下配置过程
前置条件,确保安装有build-essential 和 libpcap包
build-essential 可以直接用 apt-get 安装。而libpcap则不可以,我参考的这一博客Ubuntu 14.04下安装libpcap
下面开始安装Jpcap,首先下载源码:
git clone --recursive https://github.com/mgodave/Jpcap.git
编译:
在./Jpcap/src/main/c中,执行
make
将编译得到的文件放到可寻址的路径:
将生成的libjpcap.so文件拷贝到 $JAVA_HOME/jre/lib/<arch>目录下。
注:arch对应计算机架构,如i386,amd64,sparc等
$JAVA_HOME对于Debian系列Linux一般指 /usr/lib/jvm/default-java 目录
如果是Java 6版本,则将libjpcap.so拷到 /usr/java/packages/lib/exf中。
将 ./Jpcap/lib/jpcap.jar 拷到 $JAVA_HOME/lib/目录下。
最后需要保证$JAVA_HOME/lib、$JAVA_HOME/jre/lib在CLASSPATH路径中(一般配置java时候,都已添加。)
然后,顺利的话,应该已经可以编译、运行有调用jpcap库的java程序了。
运行中可能会遇到的错误:
libpcap.so.1 cannot open shared object file no such file or directory
对于这个问题,我们可以发现 libpcap.so.1文件就在/usr/local/lib目录下,然而程序在执行libjpcap.so中调用libpcap的代码是无法找到该文件,这里我们需要手动添加其到 /etc/ld.so.conf 中。
在 ld.so.conf, 添加两行:
/usr/local/lib
/usr/lib
然后执行:
ldconfig
这时再运行程序应该不会出现该错误了。
couldn't find default device: no suitable device found
原因:没有以root身份运行。
二、Windows下安装及配置Jpcap
前置条件,确保安装有winpcap。
有两种方式:
第一种
运行JpcaSetup-0.7.exe (Binary installer),一路next,最后选择Jpcap.dll 和 jpcap.jar 的安装位置,一般情况下,Jpcap.dll 安装在 C:\Windows\System32 目录下, jpcap.jar 安装在 C:\Windows\Sun\Java\lib\ext 目录下。
然后为了方便Java程序中的调用,我们还需要将Jpcap.dll 复制到 jre 路径下的 bin 文件夹下, 将 jpcap.jar 复制到 jre路径下的 lib\ext 文件夹下。
第二种
直接下载jpcap包,有两个文件,分别是jpcap.dll和jpcap.jar,这两个文件分别放到JAVA安装路径/jre1.6.0_06/bin和JAVA安装路径/jre1.6.0_06/lib/ext下。这种方法注意可能需要自己配置程序的java.library.path.
最后,在你的IDE中导入外部jar。
运行中可能会遇到的错误:
no dependence libray
原因:很有可能没有安装winpcap
java.lang.UnsatisfiedLinkError:no jpcap in java.library.path
原因:java在library path 中找不到 jpcap.dll
解决:把jpcap.dll复制到system32
或者是在run配置里加入-Djava.library.path=(jpcap.dll所放置的地方)
记录一下,以防将来忘记。
以上。
参考:http://blog.csdn.net/pdcxs007/article/details/48691009
http://blog.csdn.net/loverooney/article/details/38543191
http://ohyeahbbs.blog.51cto.com/1775490/592573
http://www.bianceng.cn/Programming/Java/200705/1834.htm
http://www.cnblogs.com/acmy/archive/2012/02/04/2337955.html
http://blog.csdn.net/fykhlp/article/details/6159195