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使用文檔的下載鏈接,有興趣的話最好還是照着使用文檔來使用。

 

上面有什么錯誤還希望大家指正,希望能和大家多交流。

 

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM