首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pcap4j库:线程“主”java.io.IOException中的异常:不捕获NIF

Pcap4j库:线程“主”java.io.IOException中的异常:不捕获NIF
EN

Stack Overflow用户
提问于 2018-03-16 10:42:52
回答 1查看 775关注 0票数 1

当我捕获数据包时,我会得到以下错误:

线程"main“java.io.IOException中的异常:没有要捕获的NIF。 在org.pcap4j.util.NifSelector.selectNetworkInterface(NifSelector.java:44) at io.bigdatalabs.pcaptest.App.main(App.java:22)

守则是:

代码语言:javascript
复制
  package io.bigdatalabs.pcaptest;

import java.io.IOException;
import org.pcap4j.core.BpfProgram.BpfCompileMode;
import org.pcap4j.core.NotOpenException;
import org.pcap4j.core.PacketListener;
import org.pcap4j.core.PcapHandle;
import org.pcap4j.core.PcapNativeException;
import org.pcap4j.core.PcapNetworkInterface;
import org.pcap4j.core.PcapNetworkInterface.PromiscuousMode;
import org.pcap4j.packet.Packet;
import org.pcap4j.util.NifSelector;

public class App {

    public static void main(String [] args) throws PcapNativeException, IOException, NotOpenException, InterruptedException {
        String filter = null;
        if (args.length != 0) {
            filter = args[0];
        }

        PcapNetworkInterface nif = new NifSelector().selectNetworkInterface();
        if (nif == null) {
            System.exit(1);
        }

        final PcapHandle handle = nif.openLive(65536, PromiscuousMode.PROMISCUOUS, 10);

        if (filter != null && filter.length() != 0) {
            handle.setFilter(filter, BpfCompileMode.OPTIMIZE);
        }

        PacketListener listener = new PacketListener() {
            @Override
            public void gotPacket(Packet packet) {
                printPacket(packet, handle);
            }
        };

        handle.loop(5, listener);
    }

    private static void printPacket(Packet packet, PcapHandle ph) {
        StringBuilder sb = new StringBuilder();
        sb.append("A packet captured at ")
                .append(ph.getTimestamp())
                .append(":");
        System.out.println(sb);
        System.out.println(packet);
    }

}

但是我用sudo命令运行这段代码,它正在运行。为什么不使用sudo来运行这段代码呢?我应该在没有sudo的情况下运行这个代码。我如何运行这段代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-16 10:50:01

为了列出和监视您的网络接口,您需要超级用户特权。这就是为什么在没有sudo的情况下运行此代码时不能列出任何接口并获得异常的原因。

即使是著名的WireShark也不能列出如果没有sudo就不能运行它的接口,所以我不认为有任何其他解决方案可以让您以正常的权限运行应用程序。

祝好运。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49318787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档