JAVA课程设计--抓取数据包
更新时间:2024-04-26 08:41:01 阅读量: 综合文库 文档下载
**大学
计算机科学与技术学院
实验报告
( 2007 ~2008 学年度 第 一 学期 )
课程名称
项目名称
网络编程技术 网络抓包
姓名
学号
专业 计算机
班级
地点
教师
一实验目的:
1. 通过学习,使大家熟练掌握JAVA的安装,配置及其运行环境。 2. 初步掌握如何连接JAVA和数据库。
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(java.lang.String device, int snaplen, boolean promisc, int to_ms),第一个参数为string,指定要打开的设备名;第二个参数为int,指定每个包返回数据的长度;第三个参数为混杂标志,如果设为1,将网卡设置为混杂模式,监听全网段。第四个参数为以毫秒计超时时限。
2:getDeviceDescription
public static java.lang.String[] getDeviceDescription()
3:loopPacket
public int loopPacket(int count, JpcapHandler handler) 五、流程图
getDeviceList() 获得当前得到设备名
Set become promiscuous mode 设置网卡为混杂模式
loopPacket抓包 是否属于IP数据包
Y 转换成IPPacket Y N 抓包数是否为10000倍 Y 存入packe(n+1).txt 存入packe (n).txt
六 源程序
import jpcap.*;
import jpcap.packet.*; import java.io.*;
import java.sql.*;
import java.net.InetAddress; import java.lang.*;
public class getMessage1 implements PacketReceiver {
public void receivePacket(Packet packet) //实现接口PacketReceiver类中的receivePacket方法 {
System.out.println(\ }
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+\ ip.length+\
ip.rsv_frag+\ //屏
幕输出IP数据包的信息
RandomAccessFile rf = new RandomAccessFile(\把IP数据包写入到文本文件,创建一个用来输入输出RandomAccessFile流,文件名为packet
rf.seek(rf.length()); //定位文件指针在文件中的最后
rf.writeBytes(ip.src_ip+\
ip.length+\
ip.offset+\ /*向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=\ //驱动程序名
String conURL=\ //数据源
try {
Class.forName(JDriver); //获取驱动程序并加载
}
catch(java.lang.ClassNotFoundException e) {
System.out.println(\ }
Connection
con=DriverManager.getConnection(conURL);//建立数据库的连接
Statement s=con.createStatement(); //创建Statement对象用来执行SQL 语句 String query=\into captor values('\
s.executeUpdate(query); //执行SQL语句命令 s.close();
con.close(); //关闭操作 } } }
catch (Exception e) {
e.printStackTrace(); } } }
********************************************************* //ImageTest.java(实现对数据包流量的时间变化的直方图输出) //ImageTest.java(实现对数据包流量的时间变化的直方图输出) import java.awt.geom.*; import java.awt.image.*; import java.awt.event.*; import javax.swing.*; import java.awt.*;
//import jpcap.JpcapHandler; //import jpcap.Jpcap; //import jpcap.Packet; import java.awt.Graphics; import java.io.*;
import java.awt.font.*; import jpcap.*;
import jpcap.packet.*; import java.io.*; import java.lang.*; import java.sql.*;
public class ImageTest extends JFrame {
static int i=0; static int v=0;
static int[] arry = new int [220];
public void ImageTest() {
setSize(250,200);
}
public void paint(Graphics g) {
int w=0; int x=0; int y=0;
Graphics2D g2d=(Graphics2D)g;
g.setColor(Color.red); for(;x<40;x++)
g.drawLine(0,50+10*x,1000,50+10*x);
g.setColor(Color.black);
g.drawLine(0,50+10*x,1000,50+10*x);
repaint();
for(int z=1;w<200;w++,z++) {
g2d.setColor(Color.LIGHT_GRAY);
g.fillRect(50+(w+z),450-JpcapTip.arry[w],2,JpcapTip.arry[w]);
z=z+2;
g2d.setColor(Color.DARK_GRAY);
g.fillRect(50+(w+z),450-JpcapTip.arry[w],1,450); } }
public static void main(String arg[]) throws java.io.IOException {
int j=0; int k=1; int h=0;
long total=0;
NetworkInterface[] devices = JpcapCaptor.getDeviceList(); NetworkInterface deviceName = devices[1];
JpcapCaptor jpcap1 = JpcapCaptor.openDevice(deviceName, 1028, true, 100);
JFrame frame=new ImageTest(); frame.setSize(900,470);
frame.setBackground(Color.DARK_GRAY); frame.setVisible(true); for(;k<=200;k++)
{
jpcap1.loopPacket(1, new JpcapTip());
System.out.print( JpcapTip.p); System.out.print(\所抓的第\ System.out.print( k +\个包的长度: \所抓的第%d个包的长度为:\ System.out.println(JpcapTip.arry[k-1]); total=total+JpcapTip.arry[k-1];
i++;
v++;
frame.setTitle(\流量统计图 平均流量为:\包/秒\ } } }
****************************************************** 七 实验结果 截获的数据包:
数据包流量的时间变化的直方图
八 心得体会
正在阅读:
JAVA课程设计--抓取数据包04-26
第04章 船舶管路系统及其管理12-18
基于单片机的直流电机调速系统软件设计05-04
天津财经大学2015年产业经济学考研经验考研真题考录比参考书05-10
百年民间文学理论著作要目索引-刘锡诚09-16
解读IPCC第五次评估报告第一工作组报告 - 图文06-27
天使数字1-99904-22
开幕式讲话稿范文(共8篇)12-23
维修电工中级理论知识模拟试题11-01
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 抓取
- 课程
- 数据
- 设计
- JAVA
- 2018全国中考物理试题《透镜及其应用》试题汇编
- 高一地理第二次周测
- 化验方法
- 一级圆柱斜齿轮减速器设计计算说明书
- 西方政治制度试题及答案
- 中国咨询协会化工专业委员会
- 冲刺2011中考语文全国各地模拟试专题分类 议论文专题
- 架空输电线路课程设计
- 天津市滨海新区面向全国公开选拔领导干部公告
- 加快网络建设
- 第四章Grads数据资料转换和数据描述文件2013 - 图文
- desktop.ini病毒清除方法
- 深沟槽专项安全方案(专家已通过) - 图文
- 关于公布第七届北京市中小学师生电脑作品评选活动获奖者名单的通
- 104规约报文解析(实例(适用初学者))
- 跑腿公司大学生创业计划书
- 员工激励论文,谭占宾
- 四边形八节点等参元matlab程序
- 发电厂继电保护管理制度汇编
- 化学合成原料药车间设计探讨