Jpcap вылетает при попытке открыть устройство - PullRequest
0 голосов
/ 25 июня 2018

Я использую Jpcap для создания запросов ARP, но при вызове метода JpcapCaptor.openDevice(interface,snaplen,promisc,to_ms); я получаю следующую ошибку:

java.lang.NoSuchMethodError: setPacketValue
  at jpcap.JpcapCaptor.nativeOpenLive(Native Method)
  at jpcap.JpcapCaptor.openDevice(JpcapCaptor.java:61)

Используемый мной файл jpcap dll был скомпилирован из исходного кода для работы в 64-битной Windows. Могу ли я решить эту странную проблему?

Изучив исходный код файла jpcap.dll, я вижу, что в методе openDevice (тот, который вылетает) файла JpcapCaptor.java используется следующий код:

JpcapCaptor jpcap = new JpcapCaptor();
String ret = jpcap.nativeOpenLive(intrface.name, snaplen, (promisc ? 1 : 0), to_ms);

По словам компилятора, это вторая строка этого фрагмента кода, который вылетает. Поэтому я посмотрел на метод nativeOpenLive, который исходит из файла JpcapCaptor.c, который начинается с:

JNIEXPORT jstring JNICALL
Java_jpcap_JpcapCaptor_nativeOpenLive(JNIEnv *env,jobject obj,jstring device,jint snaplen,jint promisc,jint to_ms){
char *dev;
jint id;
set_Java_env(env);

Однако в этой последней функции (set_Java_env) я нашел вызов метода setPacketValue в следующей форме: setPacketValueMID=(*env)->GetMethodID(env,Packet,"setPacketValue","(JJII)V");

Имея только очень слабые основания в C, я хотел бы знать значение этих различных методов и, если возможно, откуда берется ошибка.

Источник доступен по следующему адресу: https://github.com/jovigb/jpcap-x64/blob/master/src

...