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简述的更多相关文章

  1. 简述 OAuth 2.0 的运作流程

    本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程. 假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时 ...

  2. JavaScript单线程和浏览器事件循环简述

    JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...

  3. Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...

  4. Android网络定位服务定制简述

    Android 添加高德或百度网络定位服务 Android的网络定位服务以第三方的APK方式提供服务,由于在国内Android原生自带的com.google.android.gms服务几乎处于不可用状 ...

  5. 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述

    微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...

  6. 简述ASP.NET MVC原理

    1.为什么ASP.NET需要MVC? 因为随着网站的的数量级越来越大,原始的网站方式,这里指的是WebForm,在运行速度和维护性方面,以及代码量上面,越来越难以满足日益庞大的网站维护成本.代码的重构 ...

  7. Design Patterns Simplified - Part 2 (Singleton)【设计模式简述--第二部分(单例模式)】

    原文链接: http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part-2-singleton/ De ...

  8. 【翻译】设计模式学习系列1---【Design Patterns Simplified: Part 1【设计模式简述:第一部分】】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part1/ Design Pattern ...

  9. Android开发3:Intent、Bundle的使用和ListView的应用 、RelativeLayout(相对布局)简述(简单通讯录的实现)

    前言 啦啦啦~博主又来骚扰大家啦~大家是不是感觉上次的Android开发博文有点长呢~主要是因为博主也是小白,在做实验的过程中查询了很多很多概念,努力去理解每一个知识点,才完成了最终的实验.还有就是随 ...

随机推荐

  1. PHP 多个字段自增或者自减

    //自增$res=Db::name('accessories') ->where('id',$req['id']) ->inc('number',$req['number']) -> ...

  2. Q1094

    一,看题 1,字符串确实是我的弱项. 2, 二,看题解 #include<iostream> #include<string> using namespace std; int ...

  3. tornado表单和模板

    模板渲染,指定模板路径: app = tornado.web.Application( handlers=[(r'/my', Myrequest),('/myweb',MywebRequest)], ...

  4. HTML 超链接返回上一级

    参考:http://blog.csdn.net/huanongjingchao/article/details/39587663 超链实现返回刚刚访问的网页: <a href="#&q ...

  5. Intellij Idea 星云常用配置工具箱

    1. 软件配置篇 1.1 关闭默认打开最近的工程选项 1.2. 修改快捷键 1.3 修改字体 1.4 创建类模板 效果如下: 1.5 创建接口模板 效果同上 2. 插件篇 1.1 省略Getter a ...

  6. Android 10 终于来了!增加了不少新特性

    前言 Android 10 正式发布了,根据官网的介绍,聚焦于隐私可控.手机自定义与使用效率,此版本主要带来了十大新特性:   image 智能回复 使用机器学习来预测你在回复信息时可能会说些什么,这 ...

  7. Spring Security教程(二)

    上一篇博客中,Spring Security教程(一),我把用户信息和权限信息放到了xml文件中,这是为了演示如何使用最小的配置就可以使用Spring Security,而实际开发中,用户信息和权限信 ...

  8. 使用rxjs以及javascript解决前端的防抖和节流

    JavaScript实现方式: 防抖 触发高频事件后 n 秒内函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间:思路:每次触发事件时都取消之前的延时调用方法: 举个例子:做一个自动查 ...

  9. Java 在 Word 文档中使用新文本替换指定文本

    创作一份文案,经常会高频率地使用某些词汇,如地名.人名.人物职位等,若表述有误,就需要整体撤换.文本将介绍如何使用Spire.Doc for Java,在Java程序中对Word文档中的指定文本进行替 ...

  10. 如何申请腾讯地图用户Key

    打开网页https://lbs.qq.com/,进入腾讯位置服务. 单击[登录],登录腾讯账号(本文以QQ登录为例),如果首次登陆腾讯位置服务,则提示注册开发者账号. 选择箭头处[注册新账号].填写手 ...