擷取MAC資訊在JAVA中目前似乎不好辦。
不過我看到了一個java庫,感覺挺不錯。先寫上吧,誰研究了給我留個言,互相促進進步麼;)
1)第三方JAVA庫。(試一試這個:http://netresearch.ics.uci.edu/kfujii/jpcap/doc/index.html。在JAVA中支援RAW Socket,問題就好辦了)
================
如果你想捕獲Java程式中的網路包,那麼你需要一些協助工具輔助,因為核心Java API不能訪問底層的網路資料。但Jpcap是一種提供在Windows或UNIX系統上進行這種訪問的Java API。
Jpcap不是一種純粹的Java解決方案;它依賴本地庫的使用。在Windows 或 UNIX上,你必須有必要的第三方庫,分別是WinPcap或libpcap。
Jpcap的工作原理
Jpcap使用一個事件模型來讓你處理包。首先你必須建立一個執行介面jpcap.JpcapHandler的類。
public class JpcapTip implements JpcapHandler {
public void handlePacket(Packet packet){
System.out.println(packet);
}
}
為了捕獲包,你需要告訴Jpcap你想用哪個網路裝置來監聽。API提供了jpcap.Jpcap.getDeviceList()方法以滿足這一目的。 這個方法返回一列字串,你可以象如下使用它:
String[] devices = Jpcap.getDeviceList();
一旦你有了一個裝置名稱的目錄,你必須選取一個用來監聽:
String deviceName = devices[0];
選擇一個裝置之後,通過Jpcap.openDevice()方法開啟它。openDevice()方法需要四個參數:即將開啟的裝置名稱,從裝置上 一次讀取的最大位元組數,說明是否將裝置設為混雜模式的Boolean值,和以後調用processPacket()方法要使用到的逾時值。
Jpcapjpcap = Jpcap.openDevice(deviceName, 1028, false, 10000);
openDevice ()方法將一個參數返回到用以捕獲的Jpcap對象。既然有了Jpcap執行個體,你可以調用processPacket() 或loopPacket()開始監聽了。這兩種方式都帶有兩個參數:捕獲的最大包數可以是-1(說明沒有限制);執行JpcapHandler的一個類的 執行個體。
如果你調用processPacket(),那麼Jpcap將一直捕獲包,直到超過openDevice中規定的時限或達到了規定的最大包數。loopPacket()則將一直捕獲包,直到達到最大包數,如果沒有最大數限制,它將永遠運行下去。就像下面這樣調用:
jpcap.loopPacket(-1, new JpcapTip());