已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
贵 州 大 学2002级硕士研究生学年报告基于JPcap的网络流量分析研究与应用学科专业 计算机软件与理论研究方向 计算机软件导 师 李 祥 教授研 究 生 赵新辉中国 贵州 贵阳2003 年 6 月目 录摘 要第一章 网络数据包捕获工具Jpcap1.1 Jpcap简介1.2 Jpcap需求环境1.3 Jpcap的安装1.4 Jpcap类库的结构第二章 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的产生、发展到目前的最新版本,针对Jpcap 0.4版本,对类库中一个类做了必要的分析说明,列出了每个类的继承关系、数据成员、构造函数和成员函数,并对其的功能做了简要地说明。针对类的功能,为每个类设计了一个Java程序,用实例说明该类的使用方法。最后使用Jpcap类库设计了一个程序,实现了对局域网内用户上网的口令密码的监听,并做了实际的测试。Jpcap是日本人Keita Fujiiy开发的一套能够捕获、发送网络数据包的java类库。这个包用到了libpcap 和原始套接字API,Jpcap在FreeBSD 3.x, Linux RedHat 6.1, Solaris, and Microsoft Windows 2000/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) 小波分析(Discrete Wavelet Transform)和分形理论(2) 分形和多重分形(Multifractal)模型并且重点分析了网络数据传输的自相似理论,阐述了自相似性的原理,产生自相似性的原因,并以实例说明了网络传输当中的自相似性。设计的网络流量分析图示工具和网络Ethereal工具在Win2000下运行效果良好。关键词:Jpcap,Libpcap,Winpcap,以太帧,TCP协议, IP协议,UDP协议,ARP协议 中图分类号:TP393第一章 网络数据包捕获工具Jpcap1.1 JPCAP简介Jpcap是一个能够捕获、发送网络数据包的java类库包。这个包用到了Libpcap和原始套接字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版。主要发展如下:2000.6.25 Jpcap0.1版发布2000.7.29 Jpcap0.2版发布。开始支持Microsoft Windows操作系统 (包括Win 9x,Win2000和 WinNT)。2000.9.14 发布Jpcap0.3版本,添加了ARPPacket类,开始支持ARP/ Reverse ARP数据包的捕获。2003.4.1 发布Jpcap0.4版本。1.2 JPCAP的需求环境安装Java2工作平台(java2 Runtime Environment)或者SDK()安装最新版本的LibPcap(对于UNIX平台,/) 或者WinPcap (对于Windows平台,http:/winpcap.polito.it/)下载并解压缩Jpcap的最新版本(/kfujii/jpcap/doc/index.html )1.3 JPCAP的安装(A) Windows 9x,NT,20001) 复制libJpcap.dll到JRE directorybin或JRE directorylibextx86。2) 复制libjpcap.jar到JRE directorylibext。3) 如果安装了SDK,还需要拷贝libjpcap.jar到SDK directoryjrelibext。其中JRE directory是指JRE默认安装路径,一般来说是C:Program FilesJavaj2re*;SDK directory 是指SDK的默认安装路径,一般来说是C:j2sdk*。打开JBuilder8的工程,选Tools/Configure JDKs/ Add将lib中的文件jpcap.jar加入。将sampletcpdump.java 加入,即可编译运行。注意:在Windows下,Jpcap.dll和jpcap.jar两个文件需要放置的位置与您所安装JRE中设置的home path有极大的联系。其中,Jpcap.dll文件必须放在您设置的home path的子目录中的bin文件夹中,jpcap.jar文件放的位置较为任意,一般是放到lib文件夹中,理论上可以放到任意地方,但是必须在jdk setting中加入该类库包的完整路径。(B) UNIX1) 在解压缩的Jpcap文件夹中,进入src/c目录,编辑Makefile文件,根据你安装的操作系统的类型修改编辑选项。2) 也许你必须修改Jpcap_sub.h文件,以使其可以支持IPV6。3) 运行make,产生libjpcap.so文件。如果你看到错误信息:structure has no member name sa_len.,则在Jpcap_sub.h中屏蔽#define HAVE_SA_LEN这一行。4) 拷贝文件libjpcap.so到java安装目录/jre/lib/. 是i386或sparc(或者设置LD_LIBRARY_PATH包括libjpcap.so存在的路径)。5) 拷贝文件lib/jpcap.jar到扩展目录下,比如:/jre/lib/ext(或者设置CLASSPATH包括jpcap.jar文件)。1.4 JPCAP的类库结构 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()或者JcessPacket()中。可以在表1.1中查找该接口的成员函数。表 1.1 JpcapHandler接口的成员函数成员函数功能void handlePacket(Packet p)当捕获到一个包时被自动调用来分析该数据包;参数p是被分析的数据包先看以下例子J-01,示例JpcapHandler接口,jpcaphandler类实现了JpcapHandler接口,当捕获到一个包时,JpcapHandler接口的方法handlePacket被自动调用来分析数据包。运行结果如下: ARP REQUEST 00:80:2d:5f:be:86(29) - 00:00:00:00:00:00(87)ARP REQUEST 00:80:2d:5f:be:86(29) - 00:00:00:00:00:00(86)1051601819:6572991051601819:6575861051601820:2998981051601820:323588ARP REQUEST 00:80:2d:5f:be:86(29) - 00:00:00:00:00:00(70) 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.1 DatalinkPacket类的构造函数构造函数功能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.1 EthernetPacket类的数据成员数据成员功能Byte dst_mac目的MAC地址(6byte)Byte src_mac源MAC地址(6byte)short frametype帧类型表3.2 EthernetPacket类的构造函数构造函数功能EthernetPacket()构造一个空的EthernetPacket对象表3.3 EthernetPacket类的成员函数成员函数功能String getSourceAddress()得到源MAC地址String getDestinationAddress()得到目的MAC地址String toString()返回一个描述以太帧的字符串看以下范例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:B22c95b - 目的MAC:B1d1acd3帧类型:2048源MAC:00:80:2d:5f:be:86 - 目的MAC:ff:ff:ff:ff:ff:ff源MAC:B1503a3 - 目的MAC:B1a1c887帧类型:2054源MAC:00:80:2d:5f:be:81- 目的MAC:ff:ff:ff:ff:ff:ff源MAC:B743399 - 目的MAC:Be7b241帧类型:-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.1 IPAddress类的构造函数构造函数功能IPAddress(int version, String address)在指定的IP版本号下,由给定的IP地址或域名,构造一个IPAddress对象IPAddress(String address)由指定的IP地址或域名,构造一个基于IPV4的IPAddress对象IPAddress(int version,byte address)在指定的IP版本号下,由给定的byte数组所描述的IP地址,构造一个IPAddress对象IPAddress(byte address)由给定的byte数组构造基于IPV4的IPAddress对象注:1 给定的是IP地址或域名时 若IP地址或域名不合法时,程序会抛出一个.UnknownHostException异常。2 给定的时byte数组时 程序不会检查IP地址是否合法。表4.2 IPAddress类的成员函数成员函数功能byte getAddress()以一个byte数组返回IP地址String getHostAddress ()返回描述IP地址的字符串,格式为(%d.%d.%d.%d 或 %x:%x:%x:%x)String getHostName ()返回IP地址的域名,当域名没有被找到,抛出一个UnknownHostException异常InetAddress getInetAddress ()当IP版本是IPV4时,返回一个InetAddress类的实例;当IP版本是IPV6时,返回NULLboolean equals(Object p)比较当前实例是否与给定对象等同static void setAddressConvert(BooleanisDomainName)指定采用哪种表示方法。参数isDomainName,为true时采用域名表示;为false时采用IP地址表示String toString()返回一个描述本IP地址的字符串int hashCode()返回本IP地址的hash编码看以下范例J-03,示例IPAddress类。由hotmail网站的域名构造一个IPAddress对象,以它的IP地址表示形式打印出来。运行结果如下:IP地址表示:452.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.1 IPAddress类的构造函数构造函数功能IPv6Option()表5.2 IPAddress类的数据成员数据成员功能IPAddress addrs路由地址(路由选项)static final byte AH_OPTION=51身份验证选项static final byteDESTINATION_OPTION=60目标选项static final byte ESP_OPTION=50封装安全有效数据static final byteFRAGMENT_OPTION=44分段选项byte hlen报头长度static final byteHOP_BY_HOP_OPTION=0逐个路程段选项byte hop_left段剩余(路由选项)int identification身份字段(分段选项)boolean m_flagM标志(分段选项)byte next_header下一个报头static final byte NONE_OPTION=59无下一个报头short offset分段偏置(分段选项)byte option报头选项static final byte ROUTING_OPTION=43路由选项byte routing_type路由类型(路由选项)int sequence验证数据(身份验证选项)int spi安全参数索引(身份验证选项)byte type类型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.1 Jpcap类的数据成员数据成员功能int received_packets捕获到的数据包的数量int dropped_packets丢弃的数据包的数量表6.2 Jpcap类的构造函数构造函数功能Jpcap()表6.3 Jpcap类的成员函数成员函数功能native void close()关闭已经打开的dump文件的接口static native StringgetDeviceDescription()返回对接口的描述(仅用于Windows系统)(注 1)static native String getDeviceList()返回可以用来捕获包的接口的名字列表native String getErrorMessage()返回一个错误信息JpcapInfo getJpcapInfo()返回JpcapInfo类的实例,描述了捕获信息native Packet getPacket()返回一个捕获的数据包static native String lookupDevice()返回可以用来捕获包的接口的名字列表native int loopPacket(int count,JpcapHandler handler)连续地捕获数据包,返回捕获数据包的数量(注 2)static Jpcap openDevice(String device,int snaplen,boolean promisc ,int to_ms)初始化网络接口,并且返回Jpcap类的实例(注 3)static Jpcap openFile(String filename)打开由tcpdump或Ethereal创建的dump文件,并返回Jpcap的实例。打开错误抛出IO异常native int processPacket(int count,JpcapHandler handler)连续地捕获数据包,返回捕获数据包的数量(注 4)native void setFilter(String condition,boolean optimize)设置一个过滤器,和Tcpdump一样。condition是过滤条件描述,optimize为true表示最优native void updateStat()更新捕获和丢失数据包的数量注:1 getDeviceDescription()方法 在windows系统中,接口的名字描述得很复杂,比如DevicePacket_6E05D.,这个方法返回的接口描述很易于理解,比如3com EtherLinkII。2 loopPacket()方法 这个方法不同于processPacket(),忽视超时;参数count是要捕获数据包的数量,可以将其设置为-1,这样就可以持续抓包直到EOF或发生错误为止。3 openDevice()方法 device参数是网络接口的名字;snaplen参数是一次捕获的最大字节数量;promisc参数,如果为true,接口被设置为混杂模式;to_ms参数,设定processPacket()中的Timeout;当指定接口不能被打开抛出IO异常。4 processPacket ()方法 本方法考虑超时因素;参数count是要捕获数据包的数量,可以将其设置为-1,这样就可以持续抓包直到Timeout、EOF或发生错误为止。看以下范例J-05,示例Jpcap类。首先用Jpcap.loopPacket循环5次,即捕获5个数据包。然后调用函数infolist()显示Jpcap类的实例的一些信息。运行结果如下:1 1052638788:8910502 1052638789:670451 80-40 protocol(6) priority(0) hop(111) offset(0) ident(62020) TCP 3750 554 seq(1368159305) win(17520) ack 3328556670 3 1052638789:670801 40-80 protocol(6) priority(0) hop(128) offset(0) ident(20153) TCP 554 3750 seq(3328556670) win(62811) ack 1368159305 P4 1052638789:670944 40-80 protocol(6) priority(0) hop(128) offset(0) ident(20154) TCP 554 3750 seq(3328558130) win(62811) ack 1368159305 P5 1052638790:90707 80-40 protocol(6) priority(0) hop(111) offset(0) ident(62022) TCP 3749 554 seq(1368095087) win(17520) ack 3328520618 #Jpcap.loopPacket函数执行完毕#Jpcap.getDeviceDescription(): NDIS 5.0 driverJpcap.getDeviceList(): DeviceNPF_70AE76E3-B72D-47CC-84BE-B0C8EB1C1543Jpcap.getErrorMessage(): Jpcap.JpcapInfo: jpcap.Jpcap$JpcapInfo1fee6fcJpcap.getPacket(): 1052638790:91031 40-80 protocol(6) priority(0) hop(128) offset(0) ident(20155) TCP 554 3749 seq(3328523538) win(64240) ack 1368095087 PJpcap.lookupDevice(): 0 02.7 使用Jpcap.JpcapInfo类在Jpcap0.4版本修改BUG之后不再使用这个类。以下说明是对jpcap0.4版本之前类库的使用说明,不再用程序示例。JpcapInfo类是Jpcap的内部类(inner class),直接继承了java.lang.Object类,它包含了被捕获数据包的一些信息。当应用JpcapWriter类时,JpcapInfo是必不可少的。其继承图示如下:java.lang.Object | +-jpcap.Jpcap.JpcapInfo2.8 使用JpcapSender类 (1. Native方法getPacket()有时出错;2. 用其所给例子试验,其校验和是错的)JpcapSender类继承了java.lang.Object类,如下所示层次图。JpcapSender类用来发送数据包。java.lang.Object | +-jpcap.JpcapSender它从java.lang.Object继承了以下方法:clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait。可以在表8.1中找到JpcapSender类的成员函数。表8.1 JpcapSender类的成员函数成员函数功能native void close()关闭网络接口static JpcapSender openDevice(String device)为发送数据包初始化网络接口 (注1)native void sendPacket(IPPacket packet)发送数据包 (注2)注:1 openDevice()方法 它返回JpcapSender的实例。device是用来发送数据包的网络接口,当初始化接口失败时抛出IOException。2 sendPacket()方法 在UNIX下,仅支持IP数据报的发送;对于ICMP数据报,只有echo包可以发送,这是为了防止DOS攻击。在Windows下,可以发送非IP数据报,但是必须设置数据链路层的报头(比如以太帧头)。看以下范例J-06,示例JpcapSender类。用两种方法实现了对数据包的发送,第一种捕获到IP数据包并把它一字不动地再发送出去,第二种是自己构造了一个IP数据包和UDP数据包,并把它们发送出去。运行两次,结果分别如下:捕获并发送IP数据包 1052749416:890448 24-40 protocol(6) priority(0) hop(110) offset(0) ident(56390) TCP 3581 554 seq(1451084838) win(63491) ack 2596173134 成功生成并发送IP数据包 0:0 38-39 protocol(6) priority(0) hop(128) offset(0) ident(1234)成功生成并发送UDP数据包 0:0 -9 protocol(0) priority(0) hop(100) offset(0) ident(1010101) UDP 12345 54321成功捕获并发送IP数据包 1052808719:676833 40-57 protocol(17) priority(0) hop(128) offset(0) ident(23409) UDP 14258 6970成功生成并发送IP数据包 0:0 38-39 protocol(6) priority(0) hop(128) offset(0) ident(1234)成功生成并发送UDP数据包 0:0 -9 protocol(0) priority(0) hop(100) offset(0) ident(1010101) UDP 12345 54321成功2.9 使用JpcapWriter类 (存盘到文件 文件为2进制文件?)JpcapWriter继承了java.lang.Object类,如下所示层次图。JpcapWriter类用来将一个被捕获的数据包保存到文件。java.lang.Object | +-jpcap.JpcapWriter它从java.lang.Object继承了以下方法:clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait。可以在表9.1中查找到JpcapWriter类的构造函数,在表9.2中找到该类的成员函数。表9.1 JpcapWriter类的构造函数构造函数功能JpcapWriter(Jpcap.JpcapInfo info,String filename)打开文件,准备保存捕获到的数据包表9.2 JpcapWriter类的成员函数成员函数功能native void closeDumpFile()关闭打开的文件native void writeDumpFile(Packet packet)在文件中保存捕获到的数据包看以下范例J-07,示例JpcapWriter类。将捕获的数据包调用save方法存盘。程序运行后,在C盘根目录下生成若干文件,其中即捕获到的数据包。一个数据包存到一个文件中。2.10 使用Packet类 (数据区中文为乱码)Packet类是Jpcap类捕获的数据包的基类,其子类有ARPPacket类和IPPacket类。用Jpcap类捕获的数据包,其类型即为Packet,其中根据包类型不同,可以分为以太帧、IP、TCP等等数据包。其继承关系如下图。java.lang.Object | +-jpcap.Packet它从java.lang.Object继承了以下方法:clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait。可以在表10.1查找到Packet类的数据成员,在表10.2中查到它的构造函数,在表10.3中查找到该类的成员函数。表10.1 Packet类的数据成员数据成员功能int caplen记录捕获到的长度byte data包的数据(包括头)DatalinkPacket datalink数据链路层报头byte header报头数据int len数据包长度long sec时间戳(秒)long usec时间戳(微秒)表10.2 Packet类的构造函数构造函数功能Packet()表10.3 Packet类的成员函数成员函数功能String toString()返回描述此数据包的字符串 格式-时间戳(秒):时间戳(微秒)看以下范例J-08,示例Packet类。根据Packet类的数据成员和成员函数,显示了捕获到数据包的信息,包括长度、数据和时间信息等等。程序被设置为捕获两个数据包,运行效果如下:Captured length:184数据:HTTP/1.1 304 Not Modified Date: Thu, 22 May 2003 06:47:28 GMTServer: Apache Connection: closeETag: 3b22c7-80b-3b806083报头数据:? (乱码)以太帧报头:jpcap.EthernetPackete48e1b 00:00:81:e1:87:b2-01:80:c2:00:00:00 (38)数据包长度:184时间戳(秒):1053585159时间戳(微秒):326806描述该数据包:1053585159:326806+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-Captured length:1434数据: 建、湖南、天津等省(自治区、直辖市)教育厅和河海大学、兰州大学等部属高校的负责人,分别利用各自会场的视频系统发言,教育部防治非典型肺炎领导小组办公室负责人介绍了当前教育系统防治非典型肺炎的工作情况。 报头数据:? ? (乱码)以太帧报头:jpcap.EthernetPacket12dacd1 00:00:81:e1:87:b2-01:00:81:00:01:00 (19)数据包长度:1434时间戳(秒):1053585160时间戳(微秒):495483描述该数据包:1053585160:495483在本例,对Packet类的应用中,对Packet类中的数据成员data和header的处理有些麻烦。调用这两个数据成员时,返回的均是byte数组,不可以直接显示,以String形式显示时,大多数情况下对中文的支持不是很好,非中文可以正确显示。也许是对网页的框架有一定要求,对含有中文的数据区显示的多为乱码,例如在上述例子中显示数据包长度时就总是乱码,在对data进行显示时,对某些网页可以显示正确的中文(如上例)。2.11 使用ARPPacket类 ARPPacket类描述了ARP/RARP包,继承了Packet类,其层次图如下。java.lang.Object | +-jpcap. Packet | +-jpcap.ARPPacket它从java.lang.Object继承了以下方法:clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait。在表11.1中可以查找到ARPPacket类的数据成员,在表11.2中可以查到该类的构造函数,表11.3中查到ARPPacket类的成员函数。表11.1 ARPPacket类的数据成员数据成员功能static final short ARP_REPLY=2ARP应答static final short ARP_REQUEST=1ARP请求short hardtype硬件类型static final short HARDTYPE_ETHER=1硬件类型:以太网static final short HARDTYPE_FRAMERELAY硬件类型:帧中继static final short HARDTYPE_IEEE802=6硬件类型:令牌环short hlen硬件地址长度static final short INV_REPLY=9Identify peer 应答static final short INV_REQUEST=8Identify peer 请求short operation操作字段,指出四种操作类型short plen协议地址长度short prototype协议类型static final short PROTOTYPE_IP=2048协议类型:IPstatic final short RARP_REPLY=4RARP应答static final short RARP_REQUEST=3RARP请求byte sender_hardaddr发送端以太网地址byte sender_protoaddr发送端IP地址byte target_hardaddr目的以太网地址byte target_protoaddr目的IP地址表11.2 ARPPacket类的构造函数构造函数功能ARPPacket()表11.3中查到ARPPacket类的成员函数成员函数功能Object getSenderHardwareAddress()返回发送方硬件地址(MAC地址
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电气专业考研考试题及答案
- 长沙伺服驱动器项目可行性研究报告
- 集中式饮用水水源地环境保护工程可行性研究报告
- 2025年成都百万职工技能大赛(酒体设计师)备赛试题库(含答案)
- 幸福餐桌开席:焦作乡村幸福院千叟宴的民生温度 -2026 届高三语文主题读写素材 11 月热点时事写作素材
- 2026年一级建造师一建市政实务案例分析考点重点知识总结笔记
- 淘宝上签就业协议书
- 主张撤销借款协议书
- 车辆还贷款协议书合同
- 王者荣耀信息协议书
- 酒店新风系统安装合同
- 国家开放大学国开电大《操作系统》形考任务1-3答案
- 江西省南昌市2024-2025学年八年级上期中考试数学试题(含解析)
- 无菌车间管理员工培训
- 土地承包合同(2篇)
- 江苏省南通市通州区2024-2025学年八年级上学期期中考试语文试题(含答案)
- 人教版六年级上册道德与法治知识点
- 产前筛查知情同意书制度
- 五年级上册英语课件-Unit-3-Fun-Facts-人教精通版
- 潜水作业事故分类与统计方法 征求意见稿
- 大学生职业生涯规划课件教学
评论
0/150
提交评论