2

jpcapを使用してネットワークIPアドレスをキャプチャするプログラムがあります。しかし、私はこのエラーを受け取ります

//スレッド"main"の例外java.lang.UnsatisfiedLinkError:jpcap.JpcapCaptor.getDeviceList()[Ljpcap / NetworkInterface; jpcap.JpcapCaptor.getDeviceList(ネイティブメソッド)at example.Main.main(Main.java:25)//

私のプログラム

        package example;

        /**
         *
      * @author Administrator
      */
      import java.net.Inet4Address;
    import java.net.InetAddress;
   import java.util.Arrays;
  import java.io.IOException;
  import java.io.*;
  import java.util.Scanner;
 import jpcap.*;
 import jpcap.packet.*;

 public class Main{
public static void main(String[] args) throws IOException{

  //Obtain the list of network interfaces
 NetworkInterface[] devices = JpcapCaptor.getDeviceList();

//for each network interface
 for (int i = 0; i < devices.length; i++) {/ /print out its name and description
System.out.println(i+": "+devices[i].name + "(" + devices[i].description+")");

 //print out its datalink name and description
System.out.println(" datalink: "+devices[i].datalink_name + "(" +   devices[i].datalink_description+")");

 //print out its MAC address
   System.out.print(" MAC address:");
   for (byte b : devices[i].mac_address)
  System.out.print(Integer.toHexString(b&0xff) + ":");
   System.out.println();

  //print out its IP address, subnet mask and broadcast address
    for (NetworkInterfaceAddress a : devices[i].addresses)
   System.out.println(" address:"+a.address + " " + a.subnet + " "+ a.broadcast);
   }

   //NetworkInterface[] devices = JpcapCaptor.getDeviceList();
   int index =1; // set index of the interface that you want to open.

    //Open an interface with openDevice(NetworkInterface intrface, int snaplen,           boolean promics, int to_ms)
    final JpcapCaptor captor=JpcapCaptor.openDevice(devices[index], 65535, false, 20);









  //JpcapCaptor captor=JpcapCaptor.openDevice(device[1], 65535, false, 20);

  //call processPacket() to let Jpcap call PacketPrinter.receivePacket() for every packet capture.
   //captor.processPacket(10,new PacketPrinter());
  //System.out.println(packet);
//captor.close();

      }
      }
4

2 に答える 2

1

まず、Java 32 ビット バージョンを使用する必要があります。それをインストールしてから、jpcap dll を bin フォルダーにコピーします。jpcap jar を lib/ext フォルダーにコピーします。

Eclipse を使用している場合は、インストールされている JRE が 32 ビット バージョンを指すように設定を定義し、Java プロジェクトがワークスペースのデフォルトを使用していることを確認してください。その後、すべてを自動的に取得する必要があります。

于 2013-01-15T04:54:07.483 に答える
0

Javadocが言うように

Java 仮想マシンがネイティブと宣言されたメソッドの適切なネイティブ言語定義を見つけられない場合にスローされます。

ネイティブ ライブラリが見つからないと思います。PATH 環境変数で指定されたいずれかに jpcap.dll ファイルがありますか?

于 2012-12-14T14:28:41.600 に答える