尝试打开设备时JPcap崩溃

时间:2018-06-25 19:41:41

标签: java packet-capture jpcap

我使用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

0 个答案:

没有答案