sniffer设计与实现.docx

上传人:b****1 文档编号:15052744 上传时间:2023-06-30 格式:DOCX 页数:15 大小:447.48KB
下载 相关 举报
sniffer设计与实现.docx_第1页
第1页 / 共15页
sniffer设计与实现.docx_第2页
第2页 / 共15页
sniffer设计与实现.docx_第3页
第3页 / 共15页
sniffer设计与实现.docx_第4页
第4页 / 共15页
sniffer设计与实现.docx_第5页
第5页 / 共15页
sniffer设计与实现.docx_第6页
第6页 / 共15页
sniffer设计与实现.docx_第7页
第7页 / 共15页
sniffer设计与实现.docx_第8页
第8页 / 共15页
sniffer设计与实现.docx_第9页
第9页 / 共15页
sniffer设计与实现.docx_第10页
第10页 / 共15页
sniffer设计与实现.docx_第11页
第11页 / 共15页
sniffer设计与实现.docx_第12页
第12页 / 共15页
sniffer设计与实现.docx_第13页
第13页 / 共15页
sniffer设计与实现.docx_第14页
第14页 / 共15页
sniffer设计与实现.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

sniffer设计与实现.docx

《sniffer设计与实现.docx》由会员分享,可在线阅读,更多相关《sniffer设计与实现.docx(15页珍藏版)》请在冰点文库上搜索。

sniffer设计与实现.docx

sniffer设计与实现

信息安全专业

程序实践四

网络安全与网络管理

实践报告

软件学院

实验成绩表

2010年版

1.实践目的

(1)掌握程序原理;

(2)学习编程

(3)能够使用实现数据包的捕获

(4)设计和实现一个程序

(5)掌握欺骗原理,并能够实施欺骗

2.实践内容

(1)使用实现数据包的捕获:

(2)分析数据包:

处理捕获的数据包,解析出其协议类型、源地址、目的地址、源地址、目的地址、源端口、目的端口和数据部分,然后将这些信息保存在文件中。

最终根据文件内容统计以下协议的数据流量:

网络层:

,;传输层:

,。

(3)将捕获的信息存放在数据库中,根据捕获的信息进行流量统计;

(4)欺骗:

截获网络上的数据包,对其进行分析,获取源和目的地址,用该数据包的目的地址来伪装自己的地址,并按照报文格式,对该数据包的发送者发送欺骗包,并验收欺骗成功。

(5)界面化:

利用构建图形界面,便于用户操作。

3.实践过程

1.网络嗅探器

使用构建图形界面,工程基于对话框模式建立。

工程共有两个对话框,分别为主对话框,其类名为,以及新建的对话框,其类名为,其作用是在进入主对话框之前选择网卡设备。

类:

如截图显示,对话框内使用了控件,并在里定义了的变量,在类中定义了一个的变量。

在中添加三个成员函数:

()把选中的设备的序号赋值到中

()初始化对话框,把已经查找出来的网络设备显示在下拉列表中

()弹出对话框,并退出程序

获取本地网卡列表所使用的函数以及代码在实验指导书中都有,这里就不过多介绍了。

主对话框:

主对话框中使用了控件,控件,以及五个控件。

在里定义变量:

控件变量,型的变量;;;;。

在中定义结构体:

{以太网头部

[6];

[6];

?

};

{/*4*/

;(4)+(4)

;

;

;

;(3)+(13)

;

;

;

;

;

;+

};

{/**/

;

;

;

;

;

;

;

;

;

};

{/**/

;

;

;

;

};

{/**/

;

;

;

};

{

;

;

;

;

;

[6]

[6]

};

在里添加成员函数:

(),(,),(),()等。

下面会做具体介绍:

()函数中,对对话框进行初始化,主要是对控件的初始化操作,添加“数据”,“大小”,“目的端口”,“目的地址”,“目的地址”,“源端口”,“源地址”,“源地址”,“序号”共十列。

主要代码如下:

(|);

(0,"数据",335);

(0,"大小",40);

…………

*=(()());

()函数是在对按钮添加的响应函数,主要是进行数据包的捕获,因为中对()函数不兼容,所以在工程中我使用了线程函数,如上代码所示,而在()函数中调用线程(,());即可是捕获数据包。

