网络接口:您无权在该设备上进行捕获(套接字:不允许进行操作)

问题描述 投票:0回答:1

目前,我正在编写一个查看本地带宽的小项目。我安装了该软件包并实现了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用户身份登录才能查看所有数据包。有人知道什么可以解决此问题吗?显然,我可以以根用户身份运行IDE,但这似乎是不必要的。我正在Manjaro Linux上运行它。

java linux pcap
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.