Jnetpcap简述
Jnetpcap简述
最近需要做一个本地网络流量分析的项目,基于 Java 语言,上网查了很多资料,最后利用 Jnetpcap 实现了,这里做个记录。
这里先列一下我用到的工具以及版本:
Eclipse Version: 2019-06 (4.12.0)
JDK Version:12.0.1,2019-04-16
WinPcap Version:4.1.3
JnetPcap Version:1.4.r1425
Java本身不支持底层的网络操作,需要第三方包利用 JNI 封装不同系统的C库来提供 Java 上层接口,其他的一些类库像JPcap都年久失修了,我这里就是用 Jnetpcap 实现的。下面是步骤,需要用到的文件我这里附上链接:
WinPcap:https://pan.baidu.com/s/1Xu-HAaGSkOR-WriJM4wrBw,提取码:yti0
JnetPcap:https://pan.baidu.com/s/16bfUf8jHIH7osmC7rd0i-w ,提取码:6pcx
JnetPcap开发者文档:https://pan.baidu.com/s/1O1GDTpTHmtHxMZXo3YXMdQ,提取码:mg2y
一、安装WInPcap(Windows系统)
使用JnetPcap都要在系统中安装WinPcap,这里是Windows系统下,Linux下需要就安装Lipcap,这里我主要以 Windows 系统来介绍。
WinPcap安装包上面已经给出,直接下了安装就行。
二、安装JnetPcap
这里使用Jnetpcap我是导入 Jar 包的形式,没有采用 Maven ,我在添加依赖之后始终显示在中央仓无法下载,不知道是哪里出了问题,后来干脆就采用麻烦一点的手段,导入 Jar 包,这里步骤就比较麻烦了。
先把上面链接的JnetPcap下载下来并解压,接下来进行下面两步:
(1)、添加 .dll 文件进系统路径
这里需要把 jnetpcap.dll 和 jnetpcap.dll 添加进系统路径中,这里添加进系统本身的路径或者 JDK/bin 路径下都可以,这里为了方便,直接把这两个文件复制到 C:\Windows\System32 下就行。
(2)、在项目中导入 Jar 包
在 Eclipse 里点击 File-->New-->Folder ,名称填 lib ,再把上面解压后文件中的 jnetpcap.jar 文件复制到刚刚创建的文件夹下。
接下来还有一步,右键点击项目,点击最下面的 Properties,选中 Java Build Path-->Libraries,注意要点击 Classpath,不要管上面那个 Modulepath ,要是添加成上面那个运行的时候会一直报 java.lang.NoClassDefFoundError。
点击Classpath后点击右边的 Add JARS ,在里面找到刚刚的 lib 文件夹下的 jnetpcap.jar 点击添加就行,成功后应该是下面这样的。
这样基本JnetPcap的配置就基本成功了。
三、简单的使用
这里我给出几个使用 JnetPcap 的例子。
获取设备网卡:
//此方法用于获取设备上的网卡设施
public static ArrayList<PcapIf> CaptureNet(){
CaptureUtil.flag=false; // 用于存储搜索到的网卡
ArrayList<PcapIf> alldevs = new ArrayList<PcapIf>(); //取得设备列表
int r = Pcap.findAllDevs(alldevs, errbuf);
if (r == Pcap.NOT_OK || alldevs.isEmpty()) {
JOptionPane.showMessageDialog(null,errbuf.toString(),"错误",JOptionPane.ERROR_MESSAGE);
return null;
}
return alldevs;
}
打开选中网卡并捕获数据包:
//打开选中的设备
int snaplen = Pcap.DEFAULT_SNAPLEN; // 默认长度为65535
int flags = Pcap.MODE_PROMISCUOUS; // 混杂模式,捕获所有类型的包
int timeout = 5 * 1000; // 5 seconds in millis
Pcap pcap = Pcap.openLive(device.getName(), snaplen, flags, timeout, errbuf);
if (pcap == null) {
JOptionPane.showMessageDialog(null,errbuf.toString(),"错误",JOptionPane.ERROR_MESSAGE);
return;
}
开始监听:
pcap.loop(int cnt, JPacketHandler<T> handler, T user)
当然上面只是一些代码示例,不是完整的代码,在之后的博客中会更新完整的代码。
上面给出了JnetPcap使用文档的下载链接,有兴趣的话最好还是照着使用文档来使用。
上面有什么错误还希望大家指正,希望能和大家多交流。
本文系原创,转载还请注明出处。
Jnetpcap简述的更多相关文章
- 简述 OAuth 2.0 的运作流程
本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程. 假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时 ...
- JavaScript单线程和浏览器事件循环简述
JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...
- Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】
原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...
- Android网络定位服务定制简述
Android 添加高德或百度网络定位服务 Android的网络定位服务以第三方的APK方式提供服务,由于在国内Android原生自带的com.google.android.gms服务几乎处于不可用状 ...
- 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述
微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...
- 简述ASP.NET MVC原理
1.为什么ASP.NET需要MVC? 因为随着网站的的数量级越来越大,原始的网站方式,这里指的是WebForm,在运行速度和维护性方面,以及代码量上面,越来越难以满足日益庞大的网站维护成本.代码的重构 ...
- Design Patterns Simplified - Part 2 (Singleton)【设计模式简述--第二部分(单例模式)】
原文链接: http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part-2-singleton/ De ...
- 【翻译】设计模式学习系列1---【Design Patterns Simplified: Part 1【设计模式简述:第一部分】】
原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part1/ Design Pattern ...
- Android开发3:Intent、Bundle的使用和ListView的应用 、RelativeLayout(相对布局)简述(简单通讯录的实现)
前言 啦啦啦~博主又来骚扰大家啦~大家是不是感觉上次的Android开发博文有点长呢~主要是因为博主也是小白,在做实验的过程中查询了很多很多概念,努力去理解每一个知识点,才完成了最终的实验.还有就是随 ...
随机推荐
- Linux中的关机操作
shutdown -h now //马上停止服务进行关机 shutdown -h 12:00 .//在12点后进行关机 shutdown -h +10 //在10分钟后进行关机 shutdown ...
- bzoj2916: [Poi1997]Monochromatic Triangles 思路
bzoj2916: [Poi1997]Monochromatic Triangles 链接 bzoj 思路 总方案\(C_{n}^{3}-异色三角形\) 异色三角形有个特点. 会出现两个点有两条不同色 ...
- R语言排序 -- sort() order() rank()
order() 的返回值是对应“排名”元素所在向量中的位置.注意返回的不是元素本身,而是元素的位置. sort() 是直接对向量中的元素进行排序,返回的是排序后的元素组成的向量. rank() 是求秩 ...
- 远程windows
1. 起因 因为经常用teamviewer,所以断定我是商业用户,不允许我用了.想买一个授权,结果太贵了,1700多.使用了很多其他的,向日葵卡顿,有的窗口点不到,vnc慢,效果差,卡顿,还收费,等等 ...
- Spring Security教程之退出登录logout(十)
要实现退出登录的功能我们需要在http元素下定义logout元素,这样Spring Security将自动为我们添加用于处理退出登录的过滤器LogoutFilter到FilterChain.当我们指定 ...
- 【IntelliJ IDEA学习之七】maven专题
版本:IntelliJIDEA2018.1.4 一.maven全局设置 设置Runner 运行VM参数:-Xms128m -Xmx512m -Duser.language=zh -Dfile.enco ...
- Zuul之路由熔断
Zuul作为Netflix组件,可以与Ribbon.Eureka.Hystrix等组件结合,实现负载均衡.熔断器的功能 Spring boot2X集成zuul与consul实现负载均衡和反向代理 当后 ...
- .NET 微服务 2 架构设计理论(一)
SOA体系架构 面向服务的体系结构 (SOA) ,通过将应用程序分解为多个服务(通常为 HTTP 服务,WCF服务等),将其分为不同类型(例如子系统或层),从而来划分应用程序的结构. 微服务源自 SO ...
- Linux驱动架构之pinctrl子系统分析(一)
1.前言在嵌入式系统中,许多SoC的内部都包含了pin控制器,通过芯片内部的pin控制器,我们可以配置一个或者一组引脚的状态和功能特性,Linux内核为了统一各SoC厂商的引脚管理,提供了pinctr ...
- C语言注释风格
注释风格 一.前言 注释是源码程序中非常重要的一部分,一般情况下,源程序有效注释量必须在20%以上. 注释的原则是有助于对程序的阅读理解,所以注释语言必须准确.易懂.简洁,注释不宜太多也不能太少,注释 ...