流程图中为捕获数据包的流程:

线程函数

(p)

{

*=<*>(p);

;

*;

*;

((=(,,))>=0)

{

(0)

;

's';

>(,,);解释报文

}

(-1){

;

(":

\n",());

();

(1);}

();

-1;}

(*,*,32,)函数设置过滤规则。

在()函数中调用此函数。

通过;;;;,当选中其中某项时,变量的值变为型(默认为),把过滤表达式线程相应的网络协议类型。

比如,选中协议项,通过判断,(,"");将过滤表达式设置为,使用(,,,1,)以及(,)设置过滤规则。

(*,*,*)函数,主要是分析数据包,根据接收的数据包的字段类型进行分类。

如线程代码所示,在线程中调用此函数。

将分析出的数据包的协议,源地址,目的地址,源地址,源端口,目的地址,目的端口,大小,数据等信息都通过格式化()函数转换为其对应的格式,添加到列表中。

下面的流程图为区分四种协议的流程图。

以太网的协议类型值为0x0806;

以太网的协议类型值为0x0800;

的协议类型值为17;

:

的协议类型值为6;

的协议类型值为1。

(s1,s2,s3,s4,s5,s6,s7,s8s9s10)函数将分析出的数据包信息写入列表,函数在()中调用。

部分代码如下:

;

=(01);

(,12,0,0,0,0);……

()函数是在对按钮添加的响应函数,停止捕获数据包,并显示已经捕获的不同协议数据包的数量。

在工程中定义4个的全局变量,,在函数中对其值初始化为0,在函数中在相应的协议中进行累加,最后用把其值显示出来。

以下为设置过滤的捕获停止的截图:

()函数是在对按钮添加的响应函数,清除列表中的数据内容,使用()。

()函数在对按钮添加的响应函数,用于将列表中的数据内容存放在数据库中。

我所使用的数据库为,在数据库中建立了命名为的表单,在安装数据库时,设定用户名为,密码为123。

连接数据库使用的代码:

(()0){

("没有数据要存储!

!

");

;}

i;

*;

(0)初始化数据库

12345678910;

((,"","","123","",3306,0))连接数据库{

(1<){

1(,0);

2(,1);

3(,2);

…………

把列表中的数据插入数据库中

"('"1+"','"2+"','"3+"','"4+"',……)";

();

}

("存储成功!

");

}

截图如下:

存储显示

数据库内容:

()函数是在对按钮添加的响应函数,退出程序。

();关闭对话框。

2.欺骗

工作原理

首先,每台主机都会在自己的缓冲区中建立一个列表,以表示地址和地址的对应关系。

当源主机需要将一个数据包要发送到目的主机时,会首先检查自己列表中是否存在该地址对应的地址,如果有﹐就直接将数据包发送到这个地址;如果没有,就向本地网段发起一个请求的广播包,查询此目的主机对应的地址。

此请求数据包里包括源主机的地址、硬件地址、以及目的主机的地址。

网络中所有的主机收到这个请求后,会检查数据包中的目的是否和自己的地址一致。

如果不相同就忽略此数据包;如果相同,该主机首先将发送端的地址和地址添加到自己的列表中,如果表中已经存在该的信息,则将其覆盖,然后给源主机发送一个响应数据包,告诉对方自己是它需要查找的地址;源主机收到这个响应数据包后,将得到的目的主机的地址和地址添加到自己的列表中,并利用此信息开始数据的传输。

如果源主机一直没有收到响应数据包,表示查询失败。

欺骗过程

协议并不只在发送了请求才接收应答。

当计算机接收到应答数据包的时候,就会对本地的缓存进行更新,将应答中的和地址存储在缓存中。

所以在网络中,有人发送一个自己伪造的应答,网络可能就会出现问题。

设一个网络环境中,网内有三台主机,分别为主机A、B、C。

主机详细信息如下描述:

  A的地址为:

192.168.1.102:

00-163-8c5

B的地址为:

192.168.1.101:

00-1948-0c

 C的地址为:

192.168.1.103:

00-22-15-22-81-88

正常情况下A和C之间进行通讯,但是此时B向A发送一个自己伪造的应答,而这个应答中的数据为发送方地址是192.168.1.103(C的地址),地址是00-1948-0c(C的地址本来应该是00-22-15-22-81-88,这里被伪造了)。

当A接收到B伪造的应答,就会更新本地的缓存(A被欺骗了),这时B就伪装成C了。

同时,B同样向C发送一个应答,应答包中发送方地址192.168.1.102(A的地址),地址是00-1948-0c(A的地址本来应该是00-163-8c5),当C收到B伪造的应答,也会更新本地缓存(C也被欺骗了),这时B就伪装成了A。

这样主机A和C都被主机B欺骗,A和C之间通讯的数据都经过了B。

实验截图:

欺骗成功

实验关键代码(发送数据包):

;

设置目的地址

[0]=00;

[1]=16;

[2]3;

[3];

[4]=8c;

[5]5;

假设源地址为本地地址

.[0]=00;

.[1]=1e;

.[2];

.[3]=94;

.[4]8;

.[5]=0c;

填充数据包

(0x0806)

(0x0001);

(0x0800);

0x06;

0x04;

(0x0002);

>;

>;

(>,6);

(1,6);

(i=0;i<18;){

[i]=1;}

(*)强制转换发送的数据包的类型

发送数据包

(());

3.试验中出现的问题以及解决方案

(1)控件无法下拉

工程运行时发现,对话框中的下拉列表只能显示第一个网卡的信息。

解决方法:

把鼠标放在下拉列表的

处,当光标的形状变成上下箭头时,点击下拉框的中间白点,向下拉即可。

(2)中的部分函数与中的函数,重定义

在过程中,出现中的一些函数以及变量重定义的错误,比如等。

解决方法:

在文件中加上

32

<>

<2>

(3)编译时出现如下问题:

 32(231):

C2079:

''''

  解决方法:

1.向库的32文件中加入如下代码,且应位于“”定义之前:

   1

           {

                ;

               ;

                [128];

         };

        

  2.将 改成 。

(4)添加时出现错误

解决方式:

把的,目录添加进6.0的环境变量中;针对每一个项目,先用打开项目,然后在">",择"",在""的输入框里添加""。

在文件中加上""和""。

(5)在欺骗的工程中出现连接错误,需要在">",择"",在""的输入框里添加"32"。

4.实践总结

实验结论:

通过了近一个多星期的努力学习与实践运用,终于制作出了一个实现网络嗅探的基本功能的网络嗅探器,较为合理、圆满的完成了本实验的各项实验要求,取得了应有的实验效果。

✧能列出监测主机的所有网卡,并显示在网卡列表框中。

✧能选择其中的一个网卡进行监听,并记录器数据信息

✧能捕获并显示流经网卡的数据包,并做相应的分析和统计

✧能设置捕获过滤规则

✧在、、、、等协议都能进行重点分析

✧能按照协议格式进行格式化显示

✧有可视化操作界面,易于使用

✧对欺骗有了比较系统的了解,可以进行比较简单的欺骗

实验体会:

通过自学,亲自动手,一点一滴的积累并实现,完成了一个具备了基本功能的网络嗅探器,受益良多。

Ø学习了开发工具包,对其在网络底层实现和接口运用的方面,有了更加清楚、较为深入的认识与掌握,熟练学会了如何利用工具开发上实现网络协议编程。

Ø通过实现了一个基于的网络嗅探器,我对网络协议栈有了更加深入的了解与认识,并懂得了基本的网络协议栈的实现与应用,对以后网络学习和网络编程,将会大有裨益。

Ø通过自己制作网络嗅探器,我对网络嗅探器的开发流程、基本原理和应用领域,有了大体的认识与掌握,知道制作网络嗅探器的基本方法与步骤,并知道如何利用网络嗅探器应用于自己所关心的网络领域。

Ø通过近一个多星期的学习、理解、实践、掌握、应用和网络嗅探器,我对新知识、新事物的学习、实践与应用的方法与途径,有了更加深入的认识与掌握,能够较为快速的汲取新知识、运用新概念、应用于新领域,这种能力的培养,才是最重要的,也将是对我以后的学习和工作,会产生很好的引导与启发作用。

Ø通过学习欺骗,可以简单的完成黑客的基本工作。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2