Netbeans 11.2运行在LinuxMint19.2内核的肉桂4.15.0-72-generic上
我将几年前开发的一个自定义网络数据包嗅探项目从Windows 7转移到Linux。这使用jNetPcap来执行实际的数据包捕获。JnetPcap是Libpcap的包装器。
问题:在Netbeans中运行我的项目时,我会得到一个错误:“您没有权限在该设备上捕获”。
将项目编译成一个.jar文件,然后以根用户的身份运行,一切都很好。从而证明项目代码正常,并且该问题仅限于缺乏权限。
正在使用的“本机共享库”是libjnetcap.so。
实际上,我希望能够在Netbeans 11.2中运行/调试这个项目。
为了解决这个问题,我尝试了许多事情:
在假定访问网络接口的是
setuid提高它的权限,但没有效果。我还尝试用sudo setcap cap_net_raw=p ./libjnetpcap.so提供它的功能,同样没有效果。/usr/bin/java上尝试了setuid。这一次,我可以在不使用.jar的情况下运行编译后的项目sudo文件。但是,Netbeans不会从桌面图标加载。从终端运行Netbeans会引发一条错误消息,即不允许使用setuid。/usr/bin/java上设置功能。错误的文件类型?我在这个论坛上发现这个:
在您的例子中,
pcap需要对网络接口的低级别访问.由于安全问题(捕获网络流量、生成任意网络数据包等),这种访问仅限于特权用户。例如,在Linux上,pcap需要向用户提供CAP_NET_RAW功能。
这听起来像是我的问题,但pcap在哪里?我似乎只有libjnetcap.so库文件。
如果某个善良的灵魂能给我指点,我会非常感激的。
发布于 2020-01-15 16:01:52
不知道我是否没有得到任何回应,因为我的问题真的很模糊,所以很少有其他人经历过这个问题。或许我没能充分描述它。不管怎样,我自己解决了这个问题。我已经描述了下面的解决方案,以防万一,其他人都应该体验一下。需要找到正在使用的java可执行文件,然后更改其功能。1.查找正在使用的java可执行文件。输入命令。这里是java,这给出了一个符号链接的路径。无法将功能应用于符号链接,因此请按照此操作到其目标。这是另一个以可执行文件为目标的符号链接。在我的例子中,这是:/usr/lib/jvm/8-OpenJDK-AMD 64/jre/bin 2.将目录更改为此,即cd /usr/lib/jvm/java-8-openjdk-add 64/jre/bin 3。
这解决了从脚本调用我的java应用程序时的权限问题。但是,在Netbeans中运行它仍然会导致权限错误。这是因为Netbeans不一定使用与bash脚本相同的Java版本。在我的例子中,Netbeans使用的是version 11,因此将版本8添加到可用的平台上,然后将项目切换到此版本。
https://stackoverflow.com/questions/59684117
复制相似问题