眾所周知,Java雖然在TCP/UDP傳輸方面給予了良好的定義,但是標准庫java.net對於網絡層以下的控制是無能為力的。Jpcap就是為了處理這一問題而出現的中間件。它調用底層的winpcap/libpcap來實現對數據鏈路層的控制,並給Java語言提供一個公共的接口,從而實現了平台無關性。
本文不涉及到介紹Jpcap的應用,只是簡單地記錄一下在Ubuntu & Windows 下安裝及配置Jpcap的過程。
學習Jpcap的使用,請轉到 jpcap入門指南
一、Ubuntu下配置過程
前置條件,確保安裝有build-essential 和 libpcap包
build-essential 可以直接用 apt-get 安裝。而libpcap則不可以,我參考的這一博客Ubuntu 14.04下安裝libpcap
下面開始安裝Jpcap,首先下載源碼:
git clone --recursive https://github.com/mgodave/Jpcap.git
編譯:
在./Jpcap/src/main/c中,執行
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身份運行。
二、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
http://www.cnblogs.com/acmy/archive/2012/02/04/2337955.html
http://blog.csdn.net/fykhlp/article/details/6159195