1

在 Linux Mint 19.2 Cinnamon、内核上运行的 Netbeans 11.24.15.0-72-generic

我已将几年前开发的自定义网络数据包嗅探项目从 Windows 7 转移到 Linux。这使用 jNetPcap 来进行实际的数据包捕获。JnetPcap 是 Libpcap 的包装器。

问题:在 Netbeans 中运行我的项目时,我收到错误“您无权在该设备上捕获”。

将项目编译为 .jar 文件,然后我以 root 身份运行,一切都很好。从而证明项目代码是可以的,并且问题仅限于缺乏权限。

正在使用的“本机共享库”是 libjnetcap.so

本质上,我希望能够在 Netbeans 11.2 中运行/调试这个项目

为了解决这个问题,我尝试了很多事情:

  1. 假设它libjnetcap.so正在访问网络接口,我尝试使用setuid, 赋予它提升的权限,但没有效果。我还尝试使用 , 赋予它功能sudo setcap cap_net_raw=p ./libjnetpcap.so,但同样无效。

  2. 试穿。setuid_ /usr/bin/java这次我可以在.jar不使用sudo. 但是,Netbeans IDE 不会从桌面图标加载。从终端运行 Netbeans 会引发错误消息,setuid不允许使用。

  3. 我无法在/usr/bin/java. 文件类型错误?

我在这个论坛上找到了这个:

在您的情况下,pcap需要对网络接口进行低级访问。由于安全隐患(捕获网络流量、生成任意网络数据包等),此类访问仅限于特权用户。例如,在 Linux 上,pcap需要CAP_NET_RAW用户可以使用该功能。

这听起来像我的问题,但在哪里pcap?我似乎只有libjnetcap.so库文件。

如果某个善良的灵魂能给我任何指示等,我将不胜感激。

4

1 回答 1

1

不确定我是否没有回应,因为我的问题真的很模糊,很少有人经历过。或者也许我没有充分描述它。无论如何,我设法自己解决了它。我已经在下面描述了解决方案,以防其他人遇到它。需要找到正在使用的 java 可执行文件,然后更改其功能。1. 查找正在使用的 java 可执行文件。输入命令。whereis java 这给出了符号链接的路径。功能不能应用于符号链接,因此请遵循此目标。这是另一个符号链接,其目标是可执行文件。就我而言,这是:/usr/lib/jvm/java-8-openjdk-amd64/jre/bin 2. 将目录更改为此,即 cd /usr/lib/jvm/java-8-openjdk-amd64/jre/ bin 3. 改变它的能力:sudo setcap cap_net_raw,cap_net_admin=eip java

这解决了从脚本调用我的 java 应用程序时的权限问题。但是,从 Netbeans 中运行它仍然会出现权限错误。这是因为 Netbeans 不一定使用与 bash 脚本所使用的 Java 版本相同的 Java。在我的情况下,Netbeans 使用的是版本 11,因此将版本 8 添加到可用平台,然后将项目切换到此。

于 2020-01-15T16:01:52.443 回答