首頁 > 美食
java利用Jpcap實現抓包
由 Hacker歲月 發表于 美食2023-01-28
簡介}public static void main(String[] args){獲得網絡卡裝置列表NetworkInterface[] devices = JpcapCaptor
什麼是java抓包
## Jpcap簡介和環境搭建
Jpcap是一個可以監控當前網路情況的中介軟體,彌補了java對網路層以下的控制,
可以達到抓包的效果。
Jpcap執行需要依賴winCap和Jpcap的dll動態庫和Jpcap。jar包。
獲取winCap和Jpcap安裝包
docs。qq。com/doc/DUE9lT2l2SHB2b3pG
一 一安裝後
jdk–>bin目錄會多了一個Jpcap。dll
jre–>bin目錄會多了一個Jpcap。dll
jre–>lib–>ext會多一個Jpcap的jar包
## 常用類
* JpcapHandler :這個介面用來定義分析被捕獲資料包的方法
* ARPPacket :這個類描述了ARP/RARP包,繼承了Packet類
* DatalinkPacket :這個抽象類描述了資料鏈路層
* EthernetPacket :這個類描述了以太幀包,繼承DatalinkPacket類
* ICMPPacket :這個類描述了ICMP包,繼承了IPPacket類
* IPAddress :這個類描述了IPv4和IPv6地址,其中也包含了將IP地址轉換為域名的方法
* IPPacket :這個類描述了IP包,繼承了Packet類,支援IPv4和IPv6
* IPv6Option :這個類描述了IPv6選項報頭
* Jpcap :用來捕獲資料包
* Jpcap。JpcapInfo :Jpcap的內部類, 它包含被捕獲資料包的資訊(在jpcap0。4修改部分BUG之後不再使用這個類)
* JpcapSender :它用來發送一個數據包
* JpcapWriter :它用來將一個被捕獲的資料包儲存到檔案
* Packet :這個類是所有被捕獲的資料包的基類
* TCPPacket :這個類描述TCP包,繼承了IPPacket類
* UDPPacket :這個類描述了UDP包,繼承了IPPacket類
## 常用api
## Jpcap實現抓包demo
```java
import java。io。IOException;
import java。util。Scanner;
import jpcap。JpcapCaptor;
import jpcap。NetworkInterface;
import jpcap。NetworkInterfaceAddress;
import jpcap。PacketReceiver;
import jpcap。packet。Packet;
/**
* Jpcat實現抓包
*/
public class NetCapture implements PacketReceiver{
@Override
public void receivePacket(Packet arg0) {
System。out。println(arg0);
}
public static void main(String[] args){
//獲得網絡卡裝置列表
NetworkInterface[] devices = JpcapCaptor。getDeviceList();
if(devices。length==0){
System。out。println(“無網絡卡資訊!”);
return;
}
//輸出網絡卡資訊
for(int i=0;i System。out。println(“網絡卡”+i+“資訊:”+devices[i]。name); for(NetworkInterfaceAddress address:devices[i]。addresses){ System。out。print(address。address+“ ”); } System。out。println(“\n”); } Scanner scan = new Scanner(System。in); System。out。println(“請選擇您要監聽的網絡卡序號:”); int index = scan。nextInt(); //監聽選中的網絡卡 try { JpcapCaptor jpcapCaptor = JpcapCaptor。openDevice(devices[index], 2000, false, 20); jpcapCaptor。loopPacket(-1, new NetFetcher()); } catch (IOException e) { // TODO Auto-generated catch block e。printStackTrace(); } } } ```