В настоящее время я пишу небольшой проект, который просматривает локальную пропускную способность. Я установил пакет и внедрил код, который доступен на сайте 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 как root, но это просто кажется ненужным. Я запускаю это на Манджаро Linux.