Jnetpcap簡述

Jnetpcap簡述

最近須要作一個本地網絡流量分析的項目,基於 Java 語言,上網查了不少資料,最後利用 Jnetpcap 實現了,這裏作個記錄。java

 

這裏先列一下我用到的工具以及版本:網絡

     Eclipse               Version: 2019-06 (4.12.0)工具

     JDK                    Version:12.0.1,2019-04-16oop

     WinPcap            Version:4.1.3ui

     JnetPcap           Version:1.4.r1425spa

 

Java自己不支持底層的網絡操做,須要第三方包利用 JNI 封裝不一樣系統的C庫來提供 Java 上層接口,其餘的一些類庫像JPcap都年久失修了,我這裏就是用 Jnetpcap 實現的。下面是步驟,須要用到的文件我這裏附上連接:code

 

    WinPcap:https://pan.baidu.com/s/1Xu-HAaGSkOR-WriJM4wrBw,提取碼:yti0blog

    JnetPcap:https://pan.baidu.com/s/16bfUf8jHIH7osmC7rd0i-w      ,提取碼:6pcx接口

JnetPcap開發者文檔:https://pan.baidu.com/s/1O1GDTpTHmtHxMZXo3YXMdQ,提取碼:mg2yip

 

1、安裝WInPcap(Windows系統)

使用JnetPcap都要在系統中安裝WinPcap,這裏是Windows系統下,Linux下須要就安裝Lipcap,這裏我主要以 Windows 系統來介紹。

 

WinPcap安裝包上面已經給出,直接下了安裝就行。

 

 

 

2、安裝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的配置就基本成功了。

 

 3、簡單的使用

 這裏我給出幾個使用 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使用文檔的下載連接,有興趣的話最好仍是照着使用文檔來使用。

 

上面有什麼錯誤還但願你們指正,但願能和你們多交流。

 

 

本文系原創,轉載還請註明出處。

相關文章
相關標籤/搜索