Java抓包分析五(基于jnetpcap进行抓包)——常见的一些问题

依赖下载jnetpcap-winpcap-libpcap

Maven依赖

	<!-- jnetpcap抓包 -->
	<dependency>
        <groupId>jnetpcap</groupId>
        <artifactId>jnetpcap</artifactId>
        <version>1.4.r1425-1g</version>
    </dependency>

windows平台开发(部署)依赖:winpcap

在这里插入图片描述

下载地址:https://www.winpcap.org/install/

linux-ubuntu平台开发(部署)依赖:libpcap

sudo apt install libpcap0.8
sudo apt install libpcap0.8-dev

在这里插入图片描述

获取函数库jnetpcap.dll-jnetpcap.so

以windows为例,我发现很多私信我或者留言我的小伙伴不知道怎么去获取jnetpcap.dll。
在这里插入图片描述
程序中引入maven以后,查看该插件的所在地址
在这里插入图片描述
直接用压缩文件打开jar包
在这里插入图片描述

程序抓取不到数据包,也没报错

原因可能是监控的不是你当前工作的网卡,需要把其他网卡禁用,只留下真正工作的网卡。此外,我尝试用openJDK11来运行,同样存在无法抓取到数据的情况。切换回oracleJDK1.8以后正常。
在这里插入图片描述

windows拷贝jnetpcap.dll

如果不拷贝jnetpcap.dll到当前所工作的JDK目录下,将报如下错误
java.lang.UnsatisfiedLinkError: com.slytechs.library.NativeLibrary.dlopen
在这里插入图片描述
上述错误是相关的函数库没有拷贝到jdk的bin目录下。现在把jnetpcap.dll拷贝到bin目录下,问题解决,如果你电脑安装了多个JDK,注意查看当前使用的是哪一个JDK,别拷贝错位置。
在这里插入图片描述
能获取到网卡,基本就没问题了。
在这里插入图片描述

linux-拷贝jnetpcap.so

首先检查JDK,

java -version

输出信息如下,发现没有安装JDK,因此我们安装一个OpenJDK1.8尝试一下,为避免其他权限问题,我们切换到root

sudo -i
ubuntu@VM-24-17-ubuntu:~$ java -version
Command 'java' not found, but can be installed with:
sudo apt install openjdk-11-jre-headless  # version 11.0.24+8-1ubuntu3~22.04, or
sudo apt install default-jre              # version 2:1.11-72build2
sudo apt install openjdk-17-jre-headless  # version 17.0.12+7-1ubuntu2~22.04
sudo apt install openjdk-18-jre-headless  # version 18.0.2+9-2~22.04
sudo apt install openjdk-19-jre-headless  # version 19.0.2+7-0ubuntu3~22.04
sudo apt install openjdk-21-jre-headless  # version 21.0.4+7-1ubuntu2~22.04
sudo apt install openjdk-8-jre-headless   # version 8u422-b05-1~22.04

安装完毕默认的openJDK以后,查看下openJDK1.8的位置

root@VM-24-17-ubuntu:~# java -version
openjdk version "1.8.0_422"
OpenJDK Runtime Environment (build 1.8.0_422-8u422-b05-1~22.04-b05)
OpenJDK 64-Bit Server VM (build 25.422-b05, mixed mode)

此时运行程序,我们发现,报了和windows一模一样的错误。windwos我们是没有拷贝jnetpcap.dll,这里的ubantu是没有拷贝jnetpcap.so。
在这里插入图片描述
查找安装的jdk1.8所在位置

update-alternatives --display java

下面是输出信息,我们发现安装路径在:/usr/lib/jvm/java-8-openjdk-amd64/

root@VM-24-17-ubuntu:/home/ubuntu# update-alternatives --display java
java - auto mode
link best version is /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
link currently points to /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
link java is /usr/bin/java
slave java.1.gz is /usr/share/man/man1/java.1.gz
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java - priority 1081
slave java.1.gz: /usr/lib/jvm/java-8-openjdk-amd64/jre/man/man1/java.1.gz

需要注意一点,当我把libjnetpcap.so拷贝到bin目录下,却发现bin目录下,没有任何的so文件。
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/
在这里插入图片描述
启动也并没有找到函数库
在这里插入图片描述

然而在windows下,我们发现,除了我们拷贝的libjnetpcap.dll,还有其他的dll文件。
在这里插入图片描述
因此我们不防找一下ubantu上的jdk下的so文件存在那里,它存在哪里,我们就存在哪里
在:/usr/lib/jvm/java-8-openjdk-amd64目录下我们执行

find -name *.so

不然发现,实际上,so文件是在/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/目录下,因此我们把libjnetpcap.so移到这个目录下。然后重新启动程序试试。
在这里插入图片描述
如下所示,发现已经能获取到网卡,只是好像抓取数据的时候报错了。由于我使用的是腾讯云的服务器所以出现如下错误,该报错信息是:应用程序试图通过D-Bus进行进程间通信(IPC),但是无法启动或连接到D-Bus会话总线守护进程(dbus-daemon),简单说,就是这个服务器没有显示器。需要分配显示器才能正常工作。
看报错信息是:Failed to get session bus: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值