java使用jNetPcap嗅探网络包在linux下配置

545 阅读3分钟

这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战

前言

关于java使用jNetPcap嗅探网络包在windows下配置使用,和一些介绍,看前面的这篇文章: java使用jNetPcap嗅探网络包之windows下配置使用

即使是在linux下安装,也请先看下windows下配置使用这篇文章,了解一些背影和步骤流程,大体是一样,但是环境不同,可能会出现一些其它问题。

另外在linux下我用的也是1.4版本,如果还担心1.4在linux系统下配置时,出现问题,不知道问题出在哪里的,可以往下看。

配置步骤

  1. 添加jnetpcap.jar到工程依赖库。不清楚依赖库在哪看 java使用jNetPcap嗅探网络包之windows下配置使用

  2. 把libjnetpcap.so 添加到java.library.path下,具体需要根据系统环境实际情况(建议直接放到/usr/lib下)。

  3. 安装libpcap库

libpcap离线安装比较麻烦,需要依次安装:m4、bison、flex、libpca 。

关于libpcap的安装网上已经有不少教程资料,我找了一个,有需要可以参考一下:Linux下libpcap的安装,说的很清楚了

如果觉得下载麻烦的话,我已经下载了最新版本的这几个包,放到百度网盘上,这是地址:

链接:pan.baidu.com/s/1SETEnzsh…

提取码: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理论应该是可以的。