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 的例子。

获取设备网卡:

  1. //此方法用于获取设备上的网卡设施
  2. public static ArrayList<PcapIf> CaptureNet(){
  3. CaptureUtil.flag=false;
  4.  
  5. // 用于存储搜索到的网卡
  6. ArrayList<PcapIf> alldevs = new ArrayList<PcapIf>();
  7.  
  8. //取得设备列表
  9. int r = Pcap.findAllDevs(alldevs, errbuf);
  10. if (r == Pcap.NOT_OK || alldevs.isEmpty()) {
  11. JOptionPane.showMessageDialog(null,errbuf.toString(),"错误",JOptionPane.ERROR_MESSAGE);
  12. return null;
  13. }
  14. return alldevs;
  15. }

打开选中网卡并捕获数据包:

  1. //打开选中的设备
  2. int snaplen = Pcap.DEFAULT_SNAPLEN; // 默认长度为65535
  3. int flags = Pcap.MODE_PROMISCUOUS; // 混杂模式,捕获所有类型的包
  4. int timeout = 5 * 1000; // 5 seconds in millis
  5. Pcap pcap = Pcap.openLive(device.getName(), snaplen, flags, timeout, errbuf);
  6. if (pcap == null) {
  7. JOptionPane.showMessageDialog(null,errbuf.toString(),"错误",JOptionPane.ERROR_MESSAGE);
  8. return;
  9. }

开始监听:

  1. 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. DB2数据库

    必需步骤: 您已经启用了 DB2 扩展 Windows 安全性.您必须将运行 DB2 本地应用程序或工具的 DB2 用户添加至 DB2ADMNS 或DB2USER 组 可以使用端口号 "50 ...

  2. vue之非父子通信

    一.非父子通信: 思路: 找个中间存储器,组件一把信息放入其中,组件二去拿 代码如下: let hanfei = new Vue();  # 实列化个空的vue对象,作为中间存储器来时间        ...

  3. Linux下进程间通信方式——pipe(管道)

    每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把 ...

  4. 【数位DP】【P4127】[AHOI2009]同类分布

    Description 给出两个数 \(a,~b\) 求出 \([a~,b]\) 中各位数字之和能整除原数的数的个数. Limitations \(1 \leq a,~b \leq 10^{18}\) ...

  5. css规范思维导图(仅限于自己)

  6. PID optimizer

    如何评价PID optimizer? 论文链接:http://www4.comp.polyu.edu.hk/~cslzhang/paper/CVPR18_PID.pdf作者github:https:/ ...

  7. matlab 彩色图像转化成灰度图像,灰度图像降低灰度级

    灰度级数k,k=2^b,称该图像为b比特图像. 降低灰度级数是靠2的幂次方 网上代码:https://blog.csdn.net/silence2015/article/details/6892736 ...

  8. springboot做api服务时不使用thymeleaf的相关警告DefaultTemplateResolverConfiguration 的消除

    springboot在不配置thymeleaf相关属性的情况下,会提示如下的问题 DefaultTemplateResolverConfiguration - Cannot find template ...

  9. 1-7docke的网络模式

    1.Bridge模式 bridge 模式是 docker 的默认⽹络模式,不写 –net 参数,就是 bridge 模式.比如使⽤ docker run - p 时 工作模式从网上找了一个,如下 例子 ...

  10. docker Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post

    利用docker构建时,报错 + docker pull maven:3-alpine Got permission denied while trying to connect to the Doc ...