资源描述
贵 州 大 学
2002级硕士研究生学年报告
基于JPcap的网络流量分析
研究与应用
学科专业 计算机软件与理论
研究方向 计算机软件
导 师 李 祥 教授
研 究 生 赵新辉
中国 · 贵州 · 贵阳
2003 年 6 月
目 录
摘 要
第一章 网络数据包捕获工具Jpcap
1.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
第一章 网络数据包捕获工具Jpcap
1.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研制发布的,其主页为http://netresearch.ics.uci.edu/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(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.3 JPCAP的安装
(A) Windows 9x,NT,2000
1) 复制"lib\Jpcap.dll"到"[JRE directory]\bin"或"[JRE directory]
\lib\ext\x86"。
2) 复制"lib\jpcap.jar"到"[JRE directory]\lib\ext"。
3) 如果安装了SDK,还需要拷贝"lib\jpcap.jar"到"[SDK directory]
\jre\lib\ext"。
其中[JRE directory]是指JRE默认安装路径,一般来说是C:\Program Files\Java\j2re*;[SDK directory] 是指SDK的默认安装路径,一般来说是C:\j2sdk*。
打开JBuilder8的工程,选"Tools/Configure JDKs/ Add"将\lib中的文件jpcap.jar加入。将\sample\tcpdump.java 加入,即可编译运行。
注意:在Windows下,Jpcap.dll和jpcap.jar两个文件需要放置的位置与您所安装JRE中设置的"home path"有极大的联系。其中,Jpcap.dll文件必须放在您设置的"home path"的子目录中的bin文件夹中,jpcap.jar文件放的位置较为任意,一般是放到lib文件夹中,理论上可以放到任意地方,但是必须在jdk setting中加入该类库包的完整路径。
(B) UNIX
1) 在解压缩的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/<arch>. <arch>是"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.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.1 JpcapHandler接口的成员函数
成员函数
功能
void handlePacket(Packet p)
当捕获到一个包时被自动调用来分析该数据包;参数p是被分析的数据包
先看以下例子J-01,示例JpcapHandler接口,jpcaphandler类实现了JpcapHandler接口,当捕获到一个包时,JpcapHandler接口的方法handlePacket被自动调用来分析数据包。
运行结果如下:
…… ……
ARP REQUEST 00:80:2d:5f:be:86(210.40.7.129) -> 00:00:00:00:00:00(210.40.7.187)
ARP REQUEST 00: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
ARP REQUEST 00: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.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:[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.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时,返回NULL
boolean equals(Object p)
比较当前实例是否与给定对象等同
static void setAddressConvert(Boolean
isDomainName)
指定采用哪种表示方法。参数isDomainName,为true时采用域名表示;为false时采用IP地址表示
String toString()
返回一个描述本IP地址的字符串
int hashCode()
返回本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.1 IPAddress类的构造函数
构造函数
功能
IPv6Option()
表5.2 IPAddress类的数据成员
数据成员
功能
IPAddress[] addrs
路由地址(路由选项)
static final byte AH_OPTION=51
身份验证选项
static final byte
DESTINATION_OPTION=60
目标选项
static final byte ESP_OPTION=50
封装安全有效数据
static final byte
FRAGMENT_OPTION=44
分段选项
byte hlen
报头长度
static final byte
HOP_BY_HOP_OPTION=0
逐个路程段选项
byte hop_left
段剩余(路由选项)
int identification
身份字段(分段选项)
boolean m_flag
M标志(分段选项)
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 String[]
getDeviceDescription()
返回对接口的描述(仅用于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系统中,接口的名字描述得很复杂,比如\Device\Packet_{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:891050
2 1052638789:670451 61.150.109.180->210.40.7.140 protocol(6) priority(0) hop(111) offset(0) ident(62020) TCP 3750 > 554 seq(1368159305) win(17520) ack 3328556670
3 1052638789:670801 210.40.7.140->61.150.109.180 protocol(6) priority(0) hop(128) offset(0) ident(20153) TCP 554 > 3750 seq(3328556670) win(62811) ack 1368159305 P
4 1052638789:670944 210.40.7.140->61.150.109.180 protocol(6) priority(0) hop(128) offset(0) ident(20154) TCP 554 > 3750 seq(3328558130) win(62811) ack 1368159305 P
5 1052638790:90707 61.150.109.180->210.40.7.140 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 driver
Jpcap.getDeviceList(): \Device\NPF_{70AE76E3-B72D-47CC-84BE-B0C8EB1C1543}
Jpcap.getErrorMessage():
Jpcap.JpcapInfo: jpcap.Jpcap$JpcapInfo@1fee6fc
Jpcap.getPacket(): 1052638790:91031 210.40.7.140->61.150.109.180 protocol(6) priority(0) hop(128) offset(0) ident(20155) TCP 554 > 3749 seq(3328523538) win(64240) ack 1368095087 P
Jpcap.lookupDevice(): \
0 0
2.7 使用Jpcap.JpcapInfo类
在Jpcap0.4版本修改BUG之后不再使用这个类。以下说明是对jpcap0.4版本之前类库的使用说明,不再用程序示例。
JpcapInfo类是Jpcap的内部类(inner class),直接继承了java.lang.Object类,它包含了被捕获数据包的一些信息。当应用JpcapWriter类时,JpcapInfo是必不可少的。其继承图示如下:
java.lang.Object
|
+-jpcap.Jpcap.JpcapInfo
2.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 218.79.178.124->210.40.7.140 protocol(6) priority(0) hop(110) offset(0) ident(56390) TCP 3581 > 554 seq(1451084838) win(63491) ack 2596173134 成功
生成并发送IP数据包 0:0 210.40.7.138->210.40.7.139 protocol(6) priority(0) hop(128) offset(0) ident(1234)成功
生成并发送UDP数据包 0:0 202.112.8.2->61.135.150.69 protocol(0) priority(0) hop(100) offset(0) ident(1010101) UDP 12345 > 54321成功
捕获并发送IP数据包 1052808719:676833 210.40.7.140->218.69.176.157 protocol(17) priority(0) hop(128) offset(0) ident(23409) UDP 14258 > 6970成功
生成并发送IP数据包 0:0 210.40.7.138->210.40.7.139 protocol(6) priority(0) hop(128) offset(0) ident(1234)成功
生成并发送UDP数据包 0:0 202.112.8.2->61.135.150.69 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方法存盘。
程
展开阅读全文