实验报告实验名称基于JPcap的数据包捕获器课程名称计算机网络原理与技术姓名李辉成绩班级软件0806学号3901080608日期2010.4地点电子楼四楼实验室备注:小组合作实验,组员:李辉、黄钰1.实验目的基于java第三方包JPcap编写数据包捕获器,该捕获器具有以下功能:a)监听并捕获以太网帧b)分析IP数据报c)分析ARP/RARPd)分析TCP、UDP数据报e)分析ICMP报文f)分析HTTP报文g)简单的网络流量分析功能2.实验环境(软件、硬件及条件)1)Jpcap和Wincap简介Jpcap是一个能够捕获、发送网络数据包的java类库包。
这个包用到了Libpcap/Winpcap和原始套接字API,目前,Jpcap在FreeBSD 3.x, Linux RedHat 6.1, Solaris, and Microsoft Windows 2000/XP 系统上已经做过测试,并且支持Ethernet, IPv4, IPv6, ARP/RARP, TCP, UDP, ICMPv4协议。
Jpcap是由在美国加利福尼亚大学Irvine 分校(UCI)攻读博士学位的日本人Keita Fujiiy研制发布的,其主页为/kfujii/ 。
其最初版本是2000.6发布的Jpcap0.1版,此后几经修改,到2003.4发布了发布Jpcap0.4版。
JAVA语言虽然在TCP/UDP传输方面给予了良好的定义,但对于网络层以下的控制,却是无能为力的。
JPCAP扩展包弥补了这一点。
JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用wincap/libpcap,给JAVA语言提供一个公共的接口,从而实现了平台无关性,并能够捕获、发送网络数据包。
Winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。
开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。
2)编程环境要求i.安装Java SDK()ii.安装最新版本的LibPcap(对于UNIX平台,/) 或者WinPcap (对于Windows平台,http://winpcap.polito.it/)iii.下载并解压缩Jpcap的最新版本(/kfujii/jpcap/doc/index.html )。
iv.以Window XP系统为例,具体准备工作如下:1.复制Jpcap.dll到C:\WINDOWS\system322.安装winpcap4.0.23.在工程中导入 jpcap.jar3.实验方法Jpcap0.4版本共有1个分析器接口14个分析器类,分别简介如下:1、接口综述JpcapHandler :这个接口用来定义分析被捕获数据包的方法2、类综述ARPPacket :这个类描述了ARP/RARP包,继承了Packet类DatalinkPacket :这个抽象类描述了数据链路层EthernetPacket :这个类描述了以太帧包,继承DatalinkPacket类ICMPPacket :这个类描述了ICMP包,继承了IPPacket类IPAddress :这个类描述了IPv4和IPv6地址,其中也包含了将IP·地址转换为域名的方法IPPacket :这个类描述了IP包,继承了Packet类,支持IPv4和IPv6IPv6Option :这个类描述了IPv6选项报头Jpcap :用来捕获数据包Jpcap.JpcapInfo :Jpcap的内部类,它包含被捕获数据包的信息(在jpcap0.4修改部分BUG之后不再使用这个类)JpcapSender :它用来发送一个数据包JpcapWriter :它用来将一个被捕获的数据包保存到文件Packet :这个类是所有被捕获的数据包的基类TCPPacket :这个类描述TCP包,继承了IPPacket类UDPPacket :这个类描述了UDP包,继承了IPPacket类具体api帮助文档见附录。
4.实验分析以下以抓取ip数据包为例讲解抓包基本步骤:1.绑定网络设备2.抓包3.分析以下代码见Test工程import java.io.IOException;import jpcap.JpcapCaptor;import workInterface;import jpcap.packet.IPPacket;import jpcap.packet.Packet;/***ip数据包捕获演示例子*@author李辉**/public class IPPacketTest {public static void main(String[] args) {/*-------------第一步绑定网络设备--------------------*/NetworkInterface[] devices=JpcapCaptor.getDeviceList(); //返回一个网络设备列表for(NetworkInterface n : devices)System.out.println( + " | " + n.description );System.out.println("------------------------------------");JpcapCaptor jpcap=null;int caplen = 1512;boolean promiscCheck = true;//caplen限制每一次收到一个数据包,只提取该数据包中前多少字节//Promisc:设置是否混杂模式。
处于混杂模式将接收所有数据包,若之后又调用了包过滤函数setFilter()将不起任何作用//50这个参数主要用于processPacket()方法,指定超时的时间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; //将包强制转为IP包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("MF:More Fragment:" + ip.more_frag); System.out.println("片偏移:" + ip.offset);System.out.println("生存时间:" + ip.hop_limit);String protocol = null;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("------------------------------------");}}}}其他抓包过程类似,已经能够抓取的数据包:详细程序代码见附录PacketCapure工程5.实验结论数据包捕获器界面6.参考资料1.贵州大学2002级硕士研究生学年报告《基于JPcap的网络流量分析研究与应用》李祥赵新辉2.JpcapDumper ver.0.3 Keita Fujiiy7.附件1. 代码文件夹下有Test工程和PacketCapure工程,其中PacketCapure即为本实验所做的捕获器,Test为原理演示工程。
2. API文件夹下是帮助文件3. 所需第三方类库文件夹下是所需的第三方类库4. 参考资料文件夹下有《基于JPcap的网络流量分析研究与应用》和JpcapDumper ver.0.35.根目录下有本实验报告电子版和演示ppt。