gpt4 book ai didi

java - 网络接口(interface): you don't have permission to capture on that device (socket: Operation not permitted)

转载 作者:行者123 更新时间:2023-12-01 18:01:08 28 4
gpt4 key购买 nike

目前我正在编写一个查看本地带宽的小项目。我安装了该软件包并实现了 pcap4j site 上可用的代码只是想像这样尝试一下:

import org.pcap4j.core.*;
import org.pcap4j.core.PcapNetworkInterface.PromiscuousMode;
import org.pcap4j.packet.IpV4Packet;
import org.pcap4j.packet.Packet;

import java.io.EOFException;
import java.lang.*;
import java.net.*;
import java.util.concurrent.TimeoutException;

public class BandwidthViewer {
public static void main(String[] args) throws UnknownHostException, PcapNativeException, EOFException, TimeoutException, NotOpenException {
InetAddress addr = InetAddress.getByName("192.168.1.8");
PcapNetworkInterface nif = Pcaps.getDevByAddress(addr);

int snapLen = 65536;
PromiscuousMode mode = PromiscuousMode.PROMISCUOUS;
int timeout = 10;
PcapHandle handle = nif.openLive(snapLen, mode, timeout);

Packet packet = handle.getNextPacketEx();
handle.close();

IpV4Packet ipV4Packet = packet.get(IpV4Packet.class);
Inet4Address srcAddr = ipV4Packet.getHeader().getSrcAddr();
System.out.println(srcAddr);
}
}

运行后我收到此错误:

/usr/lib/jvm/java-11-openjdk/bin/java -javaagent:/usr/share/idea/lib/idea_rt.jar=46685:/usr/share/idea/bin -Dfile.encoding=UTF-8 -classpath /home/ivan/mdrive/Projects/IdeaProjects/BandwidthViewer/target/classes:/home/ivan/.m2/repository/org/pcap4j/pcap4j-core/2.0.0-alpha.6/pcap4j-core-2.0.0-alpha.6.jar:/home/ivan/.m2/repository/org/slf4j/slf4j-api/1.7.26/slf4j-api-1.7.26.jar:/home/ivan/.m2/repository/net/java/dev/jna/jna/5.3.1/jna-5.3.1.jar:/home/ivan/.m2/repository/org/pcap4j/pcap4j-packetfactory-static/2.0.0-alpha.6/pcap4j-packetfactory-static-2.0.0-alpha.6.jar BandwidthViewer
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" org.pcap4j.core.PcapNativeException: enp3s0: You don't have permission to capture on that device (socket: Operation not permitted)
at org.pcap4j.core.PcapNetworkInterface.openLive(PcapNetworkInterface.java:238)
at BandwidthViewer.main(BandwidthViewer.java:19)

Process finished with exit code 1

由于我以非 root 用户身份运行它,所以我可以嗅探任何数据包,这是有道理的。我尝试使用类似 this 的解决方案来解决此问题但最终没有成功。我知道这应该是可能的,因为像 Wireshark 这样的程序也需要您以 root 用户身份登录才能查看所有数据包。有人知道什么可以解决这个问题吗?显然我可以以 root 身份运行 IDE,但这似乎没有必要。我在 Manjaro Linux 上运行它。

最佳答案

我修好了。经过进一步调查,我发现我尝试添加权限的文件位于我的 java-8-openjdk 文件夹中,但我的项目使用 java-11-openjdk。因此,我为正确的可执行文件设置了权限,现在它可以工作了。可以通过以 root 身份登录终端并执行:setcap cap_net_raw,cap_net_admin=eip/path/to/java

来更改权限。

关于java - 网络接口(interface): you don't have permission to capture on that device (socket: Operation not permitted),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60624832/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com