Jpcap获取本地Tcpdump包出错,帮忙看看
import jpcap.*;
import jpcap.Packet;//now the packet is jpcap
import jpcap.JpcapHandler;
import net.sourceforge.jpcap.capture.PacketCapture;
import net.sourceforge.jpcap.capture.PacketCaptureCapable;
import net.sourceforge.jpcap.capture.RawPacketListener;
import net.sourceforge.jpcap.net.RawPacket;
public void openCaptureFile()
{
packetcapture = new PacketCapture();
System.out.println("Open Capture File for Jpcap");
try
{
packetcapture.openOffline("capture_2");
System.out.println("Open success");
}
catch(Exception err)
{
System.out.println("Open fail");
err.printStackTrace();
}
我想用这段代码来打开这个本地文件,但是出来这样的错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: openOffline
at net.sourceforge.jpcap.capture.PacketCapture.openOffline(Native Method)
at net.sourceforge.jpcap.capture.PacketCapture.openOffline(PacketCapture.java:72)
at ReadJPcapFile.openCaptureFile(ReadJPcapFile.java:51)
不明白是哪里的问题。
还望大家帮帮忙,再不写出来导师要解雇我了。
问题点数:100、回复次数:3Top
1 楼keiy()回复于 2005-11-03 15:39:31 得分 0
java.lang.UnsatisfiedLinkError: 只有当包不完整或缺少dll(windwos)/so(linux)才会发生,我没有用 jpcap,请检查你的 jpcap是否完整,检查系统的classpath和path
Top
2 楼thomaslw(void)回复于 2006-03-05 01:13:50 得分 0
从你的类库命名上看应该是0.1.16
我从类库中查函数
你出错的地方,这是这个包中的内容 0package net.sourceforge.jpcap.capture;
public void openOffline(String fileName) throws CaptureFileOpenException {
openOffline(instanceNum, fileName); //这里是你编译器说的72行
}
public native void openOffline(int instance, String fileName)
throws CaptureFileOpenException;
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
这个函数是有重载的,而其中一个通过JAVA Native Interface调用了DLL
追根溯源我们找到jpcap.c文件中存在的此函数的内容
/*
* Open a tcpdump-formatted "savefile" for reading captured packets
* as an alternative to capturing packets off the wire.
*
* JNI PacketCapture.openOffline()
*/
JNIEXPORT void JNICALL
Java_net_sourceforge_jpcap_capture_PacketCapture_openOffline
(JNIEnv *env, jobject object, jint instance, jstring jfileName)
{
const char* fileName;
char ebuf[PCAP_ERRBUF_SIZE];
jfieldID fid;
jclass cls;
int linkType;
if(jfileName == NULL) {
throwException(env, FILE_OPEN_EXCEPTION, "null file name specified" );
return;
}
fileName = env->GetStringUTFChars(jfileName, 0);
PD[instance] = pcap_open_offline(fileName, ebuf);
if(PD[instance] == NULL) {
throwException(env, FILE_OPEN_EXCEPTION, ebuf);
return;
}
========================================================================
写这么多,虽然没有直接解决问题,但是UnsatisfiedLinkError确实是非静态错误。
也就是说如果不是dll版本不符,调用出错。那么就是重载时造成的问题
不妨试一下使用JNI的这个函数:openOffline(int instance, String fileName)
相信你都写到这个份上了,应该不是dll没搞对。。
导师要解雇你???看来我是要考虑一下是不是考研了。。。可以交流一下吗?Top
3 楼leejf000()回复于 2006-03-10 02:38:06 得分 0
net.sourceforge and jpcap是不一样的版本,你不应该混在一起用。Top




