概述
由于网络课程的原因,要完成使用jpcap抓包的实验,所以学习了一下jpcap的相关包导入配置的问题。写下来免得自己忘记了。
首先得要有java编译环境,也就是jdk什么的,就不赘述了。我这里是用的Eclipse进行这个实验。
其次需要安装Winpcap,Winpcap是windows平台下的一个免费的,公共的网络访问系统(Linux系统是Libpcap),Jpcap就是调用Winpcap给java提供一个公共的接口,从而实现平台无关性,并能够捕获发送数据包。Winpcap在这里下载:Winpcap下载地址
之后我们还需要下载Jpcap,Jpcap包括Jpcap.jar和Jpcap.dll,两者需要版本一致,并且区分32位和64位。将Jpcap.jar导入你的Eclipse项目,并且把Jpcap.dll复制到java的jdk的bin目录下,就ok了。
一切都准备好了之后,我们就可以使用Jpcap编程进行ip数据包的捕获了。
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类
以抓取ip数据包为例,JPCAP抓包基本步骤为:绑定网络设备、抓包、分析。
import java.io.IOException;
import jpcap.*;
import jpcap.packet.IPPacket;
import jpcap.packet.Packet;
public class JpcapPacket {
public static void main(String[] args)
{
/*-------------- 第一步绑定网络设备 --------------*/
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
for(NetworkInterface n : devices)
{
System.out.println(n.name + " | " + n.description);
}
System.out.println("-------------------------------------------");
JpcapCaptor jpcap = null;
int caplen = 1512;
boolean promiscCheck = true;
try{
jpcap = JpcapCaptor.openDevice(devices[1], caplen, promiscCheck, 50);
}catch(IOException e)
{
e.printStackTrace();
}
/*----------第二步抓包-----------------*/
int i = 0;
while(i < 10)
{
Packet packet = jpcap.getPacket();
if(packet instanceof IPPacket && ((IPPacket)packet).version == 4)
{
i++;
IPPacket ip = (IPPacket)packet;//强转
System.out.println("版本:IPv4");
System.out.println("优先权:" + ip.priority);
System.out.println("区分服务:最大的吞吐量: " + ip.t_flag);
System.out.println("区分服务:最高的可靠性:" + ip.r_flag);
System.out.println("长度:" + ip.length);
System.out.println("标识:" + ip.ident);
System.out.println("DF:Don't Fragment: " + ip.dont_frag);
System.out.println("NF:Nore Fragment: " + ip.more_frag);
System.out.println("片偏移:" + ip.offset);
System.out.println("生存时间:"+ ip.hop_limit);
String protocol ="";
switch(new Integer(ip.protocol))
{
case 1:protocol = "ICMP";break;
case 2:protocol = "IGMP";break;
case 6:protocol = "TCP";break;
case 8:protocol = "EGP";break;
case 9:protocol = "IGP";break;
case 17:protocol = "UDP";break;
case 41:protocol = "IPv6";break;
case 89:protocol = "OSPF";break;
default : break;
}
System.out.println("协议:" + protocol);
System.out.println("源IP " + ip.src_ip.getHostAddress());
System.out.println("目的IP " + ip.dst_ip.getHostAddress());
System.out.println("源主机名: " + ip.src_ip);
System.out.println("目的主机名: " + ip.dst_ip);
System.out.println("----------------------------------------------");
}
}
}
}
最后
以上就是紧张向日葵为你收集整理的安装配置Jpcap,使用jpcap抓包的全部内容,希望文章能够帮你解决安装配置Jpcap,使用jpcap抓包所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复