衆所周知,Java雖然在TCP/UDP傳輸方面給予了良好的定義,可是標準庫java.net對於網絡層如下的控制是無能爲力的。Jpcap就是爲了處理這一問題而出現的中間件。它調用底層的winpcap/libpcap來實現對數據鏈路層的控制,並給Java語言提供一個公共的接口,從而實現了平臺無關性。html
本文不涉及到介紹Jpcap的應用,只是簡單地記錄一下在Ubuntu & Windows 下安裝及配置Jpcap的過程。java
學習Jpcap的使用,請轉到 jpcap入門指南git
1、Ubuntu下配置過程github
前置條件,確保安裝有build-essential 和 libpcap包網絡
build-essential 能夠直接用 apt-get 安裝。而libpcap則不能夠,我參考的這一博客Ubuntu 14.04下安裝libpcap架構
下面開始安裝Jpcap,首先下載源碼:jvm
git clone --recursive https://github.com/mgodave/Jpcap.git學習
編譯:ui
在./Jpcap/src/main/c中,執行spa
make
將編譯獲得的文件放到可尋址的路徑:
將生成的libjpcap.so文件拷貝到 $JAVA_HOME/jre/lib/<arch>目錄下。
注:arch對應計算機架構,如i386,amd64,sparc等
$JAVA_HOME對於Debian系列Linux通常指 /usr/lib/jvm/default-java 目錄
若是是Java 6版本,則將libjpcap.so拷到 /usr/java/packages/lib/exf中。
將 ./Jpcap/lib/jpcap.jar 拷到 $JAVA_HOME/lib/目錄下。
最後須要保證$JAVA_HOME/lib、$JAVA_HOME/jre/lib在CLASSPATH路徑中(通常配置java時候,都已添加。)
而後,順利的話,應該已經能夠編譯、運行有調用jpcap庫的java程序了。
運行中可能會遇到的錯誤:
libpcap.so.1 cannot open shared object file no such file or directory
對於這個問題,咱們能夠發現 libpcap.so.1文件就在/usr/local/lib目錄下,然而程序在執行libjpcap.so中調用libpcap的代碼是沒法找到該文件,這裏咱們須要手動添加其到 /etc/ld.so.conf 中。
在 ld.so.conf, 添加兩行:
/usr/local/lib
/usr/lib
而後執行:
ldconfig
這時再運行程序應該不會出現該錯誤了。
couldn't find default device: no suitable device found
緣由:沒有以root身份運行。
2、Windows下安裝及配置Jpcap
前置條件,確保安裝有winpcap。
有兩種方式:
第一種
運行JpcaSetup-0.7.exe (Binary installer),一路next,最後選擇Jpcap.dll 和 jpcap.jar 的安裝位置,通常狀況下,Jpcap.dll 安裝在 C:\Windows\System32 目錄下, jpcap.jar 安裝在 C:\Windows\Sun\Java\lib\ext 目錄下。
而後爲了方便Java程序中的調用,咱們還須要將Jpcap.dll 複製到 jre 路徑下的 bin 文件夾下, 將 jpcap.jar 複製到 jre路徑下的 lib\ext 文件夾下。
第二種
直接下載jpcap包,有兩個文件,分別是jpcap.dll和jpcap.jar,這兩個文件分別放到JAVA安裝路徑/jre1.6.0_06/bin和JAVA安裝路徑/jre1.6.0_06/lib/ext下。這種方法注意可能須要本身配置程序的java.library.path.
最後,在你的IDE中導入外部jar。
運行中可能會遇到的錯誤:
no dependence libray
緣由:頗有可能沒有安裝winpcap
java.lang.UnsatisfiedLinkError:no jpcap in java.library.path
緣由:java在library path 中找不到 jpcap.dll
解決:把jpcap.dll複製到system32
或者是在run配置里加入-Djava.library.path=(jpcap.dll所放置的地方)
記錄一下,以防未來忘記。
以上。
參考:http://blog.csdn.net/pdcxs007/article/details/48691009
http://blog.csdn.net/loverooney/article/details/38543191
http://ohyeahbbs.blog.51cto.com/1775490/592573
http://www.bianceng.cn/Programming/Java/200705/1834.htm