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开发博文有点长呢~主要是因为博主也是小白,在做实验的过程中查询了很多很多概念,努力去理解每一个知识点,才完成了最终的实验.还有就是随 ...
随机推荐
- Kinect一代学习(一):开发环境搭建
https://blog.csdn.net/hongbin_xu/article/details/80722749 我用的是kinect一代(Xbox 360)的所以选择了v1.x的SDK,如果是ki ...
- three.js 离线API
- 洛谷 P3374 【模板】树状数组 1 题解
P3374 [模板]树状数组 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入格式 第一行包含两个整数N.M,分别表示该数列数字的个数 ...
- 【数位DP】【P2657】[SCOI2009]windy数
Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为 \(2\) 的正整数被称为windy数. windy想知道, 在 \(A\) 和 \(B\) 之间,包括 ...
- PATA1028 List Sorting
Excel can sort records according to any column. Now you are supposed to imitate this function. Input ...
- 解决 IDEA 创建 Gradle 项目没有src目录问题
解决 IDEA 创建 Gradle 项目没有src目录问题 前几天遇到一个问题,就是使用IDEA创建gradle项目后,src目录没有自动生成出来,今天就给大家分享一下怎么解决. 1. 目录:创建的 ...
- c# 自定义按钮,渐变颜色(含中心向四周渐变,单方向渐变)
废话不多言,直接代码: public class RoundButton : Button { bool clickBool = false; //1.设置圆形 //2.设置渐变色 //3.设置too ...
- Faiss的学习和入门文章
可以看这里的文章: https://www.leiphone.com/news/201703/84gDbSOgJcxiC3DW.html https://waltyou.github.io/Faiss ...
- 存储过程中的BeginEnd
存储过程中的BeginEnd和其它语言中的花括号,本身没有事务作用,主要有两个作用1.使语句结果清晰2.语句块作用,比如在 if 后面使用.
- AntDesign vue学习笔记(三)嵌套路由使用
本项目目前结构如下 1.Login页面=>MainFrm页面=>MainFrm左部菜单,右边是显示区域可以切换子页面. 2.当点击左部菜单时,右边的子页面随着进行切换. 实现关键代码如下1 ...