贵州大学2002级硕士研究生学年报告基于JPcap的网络流量分析研究与应用学科专业计算机软件与理论研究方向计算机软件导师李祥教授研究生赵新辉中国贵州贵阳2003年6月目录摘要第一章网络数据包捕获工具Jpcap1.1Jpcap简介1.2Jpcap需求环境1.3Jpcap的安装1.4Jpcap类库的结构第二章Jpcap类库的分析与应用2.1使用JpcapHandler接口2.2使用DatalinkPacket类2.3使用EthernetPacket类2.4使用IPAddress类2.5使用IPv6Option类2.6使用Jpcap类2.7使用Jpcap.JpcapInfo类2.8使用JpcapSender类2.9使用JpcapWriter类2.10使用Packet类2.11使用ARPPacket类2.12使用IPPacket类2.13使用ICMPPacket类2.14使用TCPPacket类2.15使用UDPPacket类第三章Jpcap在流量分析中的应用3.1流量分析的研究概况3.1.1流量分析概况3.1.2国内研究状况3.1.3网络流量自相似分析3.2利用Jpcap实现网络流量图示分析3.3利用Jpcap实现网络Ethereal工具参考文献摘要论文从JPcap的产生、发展到目前的最新版本,针对Jpcap0.4版本,对类库中一个类做了必要的分析说明,列出了每个类的继承关系、数据成员、构造函数和成员函数,并对其的功能做了简要地说明。针对类的功能,为每个类设计了一个Java程序,用实例说明该类的使用方法。最后使用Jpcap类库设计了一个程序,实现了对局域网内用户上网的口令密码的监听,并做了实际的测试。Jpcap是日本人KeitaFujiiy开发的一套能够捕获、发送网络数据包的java类库。这个包用到了libpcap和原始套接字API,Jpcap在FreeBSD3.x,LinuxRedHat6.1,Solaris,andMicrosoftWindows2000/XP等系统上经过测试,并且支持Ethernet,IPv4,IPv6,ARP/RARP,TCP,UDP,ICMPv4协议。其最初版本是2000.6发布的Jpcap0.1版,此后几经修改,到2003.4发布了发布Jpcap0.4版。Jpcap0.4版本共有1个接口14个类。针对每个类的不同,文中阐述了每一个类的每一个数据成员和成员函数,并根据其所要实现的不同功能,为每个类设计了一个Java实例程序,做进一步说明。并结合实际,利用Jpcap的工作原理与模式,结合流量分析原理,设计并实现网络流量图示分析工具和网络Ethereal工具。对网络流量的测量为网络研究和网络管理提供了重要的数据。定期地对网络流量进行分析和调整,是及时了解当前网络性能,避免停运和提供发现早期问题的重要步骤。通过网络流量分析及优化测试,可以及时获得各网段及关键网络设备的使用情况。对网络流量研究重点在于通过分析实际环境中网络流量数据的特性,抽取其中对网络性能有深刻影响的因素并建立相应的网络流量模型。对自相似理论的研究,开拓了对流量分析理论全新的研究领域。分析流量的特征,目前建模可以利用以下理论:(1)小波分析(DiscreteWaveletTransform)和分形理论(2)分形和多重分形(Multifractal)模型并且重点分析了网络数据传输的自相似理论,阐述了自相似性的原理,产生自相似性的原因,并以实例说明了网络传输当中的自相似性。设计的网络流量分析图示工具和网络Ethereal工具在Win2000下运行效果良好。关键词:Jpcap,Libpcap,Winpcap,以太帧,TCP协议,IP协议,UDP协议,ARP协议中图分类号:TP393第一章网络数据包捕获工具Jpcap1.1JPCAP简介Jpcap是一个能够捕获、发送网络数据包的java类库包。这个包用到了Libpcap和原始套接字API,目前,Jpcap在FreeBSD3.x,LinuxRedHat6.1,Solaris,andMicrosoftWindows2000/XP系统上已经做过测试,并且支持Ethernet,IPv4,IPv6,ARP/RARP,TCP,UDP,ICMPv4协议。Jpcap是由在美国加利福尼亚大学Irvine分校(UCI)攻读博士学位的日本人KeitaFujiiy研制发布的,其主页为。其最初版本是2000.6发布的Jpcap0.1版,此后几经修改,到2003.4发布了发布Jpcap0.4版。主要发展如下:2000.6.25Jpcap0.1版发布2000.7.29Jpcap0.2版发布。开始支持MicrosoftWindows操作系统(包括Win9x,Win2000和WinNT)。2000.9.14发布Jpcap0.3版本,添加了ARPPacket类,开始支持ARP/ReverseARP数据包的捕获。2003.4.1发布Jpcap0.4版本。1.2JPCAP的需求环境安装Java2工作平台(java2RuntimeEnvironment)或者SDK()安装最新版本的LibPcap(对于UNIX平台,)或者WinPcap(对于Windows平台,)下载并解压缩Jpcap的最新版本()1.3JPCAP的安装(A)Windows9x,NT,20001)复制"lib\Jpcap.dll"到"[JREdirectory]\bin"或"[JREdirectory]\lib\ext\x86"。2)复制"lib\jpcap.jar"到"[JREdirectory]\lib\ext"。3)如果安装了SDK,还需要拷贝"lib\jpcap.jar"到"[SDKdirectory]\jre\lib\ext"。其中[JREdirectory]是指JRE默认安装路径,一般来说是C:\ProgramFiles\Java\j2re*;[SDKdirectory]是指SDK的默认安装路径,一般来说是C:\j2sdk*。打开JBuilder8的工程,选"Tools/ConfigureJDKs/Add"将\lib中的文件jpcap.jar加入。将\sample\tcpdump.java加入,即可编译运行。注意:在Windows下,Jpcap.dll和jpcap.jar两个文件需要放置的位置与您所安装JRE中设置的"homepath"有极大的联系。其中,Jpcap.dll文件必须放在您设置的"homepath"的子目录中的bin文件夹中,jpcap.jar文件放的位置较为任意,一般是放到lib文件夹中,理论上可以放到任意地方,但是必须在jdksetting中加入该类库包的完整路径。(B)UNIX1)在解压缩的Jpcap文件夹中,进入src/c目录,编辑Makefile文件,根据你安装的操作系统的类型修改编辑选项。2)也许你必须修改Jpcap_sub.h文件,以使其可以支持IPV6。3)运行make,产生libjpcap.so文件。如果你看到错误信息:structurehasnomembernamesa_len...,则在Jpcap_sub.h中屏蔽#defineHAVE_SA_LEN这一行。4)拷贝文件libjpcap.so到java安装目录/jre/lib/arch.arch是"i386"或"sparc"(或者设置LD_LIBRARY_PATH包括libjpcap.so存在的路径)。5)拷贝文件lib/jpcap.jar到扩展目录下,比如:…/jre/lib/ext(或者设置CLASSPATH包括jpcap.jar文件)。1.4JPCAP的类库结构Jpcap0.4版本共有1个接口14个类,分别简介如下:1、接口综述JpcapHandler:这个接口用来定义分析被捕获数据包的方法2、类综述ARPPacket:这个类描述了ARP/RARP包,继承了Packet类DatalinkPacket:这个抽象类描述了数据链路层的包,它继承了java.lang.ObjectEthernetPacket:这个类描述了以太帧包,继承DatalinkPacket类ICMPPacket:这个类描述了ICMP包,继承了IPPacket类IPAddress:继承了java.lang.Object,这个类描述了IPv4和IPv6地址,其中也包含了将IP地址转换为域名的方法IPPacket:这个类描述了IP包,继承了Packet类,支持IPv4和IPv6IPv6Option:它继承了java.lang.Object,这个类描述了IPv6选项报头Jpcap:它用来捕获数据包,继承了java.lang.ObjectJpcap.JpcapInfo:Jpcap的内部类,它包含被捕获数据包的信息(在jpcap0.4修改部分BUG之后不再使用这个类)JpcapSender:它用来发送一个数据包,继承了java.lang.ObjectJpcapWriter:它用来将一个被捕获的数据包保存到文件,继承了java.lang.ObjectPacket:这个类是所有被捕获的数据包的基类,继承了java.lang.ObjectTCPPacket:这个类描述TCP包,继承了IPPacket类UDPPacket:这个类描述了UDP包,继承了IPPacket类第二章Jpcap类库分析与使用2.1使用JpcapHandler接口JpcapHandler接口是用来定义一个分析被捕获数据包的方法。这个方法用在Jpcap.loopPacket()或者Jpcap.processPacket()中。可以在表1.1中查找该接口的成员函数。表1.1JpcapHandler接口的成员函数成员函数功能voidhandlePacket(Packetp)当捕获到一个包时被自动调用来分析该数据包;参数p是被分析的数据包先看以下例子J-01,示例JpcapHandler接口,jpcaphandler类实现了JpcapHandler接口,当捕获到一个包时,JpcapHandler接口的方法handlePacket被自动调用来分析数据包。运行结果如下:…………ARPREQUEST00:80:2d:5f:be:86(210.40.7.129)-00:00:00:00:00:00(210.40.7.187)ARPREQUEST00:80:2d:5f:be:86(210.40.7.129)-00:00:00:00:00:00(210.40.7.186)1051601819:6572991051601819:6575861051601820:2998981051601820:323588ARPREQUEST00:80:2d:5f:be:86(210.40.7.129)-00:00:00:00:00:00(210.40.7.170)…………2.2使用DatalinkPacket类DatalinkPacket类是抽象类,它继承于java.lang.Object类,如下所示层次图,其子类是EthernetPacket类。这个类主要描述了数据链路层的数据包。java.lang.Object|+-jpcap.DatalinkPacket它从java.lang.Object继承了以下方法:clone,equals,finalize,getClass,hashCode,notify,notifyAll,toString,wait,wait,wait。可以在表2.1中查找DatalinkPacket类的构造函数。表2.1DatalinkPacket类的构造函数构造函数功能DatalinkPacket()2.3使用EthernetPacke