0

JNetPcap に問題があります。

私はUbuntu 12.04を使用しており、Java言語に基づくパケットスニッパーを作成しようとしています。

私がしたことは以下です。

  1. JNetPcap 1.3.0 をダウンロードしました。

  2. そして、チュートリアルが言ったように、Javaプロジェクトを構築しました。 http://jnetpcap.com/examples/dumper <-これはリンクです。

  3. そのリンクのように入力したところ、最初の問題が発生しました。PcapHandler クラスは非推奨です。そこで、ドキュメントを見つけて ByteBufferHandler に置き換えます。

  4. このプロジェクトをコンパイルすると、unsatifiedLinked エラーが発生しました。そのライブラリをロードするために静的ブロックを試しました。いくつかの試行の後、「libjnetpcap.so」を /usr/lib/ にコピーしました

  5. unsatisfiedLinked Error を削除しました。しかし、なぜか1回目のエラーチェックで止まってしまいます。「1st error check : 」と出力し、自動的に終了します。

    public static void main(String[] args) {

    List<PcapIf> alldevs = new ArrayList<PcapIf>();
    StringBuilder errbuff = new StringBuilder();
    
    int r = Pcap.findAllDevs(alldevs, errbuff);
    
    //============1st check
    if(r == Pcap.NOT_OK || alldevs.isEmpty()){
        System.err.printf("1st error check : %s\n", errbuff.toString());
        return;
    }
    PcapIf device = alldevs.get(1);
    //===================== END
    
    int snaplen = 64 * 1024;
    int flags = Pcap.MODE_PROMISCUOUS;
    int timeout = 10 * 1000;
    Pcap pcap = Pcap.openLive(device.getName(),snaplen, flags, timeout, errbuff);
    
    //============2nd check
    if(pcap == null){
        System.err.printf("2nd error check : %s\n", errbuff.toString());
        return;         
    }
    //===================== END
    
    String ofile = "/home/juneyoungoh/tmp_capture_file.cap";
    final PcapDumper dumper = pcap.dumpOpen(ofile);
    
    ByteBufferHandler<PcapDumper> handler = new ByteBufferHandler<PcapDumper>() {
    
        @Override
        public void nextPacket(PcapHeader arg0, ByteBuffer arg1, PcapDumper arg2) {
            dumper.dump(arg0, arg1);
    
        }
    };
    
    pcap.loop(10,handler, dumper);
    
    File file = new File(ofile);
    System.out.printf("%s file has %d bytes in it!\n", ofile, file.length());
    
    dumper.close();
    pcap.close();
    
    if(file.exists()){
        file.delete();
    }
    

    }

良い参考書や素晴らしいアイデアがあれば、共有してください。

ありがとう。

4

1 に答える 1

0

Linux では、デバイスを開くことができるようにするには、おそらくプログラムを root として実行するか、他の方法で十分な権限を与えて実行する必要がありpcap_findalldevs()ますPcap.findAllDevs。検出したデバイスのうち、開くことができるデバイスのみを返します。

そのため、Java プログラムを root として実行するか、ネットワーク アダプタのリストを取得してそれらのアダプタを開くのに十分な権限 (CAP_NET_RAW および CAP_NET_ADMIN) を持つように何らかの方法で調整する必要があります。

于 2013-07-01T17:09:15.947 に答える