好好学习,天天向上,一流范文网欢迎您!
当前位置:首页 >> 最新范文 内容页

基于JPcap的数据包捕获实验报告

基于JPcap的数据包捕获实验报告 本文关键词:捕获,数据包,实验,报告,JPcap

基于JPcap的数据包捕获实验报告 本文简介:实验报告实验名称基于JPcap的数据包捕获器课程名称计算机网络原理与技术姓名李辉成绩班级软件0806学号3901080608日期2010.4地点电子楼四楼实验室备注:小组合作实验,组员:李辉、黄钰1.实验目的基于java第三方包JPcap编写数据包捕获器,该捕获器具有以下功能:a)监听并捕获以太网帧

基于JPcap的数据包捕获实验报告 本文内容:

实验名称

基于JPcap的数据包捕获器

课程名称

计算机网络原理与技术

姓名

李辉

成绩

班级

软件0806

学号

3901080608

日期

2010.4

地点

电子楼四楼实验室

备注:

小组合作实验,组员:李辉、黄钰

1.实验目的

基于java第三方包JPcap编写数据包捕获器,该捕获器具有以下功能:

a)

监听并捕获以太网帧

b)

分析IP数据报

c)

分析ARP/RARP

d)

分析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研制发布的,其主页为http://netresearch.ics.uci.edu/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(http://java.sun.com)

ii.

安装最新版本的LibPcap(对于UNIX平台,http://ee.lbl.gov/)

或者WinPcap

(对于Windows平台,http://winpcap.polito.it/)

iii.

下载并解压缩Jpcap的最新版本(http://netresearch.ics.uci.edu/kfujii/jpcap/doc/index.html

)。

iv.

以Window

XP系统为例,具体准备工作如下:

1.

复制Jpcap.dll到C:/WINDOWS/system32

2.

安装winpcap4.0.2

3.

在工程中导入

jpcap.jar

3.实验方法

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和IPv6

IPv6Option

:这个类描述了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

jpcap.NetworkInterface;

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.name

+

“|

“+

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

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

Fujiiy

7.附件

1.

代码文件夹下有Test工程和PacketCapure工程,其中PacketCapure即为本实验所做的捕获器,Test为原理演示工程。

2.

API文件夹下是帮助文件

3.

所需第三方类库文件夹下是所需的第三方类库

4.

参考资料文件夹下有《基于JPcap的网络流量分析研究与应用》和JpcapDumper

ver.0.3

5.

根目录下有本实验报告电子版和演示ppt

10

TAG标签: