Jpcap简介和环境搭建
Jpcap是一个可以监控当前网络情况的中间件,弥补了java对网络层以下的控制,
可以达到抓包的效果。
Jpcap运行需要依赖winCap和Jpcap的dll动态库和Jpcap.jar包。
获取winCap和Jpcap安装包
一 一安装后
jdk–>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
代码语言:javascript复制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<devices.length;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();
}
}
}