Я использую 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