这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战
前言
关于java使用jNetPcap嗅探网络包在windows下配置使用,和一些介绍,看前面的这篇文章: java使用jNetPcap嗅探网络包之windows下配置使用。
即使是在linux下安装,也请先看下windows下配置使用这篇文章,了解一些背影和步骤流程,大体是一样,但是环境不同,可能会出现一些其它问题。
另外在linux下我用的也是1.4版本,如果还担心1.4在linux系统下配置时,出现问题,不知道问题出在哪里的,可以往下看。
配置步骤
-
添加jnetpcap.jar到工程依赖库。不清楚依赖库在哪看 java使用jNetPcap嗅探网络包之windows下配置使用。
-
把libjnetpcap.so 添加到java.library.path下,具体需要根据系统环境实际情况(建议直接放到/usr/lib下)。
-
安装libpcap库
libpcap离线安装比较麻烦,需要依次安装:m4、bison、flex、libpca 。
关于libpcap的安装网上已经有不少教程资料,我找了一个,有需要可以参考一下:Linux下libpcap的安装,说的很清楚了
如果觉得下载麻烦的话,我已经下载了最新版本的这几个包,放到百度网盘上,这是地址:
提取码:b1xo
安装完之后,就可以测试了。
在java使用jNetPcap嗅探网络包之windows下配置使用,这里我写的有测试代码,可以直接打开vim编辑之后 ,使用javac -classpath等命令编译,java -cp 等命令执行,但是这样的话,需要指定好依赖的jnetpcap的jar包位置。
或者使用spring boot直接打个可执行jar包,把依赖打进来也可以,方法不重要。
关键说下配置libpcap的一些问题。
可能遇到的问题
下面是本文的重点。
动态链接库找不到。一般也就是这个问题了。
好多时候让人没头没脑。
首先确定libjnetpcap.so的位置没问题,你可以打印java.library.path变量值,java使用jNetPcap嗅探网络包之windows下配置使用打印示例:
public static void main(String[] args) {
System.out.println(System.getProperty("java.library.path"));
}
也可以通过jinfo等其它工具直接获取该属性的值。
确定在上面打印的目录下。
如果libjnetpcap.so没问题,那很有可能是libjnetpcap.so依赖的库有问题,就是安装的libpcap有问题了,但是这个错误提示信息根本看不出来哪里有问题。
首先检查下安装libpcap的目录有问题没,我用的是centos做的测试,一般安装后,库文件在这个目录下: /usr/local/lib,可以检查下或者配置下动态链接库的目录:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
但是这个只是临时的,可以修改配置文件/etc/ld.so.conf,设置为永久的:
sudo vim /etc/ld.so.conf
如下:
加入这个目录,然后,执行命令:
sudo ldconfig
如果还存在依赖库的问题,那多半是libjnetpcap.so找不到哪个库,查下是缺失哪个库文件,有个ldd命令可以看,如下:
如果找不到哪个库文件,上面的=>后面为空,比如libpcap.so找不到,上面就会显示libpcap.so =>
总之,看见哪个没有,想办法补上来就行,重新安装,改名字,创建软链接呀什么的,只要能提供依赖的动态链接库就行。
最后,是在 java使用jNetPcap嗅探网络包之windows下配置使用示例代码里,这个位置
这个64是捕获报文的长度,不设置过滤器,在某些条件或操作系统上非0也会被忽略,比如之前在windows上是被忽略了,64也无所谓,在centos上测试的时候,生效了,所以有需要把这个参数的值调大,官方注释来看,65535理论应该是可以的。