安装配置Jpcap,使用jpcap抓包

来源:互联网 发布:7z解压软件 linux 编辑:程序博客网 时间:2024/04/28 15:52

由于网络课程的原因,要完成使用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 :这个类描述了IPv4IPv6地址,其中也包含了将IP地址转换为域名的方法

IPPacket :这个类描述了IP包,继承了Packet类,支持IPv4IPv6

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("----------------------------------------------");}}}}



0 0
原创粉丝点击