zoukankan      html  css  js  c++  java
  • 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:WindowsSystem32 下就行。

         (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使用文档的下载链接,有兴趣的话最好还是照着使用文档来使用。

    上面有什么错误还希望大家指正,希望能和大家多交流。

    本文系原创,转载还请注明出处。

  • 相关阅读:
    转发自lealii 的博客,如有侵权请通知删除
    SQL注入详解-转发
    IT实用技术资源整理
    JMeter-接口自动化之正则表达式关联
    转发自_destiny如有侵权请联系删除
    二元数组的最小值最大和
    连续区间和大于等于某个数(弱化版)
    独一无二的最小生成树
    牛客小白月赛19 弱版 C
    牛客 安徽大学新生赛 G
  • 原文地址:https://www.cnblogs.com/hzauxx/p/11128747.html
Copyright © 2011-2022 走看看