jpcap.docx
- 文档编号:8381024
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:44
- 大小:176.43KB
jpcap.docx
《jpcap.docx》由会员分享,可在线阅读,更多相关《jpcap.docx(44页珍藏版)》请在冰豆网上搜索。
jpcap
贵州大学
2002级硕士研究生学年报告
基于JPcap的网络流量分析
研究与应用
学科专业计算机软件与理论
研究方向计算机软件
导师李祥教授
研究生赵新辉
中国贵州贵阳
2003年6月
目录
摘要
第一章网络数据包捕获工具Jpcap
1.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
第一章网络数据包捕获工具Jpcap
1.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研制发布的,其主页为http:
//netresearch.ics.uci.edu/kfujii/。
其最初版本是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(http:
//java.sun
.com)
安装最新版本的LibPcap(对于UNIX平台,http:
//ee.lbl.gov/)或者WinPcap(对于Windows平台,http:
//winpcap.polito.it/)
下载并解压缩Jpcap的最新版本(http:
//netresearch.ics.uci.edu/kfujii/jpcap
/doc/index.html)
1.3JPCAP的安装
(A)Windows9x,NT,2000
1)复制"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)UNIX
1)在解压缩的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/
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.Object
EthernetPacket:
这个类描述了以太帧包,继承DatalinkPacket类
ICMPPacket:
这个类描述了ICMP包,继承了IPPacket类
IPAddress:
继承了java.lang.Object,这个类描述了IPv4和IPv6地址,其中也包含了将IP地址转换为域名的方法
IPPacket:
这个类描述了IP包,继承了Packet类,支持IPv4和IPv6
IPv6Option:
它继承了java.lang.Object,这个类描述了IPv6选项报头
Jpcap:
它用来捕获数据包,继承了java.lang.Object
Jpcap.JpcapInfo:
Jpcap的内部类,它包含被捕获数据包的信息(在jpcap0.4修改部分BUG之后不再使用这个类)
JpcapSender:
它用来发送一个数据包,继承了java.lang.Object
JpcapWriter:
它用来将一个被捕获的数据包保存到文件,继承了java.lang.Object
Packet:
这个类是所有被捕获的数据包的基类,继承了java.lang.Object
TCPPacket:
这个类描述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:
657299
1051601819:
657586
1051601820:
299898
1051601820:
323588
ARPREQUEST00:
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使用EthernetPacket类
EthernetPacket类继承了DatalinkPacket类,如下所示层次图。
它描述了以太帧。
java.lang.Object
|
+-jpcap.DatalinkPacket
|
+-jpcap.EthernetPacket
它从java.lang.Object继承了以下方法:
clone,equals,finalize,getClass,hashCode,notify,notifyAll,wait,wait,wait。
可以在表3.1中找到EthernetPacket类的数据成员,在表3.2中找到该类的构造函数,在表3.3中找到该类的成员函数。
表3.1EthernetPacket类的数据成员
数据成员
功能
Byte[]dst_mac
目的MAC地址(6byte)
Byte[]src_mac
源MAC地址(6byte)
shortframetype
帧类型
表3.2EthernetPacket类的构造函数
构造函数
功能
EthernetPacket()
构造一个空的EthernetPacket对象
表3.3EthernetPacket类的成员函数
成员函数
功能
StringgetSourceAddress()
得到源MAC地址
StringgetDestinationAddress()
得到目的MAC地址
StringtoString()
返回一个描述以太帧的字符串
看以下范例J-02,示例EthernetPacket类。
捕获到以太帧,自动调用handlePacket方法分析数据包。
使用EthernetPacket类的getSourceAddress()和getDestinationAddress()方法,可以分别获得源MAC地址和目的MAC地址。
如果直接调用System.out.println(pack),程序会自动调用类的toString()方法,返回描述以太帧的字符串,其格式为:
超类信息源MAC地址->目的MAC地址(帧类型)。
帧类型字段是以十进制表示,例如10进制2048对应于16进制的0800H,即表示此数据包是IP数据包。
运行结果效果如下:
…………
源MAC:
00:
51:
fc:
00:
7d:
86->目的MAC:
00:
d0:
f8:
0d:
7c:
87
源MAC:
[B@22c95b->目的MAC:
[B@1d1acd3
帧类型:
2048
源MAC:
00:
80:
2d:
5f:
be:
86->目的MAC:
ff:
ff:
ff:
ff:
ff:
ff
源MAC:
[B@1503a3->目的MAC:
[B@1a1c887
帧类型:
2054
源MAC:
00:
80:
2d:
5f:
be:
81->目的MAC:
ff:
ff:
ff:
ff:
ff:
ff
源MAC:
[B@743399->目的MAC:
[B@e7b241
帧类型:
-32512
…………
2.4使用IPAddress类(部分native方法不可使用)
IPAddress类继承了java.lang.Object类,如下所示层次图,它描述了IP地址。
它支持IPv4和IPv6地址规范,同时也包含了从IP地址转换为域名和从域名转换为IP地址的方法。
java.lang.Object
|
+-jpcap.IPAddress
它从java.lang.Object继承了以下方法:
clone,finalize,getClass,notify,notifyAll,wait,wait,wait。
可以在表4.1中找到IPAddress类的构造函数,在表4.2中找到该类的成员函数。
表4.1IPAddress类的构造函数
构造函数
功能
IPAddress(intversion,Stringaddress)
在指定的IP版本号下,由给定的IP地址或域名,构造一个IPAddress对象
IPAddress(Stringaddress)
由指定的IP地址或域名,构造一个基于IPV4的IPAddress对象
IPAddress(intversion,byte[]address)
在指定的IP版本号下,由给定的byte数组所描述的IP地址,构造一个IPAddress对象
IPAddress(byte[]address)
由给定的byte数组构造基于IPV4的IPAddress对象
注:
1给定的是IP地址或域名时若IP地址或域名不合法时,程序会抛出一个.UnknownHostException异常。
2给定的时byte数组时程序不会检查IP地址是否合法。
表4.2IPAddress类的成员函数
成员函数
功能
byte[]getAddress()
以一个byte数组返回IP地址
StringgetHostAddress()
返回描述IP地址的字符串,格式为("%d.%d.%d.%d"或"%x:
%x:
:
%x:
%x")
StringgetHostName()
返回IP地址的域名,当域名没有被找到,抛出一个UnknownHostException异常
InetAddressgetInetAddress()
当IP版本是IPV4时,返回一个InetAddress类的实例;当IP版本是IPV6时,返回NULL
booleanequals(Objectp)
比较当前实例是否与给定对象等同
staticvoidsetAddressConvert(Boolean
isDomainName)
指定采用哪种表示方法。
参数isDomainName,为true时采用域名表示;为false时采用IP地址表示
StringtoString()
返回一个描述本IP地址的字符串
inthashCode()
返回本IP地址的hash编码
看以下范例J-03,示例IPAddress类。
由hotmail网站的域名构造一个IPAddress对象,以它的IP地址表示形式打印出来。
运行结果如下:
IP地址表示:
207.68.173.245
2.5使用IPv6Option类
IPv6Option类继承了java.lang.Object类,如下所示层次图,它描述了IPv6的选项报头。
java.lang.Object
|
+-jpcap.IPv6Option
它从java.lang.Object继承了以下方法:
clone,equals,finalize,getClass,hashCode,notify,notifyAll,toString,wait,wait,wait。
可以在表5.1中找到IPAddress类的构造函数,在表5.2中找到该类的数据成员。
表5.1IPAddress类的构造函数
构造函数
功能
IPv6Option()
表5.2IPAddress类的数据成员
数据成员
功能
IPAddress[]addrs
路由地址(路由选项)
staticfinalbyteAH_OPTION=51
身份验证选项
staticfinalbyte
DESTINATION_OPTION=60
目标选项
staticfinalbyteESP_OPTION=50
封装安全有效数据
staticfinalbyte
FRAGMENT_OPTION=44
分段选项
bytehlen
报头长度
staticfinalbyte
HOP_BY_HOP_OPTION=0
逐个路程段选项
bytehop_left
段剩余(路由选项)
intidentification
身份字段(分段选项)
booleanm_flag
M标志(分段选项)
bytenext_header
下一个报头
staticfinalbyteNONE_OPTION=59
无下一个报头
shortoffset
分段偏置(分段选项)
byte[]option
报头选项
staticfinalbyteROUTING_OPTION=43
路由选项
byterouting_type
路由类型(路由选项)
intsequence
验证数据(身份验证选项)
intspi
安全参数索引(身份验证选项)
bytetype
类型
IPv4的报头为一些可选字段留出了空间,这些字段用来为信息包的特殊处理提出要求。
这些可选字段并不经常使用,由于它们出现时必须对每个信息包进行检查,所以这些字段会严重地降低路由器的性能。
IPv6使用扩展报头代替可选字段。
因为大多数信息包只需简单地处理,因此IPv6报头的基本字段就足够了,在网络层需要额外信息的信息包可以把这些信息编码到扩展报头,每个扩展报头的长度按位说是64的整数倍。
由于IPv6Option类仅仅描述了IPv6的Options,在IPPPacket类中,会分离Ipv4和IPv6的数据包,在IPv6的数据包中,将会分类显示IPV6的Options。
2.6使用Jpcap类(部分Native方法不可使用)
Jpcap类继承了java.lang.Object类,如下所示层次图。
Jpcap类用来捕获数据包。
java.lang.Object
|
+-jpcap.Jpcap
它从java.lang.Object继承了以下方法:
clone,equals,finalize,getClass,hashCode,notify,notifyAll,toString,wait,wait,wait。
可以在表6.1中找到Jpcap类的数据成员,在表6.2中找到该类的构造函数,在表6.3中找到该类的成员函数。
表6.1Jpcap类的数据成员
数据成员
功能
intreceived_packets
捕获到的数据包的数量
intdropped_packets
丢弃的数据包的数量
表6.2Jpcap类的构造函数
构造函数
功能
Jpcap()
表6.3Jpcap类的成员函数
成员函数
功能
nativevoidclose()
关闭已经打开的dump文件的接口
staticnativeString[]
getDeviceDescription()
返回对接口的描述(仅用于Windows系统)(注1)
staticna
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- jpcap