JAVA课程设计--抓取数据包

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

**大学

计算机科学与技术学院

实验报告

(2007 ~2008 学年度第一学期)

课程名称网络编程技术

项目名称网络抓包

姓名学号

专业计算机班级

地点教师

一实验目的:

1. 通过学习,使大家熟练掌握JA VA的安装,配置及其运行环境。

2. 初步掌握如何连接JA VA和数据库。

3.从网络上采集至10万个数据包分别存入TXT文件和数据库中。

4.完成协议统计、包长统计。

5.实现数据包流量的时间变化(10分钟为单位)直观的统计图。

二.软硬件环境

操作系统:Windows xp

数据库:SQL Server 2000

开发环境:JDK_1_5-0-07, WinPcap_4_0_1,JCreator Pro 3.5

三实验原理:

1. Java语言具有以下特点:简单、面向对象、分布式、解释执行、安全、跨

平台、高性能、多线程等特点。首先安装上述开发环境中的各个软件,Winpcap 是一个第三方类库,为Jpcap提供基础类Jpcap是一个静态库,可以被包截获程序直接调用,它应用Packet.dll导出的服务向上层应用程序提供强有力的截获界面。它是应用程序的一部分。

1)建立获取网络数据包的程序为JpcapTip.java

2)建立数据包流量的时间变化直观图和包长统计为ImageTest.java

3)建立对数据进行协议统计的程序为ConnServer.java

2. 在JpcapTip.java中向txt文件写入10万个IP数据包,包括(IP的源地址,

目标地址,高层协议,长度, 版本号,标识符,标志,段偏移量,数据报的寿命数值,服务型号,数据),然后在把IP数据包的信息存放到SQL server 2000的数据库中。

3. 在ImageTest.java中统计共收集多少个数据包,计算平均包长,并统计包长。

4. 在ConnServer.java中协议统计。

四、网卡设置

1:openDevice

public static Jpcap openDevice(ng.String device, int snaplen, boolean promisc, int to_ms),第一个参数为string,指定要打开的设备名;第二个参数为int,指定每个包返回数据的长度;第三个参数为混杂标志,如果设为1,将网卡设置为混杂模式,监听全网段。第四个参数为以毫秒计超时时限。

2:getDeviceDescription

public static ng.String[] getDeviceDescription()

3:loopPacket

public int loopPacket(int count, JpcapHandler handler) 五、流程图

六源程序

import jpcap.*;

import jpcap.packet.*;

import java.io.*;

import java.sql.*;

import .InetAddress;

import ng.*;

public class getMessage1 implements PacketReceiver

{

public void receivePacket(Packet packet) //实现接口PacketReceiver类中的receivePacket方法

{

System.out.println("ok");

}

public static void main(String[] args)

{ //定义变量用存放数据包的相应的信息

String src_ip=""; //IP的源地址

String dst_ip=""; //IP目标地址

int protocol=0; //IP高层协议

int length=0; //IP长度

int version=0; //IP版本号

Packet pa;

try

{

NetworkInterface[] NI=JpcapCaptor.getDeviceList(); //获取设备列表名

JpcapCaptor jpcap1= JpcapCaptor.openDevice(NI[1], 1024, true, 50); // 打开网卡设备

for(int j=0;j<100000;j++) //循环获取数据包

{

pa=jpcap1.getPacket(); //获取数据包

if (pa instanceof IPPacket) //判断是否为IP 数据包

{

IPPacket ip=(IPPacket)pa;

System.out.println(ip.src_ip+"\t"+ip.dst_ip+"\t"+ip.protocol+"\t"+

ip.length+"\t"+ip.version+"\t"+ip.ident+"\t"+

ip.rsv_frag+"\t"+ip.offset+"\t"+ip.hop_limit+"\t"+ip.rsv_tos+"\r\n"); //屏

幕输出IP数据包的信息

RandomAccessFile rf = new RandomAccessFile("packet.txt", "rw");//把IP数据包写入到文本文件,创建一个用来输入输出RandomAccessFile流,文件名为packet

rf.seek(rf.length());

//定位文件指针在文件中的最后

rf.writeBytes(ip.src_ip+"\t"+ip.dst_ip+"\t"+ip.protocol+"\t"+

ip.length+"\t"+ip.version+"\t"+ip.ident+"\t"+ip.rsv_frag+"\t"+

ip.offset+"\t"+ip.hop_limit+"\t"+ip.rsv_tos+"\r\n");

/*向txt文件写入IP的源地址,目标地址,高层协议,长度, 版本号,标识符(序号),标志,段偏移量,数据报的寿命数值,服务型号*/

rf.close();

//将IP数据包的信息写入数据库

src_ip=ip.src_ip.toString();

dst_ip=ip.dst_ip.toString();

protocol=ip.protocol;

length=ip.length;

version=ip.version;

String JDriver="sun.jdbc.odbc.JdbcOdbcDriver"; //驱动程序名

String conURL="jdbc:odbc:test"; //数据源

try

{

Class.forName(JDriver); //获取驱动程序并加载

}

catch(ng.ClassNotFoundException e)

{

System.out.println("ForName:"+e.getMessage());

}

Connection

con=DriverManager.getConnection(conURL);//建立数据库的连接

Statement s=con.createStatement(); //创建Statement对象用来执行SQL 语句

String query="insert into captor values('"+src_ip+"','"+dst_ip+"','"+protocol+"','"+length+"','"+version+"')";

相关文档
最新文档