如果你想捕获Java程序中的网络包,那么你需要一些辅助工具,因为核心Java API不能访问底层的网络数据。但Jpcap是一种提供在Windows或UNIX系统上进行这种访问的Java API。
Jpcap不是一种纯粹的Java解决方案;它依赖本地库的使用。在Windows 或 UNIX上,你必须有必要的第三方库,分别是WinPcap或libpcap。
Jpcap的工作原理
Jpcap使用一个事件模型来让你处理包。首先你必须创建一个执行接口jpcap.JpcapHandler的类。
public class JpcapTip implements JpcapHandler {
public void handlePacket(Packet packet){
System.out.println(packet);
}
}
为了捕获包,你需要告诉Jpcap你想用哪个网络设备来监听。API提供了jpcap.Jpcap.getDeviceList()方法以满足这一目的。这个方法返回一列字符串,你可以象如下使用它:
String[] devices = Jpcap.getDeviceList();
一旦你有了一个设备名称的目录,你必须选取一个用来监听:
String deviceName = devices[0];
选择一个设备之后,通过Jpcap.openDevice()方法打开它。openDevice()方法需要四个参数:即将打开的设备名,从设备上一次读取的最大字节数,说明是否将设备设为混杂模式的Boolean值,和以后调用processPacket()方法要使用到的超时值。
Jpcapjpcap = Jpcap.openDevice(deviceName, 1028, false, 10000);
openDevice()方法将一个参数返回到用以捕获的Jpcap对象。既然有了Jpcap实例,你可以调用processPacket() 或loopPacket()开始监听了。这两种方式都带有两个参数:捕获的最大包数可以是-1(说明没有限制);执行JpcapHandler的一个类的实例。
如果你调用processPacket(),那么Jpcap将一直捕获包,直到超过openDevice中规定的时限或达到了规定的最大包数。loopPacket()则将一直捕获包,直到达到最大包数,如果没有最大数限制,它将永远运行下去。就像下面这样调用:
jpcap.loopPacket(-1, new JpcapTip());
下面则是全部测试类的代码:
import jpcap.JpcapHandler;
import jpcap.Jpcap;
import jpcap.Packet;
public class JpcapTip implements JpcapHandler {
public void handlePacket(Packet packet){
System.out.println(packet);
}
public static void main(String[] args) throws java.io.IOException{
String[] devices = Jpcap.getDeviceList();
for (inti = 0; i < devices.length; i++) {
System.out.println(devices[i]);
}
String deviceName = devices[0];
Jpcapjpcap = Jpcap.openDevice(deviceName, 1028, false, 1);
jpcap.loopPacket(-1, new JpcapTip());
}
}
为了执行这个类,你必须确保虚拟机可以找到Jpcap的本地库。在Window上,如果jpcap.dll在库地址目录中,Java命令如下:
java -Djava.library.path=lib -cp lib\jpcap.jar;. JpcapTip
执行测试类的输出则如下(出于篇幅考虑进行了缩减):
ARP REQUEST 00:06:5b:01:b2:4d(192.168.15.79)
00:00:00:00:00:00(192.168.15.34)
ARP REQUEST 00:06:5b:01:b2:4d(192.168.15.79)
00:00:00:00:00:00(192.168.15.34)
1052251329:525479 192.168.15.103->255.255.255.255 protocol(17) priority(0)
hop(
offset(0) ident(59244) UDP 1211 1211
分享到:
相关推荐
Jpcap是一个能够捕获、发送网络数据包的java类库包。这个包用到了Libpcap和原始套接字API,目前,Jpcap在FreeBSD 3.x, Linux RedHat 6.1, Solaris, and Microsoft Windows 2000/XP系统上已经做过测试,并且支持...
Jpcap是用于捕获和发送网络数据包的Java库。 用Jpcap,你可以开发应用程序捕获数据包从一个网络接口和可视化/分析他们在java。您还可以开发Java应用程序通过网络接口发送任意数据包。 Jpcap已在微软视窗(98/2000/...
JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用wincap/libpcap,而给 JAVA语言提供一个公共的接口,从而实现了平台无关性。在官方网站上声明,JPCAP支持FreeBSD 3.x, Linux RedHat ...
找了很长时间的jpcap知识,经过自己的努力,终于编辑了一个可用的jpcap代码。可以捕获和分析IP数据包,NETBEAN下运行通过。只要jpcap配置正确,保证可以运行。xixi代码,保证质量。谢谢大家长时间的支持!我会继续...
JPCAP扩展包弥补了这一点,jPcap是一个可以让java工作在链路层的类库;当然,它底层还是使用了本机API通过Jini调用,在javaAPI中得到数据。JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP...
支持64位的Jpcap.dll 用于在64位系统上运行jpcap抓包服务。 如果用32位的Dll,将会出现如下错误: Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jre7\bin\Jpcap.dll: Can't ...
Jpcap version 0.06.0
net.sourceforge.jpcap.jar包的api net.sourceforge.jpcap.jar比一般的jpcap.jar有更多的封装类
安装jpcap报错:Exception in thread "main" java.lang.UnsatisfiedLinkError: C:/Windows/System32/Jpcap.dll: Can't find dependent libraries 解决办法。
jpcap的Jpcap.dll和jpcap.jar。有一篇原创博文的评论说:“为什么我下载的jpcap压缩包中没有jpcap.jar呢”,故上传该资源方便其下载。哈哈哈啦啦啦
jpcap dll 64位 jpcap jar jpcap dll 64位 jpcap jar
java 网络通讯报文监听。。。。 jpcap.jar 和 jpcap.dll(32位动态库和64位动态库),需要安装wincap
jpcap.jar+Jpcap.dll java版,能够抓取经过数据链路层的数据包,对抓取到的数据包进行一定程序的解析,可自己写IP数据包直接发送给数据链路层……
Jpcap 64位,完整一套包括Winpcap,Jpcap,jpcap.dll,demo.
Windows下亲测有效,使用方法,首先安装WinPcap,然后将jpcap.jar拷贝到${JAVA_HOME}/jre/lib/ext中,将Jpcap.dll拷贝到${JAVA_HOME}/jre/bin中,这样就可以在Java Project中使用jpcap了,Linux下libpcap+jpcap环境...
jpcap的开发API文档以及可使用的jar包,可供开发者使用
jpcap64位 win10 下的 64位 jpcap开发包,可以用来发送拦截地网络数据包
jpcap.jar jpcap.dll 32位 64位 获取网络包,支持win7 32位 64位 xp ubuntu 等系统.
java利用jpcap进行数据包的捕获与分析的重要资料
可以用来抓取本机网络接口上网络数据包,可以分析IP/ICMP/TCP/UDP等协议包。 jpcap.dll必须放jre的bin目录