我使用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文件是从源代码编译的,以便可以在Windows 64位上使用。无论如何,我能解决这个奇怪的问题吗?
查看jpcap.dll文件源代码后,我发现JpcapCaptor.java文件的openDevice方法(崩溃的方法)中使用了以下代码:
JpcapCaptor jpcap = new JpcapCaptor();
String ret = jpcap.nativeOpenLive(intrface.name, snaplen, (promisc ? 1 : 0), to_ms);
根据编译器,这是此代码崩溃的第二行。因此,我查看了来自文件JpcapCaptor.c的nativeOpenLive方法,该文件的开头是:
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