网络嗅探器的设计实现.docx

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

网络嗅探器的设计实现.docx

《网络嗅探器的设计实现.docx》由会员分享,可在线阅读,更多相关《网络嗅探器的设计实现.docx(14页珍藏版)》请在冰点文库上搜索。

网络嗅探器的设计实现.docx

网络嗅探器的设计实现

 

《网络与信息安全》课程设计报告

 

班级

学号:

XX:

题目:

评阅:

 

成绩:

 

2011年1月

一、开发背景

1、网络安全现状。

2、开发意义。

二、设计分析

1、实现目标。

2、开发技术简介。

三、详细设计

1、嗅探原理。

2、代码设计。

四、测试运行

五、总结

六、参考文献

 

摘要

网络嗅探器是作用在网络上的一种监听程序,它是系统管理员的一个得力助手,管理员可以用它来分析网络。

例如当网络繁忙时可利用它来查找是哪一段网络繁忙,数据报文是属于哪一种协议,这样可以计算出哪种业务受欢迎。

但是当有黑客使用它时,它又变得很可怕。

它可以非法获取一些XX性信息,如XX、密码等,它带来的负面破坏是非常大的。

作为从事网络安全技术方面的人员来说,要想有效地利用它、防X它就得深入地学习、分析网络嗅探技术。

1、本设计的基本任务是设计一个嗅探软件,实现对常用网络数据包抓取、分析。

2、软件所要完成对本机在网络中的通信数据,比如协议类型,源、目的地址和端口、数据包的大小等加以分析的功能。

3、本设计用到的开发工具为MicrosoftVisualStudio2010开发环境为Windows7。

4、程序由韩瑞彬同学和我共同完成,本人主要负责主界面的设计和网络数据包的抓取,韩瑞彬同学负责对数据包的解析设计。

关键字:

嗅探器,安全,黑客,数据报文

 

一、开发背景

1、网络安全现状

随着各种新的网络技术的不断出现、应用和发展,计算机网络的应用越来越广泛,其作用也越来越重要。

但是由于计算机系统中软硬件的脆弱性和计算机网络的脆弱性以及地理分布的位置、自然环境、自然破坏以及人为因素的影响,不仅增加了信息存储、处理的风险,也给信息传送带来了新的问题。

计算机网络安全问题越来越严重,网络破坏所造成的损失越来越大。

Internet的安全已经成为亟待解决的问题。

多数黑客入侵成功并植入后门后的第一件事就是选择一个合适当前网络的嗅探器,以获得更多的受侵者的信息。

嗅探器是一种常用的收集有用数据的方法,可以作为分析网络数据包的设备。

网络嗅探器就是利用计算机的网络接口截获其他计算机的数据报文的一种工具,而且它与一般的键盘捕获程序不同。

键盘捕获程序捕获在终端上输入的键值,而嗅探器捕获的则是真实的网络报文.如果把网络嗅探器放置于网络节点处,对网络中的数据帧进行捕获的一种被动监听手段,是一种常用的收集有用数据的方法,可以分析各种信息包并描述出网络的结构和使用的机器,由于它接收任何一个在同一网段上传输的数据包,所以也就存在着捕获密码、各种信息、秘密文档等一些没有加密的信息的可能性。

这成为黑客们常用的扩大战果的方法,用来夺取其他主机的控制权。

当然嗅探器的正当用处主要是网络管理人员分析网络的流量,以便找出所关心的网络中潜在的问题。

例如,假设网络的某一段运行得不是很好,报文的发送比较慢,而我们又不知道问题出在什么地方,此时就可以用嗅探器截获网络中的数据包,分析问题的所在。

2、开发意义

本次设计只是对抓取到的本机在网络中的通信数据,比如说协议类型,源、目的地址和端口、数据包的大小等加以分析,而无法做到像Sniffer或者影音神探那种成熟的嗅探器所拥有的强大功能。

作为从事网络技术方面的人员来说,要想有效地利用它、防X它,就得深入地学习、分析网络嗅探技术。

最为重要的是,对于网络嗅探器的设计与实现,使我对网络通信,数据传输和网络信息安全等有了切身的体会与融入,同时也是对网络安全技术这门课的学以致用,不断提高自我的一种有效途径。

二、设计分析

1、实现目标

(1)实现网络嗅探器的界面。

(2)实现抓取数据包的功能。

(3)实现暂停抓取数据包功能。

(4)实现清空列表功能。

2、开发技术简介

(1)TCP/IP协议分析

TCP/IP是供已连接因特网的计算机进行通信的通信协议。

TCP/IP定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的标准。

TCP/IP是一个四层的分层体系结构。

高层为传输控制协议,它负责聚集信息或把文件拆分成更小的包。

这些包通过网络传送到接收端的TCP层,接收端的TCP层把包还原为原始文件。

低层是网际协议,它处理每个包的地址部分,使这些包正确的到达目的地。

网络上的网关计算机根据信息的地址来进行路由选择。

即使来自同一文件的分包路由也有可能不同,但最后会在目的地汇合。

TCP/IP使用客户端/服务器模式进行通信。

TCP/IP通信是点对点的,意思是通信是网络中的一台主机与另一台主机之间的。

TCP/IP与上层应用程序之间可以说是“没有国籍的”,因为每个客户请求都被看做是与上一个请求无关的。

正是它们之间的“无国籍的”释放了网络路径,才是每个人都可以连续不断的使用网络。

许多用户熟悉使用TCP/IP协议的高层应用协议。

众所周知,如今电脑上因特网都要作TCP/IP协议设置,显然该协议成了当今地球村“人与人”之间的“牵手协议”。

通俗而言:

TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。

而IP是给因特网的每一台电脑规定一个地址。

1974年12月,卡恩、瑟夫的第一份TCP协议详细说明正式发表。

当时美国国防部与三个科学家小组签定了完成TCP/IP的协议,结果由瑟夫领衔的小组捷足先登,首先制定出了通过详细定义的TCP/IP协议标准。

当时作了一个试验,将信息包通过点对点的卫星网络,再通过陆地电缆,再通过卫星网络,再由地面传输,贯串欧洲和美国,经过各种电脑系统,全程9.4万公里竟然没有丢失一个数据位,远距离的可靠数据传输证明了TCP/IP协议的成功。

1983年1月1日,运行较长时期曾被人们习惯了的NCP被停止使用,TCP/IP协议作为因特网上所有主机间的共同协议,从此以后被作为一种必须遵守的规则被肯定和应用。

正是由于TCP/IP协议,才有今天“地球村”因特网的巨大发展。

以下简单介绍TCP/IP中的协议都具备什么样的功能,都是如何工作的:

1、IP

IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。

IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。

IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。

高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。

也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。

IP确认包含一个选项,叫做IPsourcerouting,可以用来指定一条源地址和目的地址之间的直接路径。

对于一些TCP和UDP的服务来说,使用了该选项的IP包好像是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。

这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。

那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。

2、TCP

如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。

TCP将包排序并进行错误检查,同时实现虚电路间的连接。

TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。

TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。

应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。

3、UDP

UDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。

因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。

相对于FTP或Telnet,这些服务需要交换的信息量较小。

使用UDP的服务包括NTP(网络时间协议)和DNS(DNS也使用TCP)。

4、ICMP

ICMP与IP位于同一层,它被用来传送IP的控制信息。

它主要是用来提供有关通向目的地址的路径信息。

ICMP的‘Redirect’信息通知主机通向其他系统的更准确的路径,而‘Unreachable’信息则指出路径有问题。

另外,如果路径不可用,ICMP可以使TCP连接‘体面地’终止。

PING是最常用的基于ICMP的服务。

(2)数据包简介

包是TCP/IP协议通信中的基本的数据单位之一,一般也叫数据包。

必须把内装产品的包装盒放到一个邮局指定的专用纸箱里,这样才能够邮寄。

这里,产品包装盒相当于数据包,里面放着的产品相当于可用的数据,而专用纸箱就相当于帧,且一个帧中只有一个数据包。

“包”听起来非常抽象,那么是不是不可见的呢?

通过一定技术手段,是可以感知到数据包的存在的。

通过数据包捕获软件,也可以将数据包捕获并加以分析。

就是用网络嗅探器捕获数据包,可以查看捕获到的数据包的MAC地址、IP地址、协议类型端口号等细节。

通过分析这些数据,网管员就可以知道网络中到底有什么样的数据包在活动了。

数据包的结构非常复杂,不是三言两语能够说清的,在这里主要了解一下它的关键构成就可以了,这对于理解TCP/IP协议的通信原理是非常重要的。

数据包主要由“目的IP地址”、“源IP地址”、“净载数据”等部分构成。

数据包的结构与我们平常写信非常类似,目的IP地址是说明这个数据包是要发给谁的,相当于收信人地址;源IP地址是说明这个数据包是发自哪里的,相当于发信人地址;而净载数据相当于信件的内容。

正是因为数据包具有这样的结构,安装了TCP/IP协议的计算机之间才能相互通信。

我们在使用基于TCP/IP协议的网络时,网络中其实传递的就是数据包。

比如说当你上网打开网页,这个简单的动作,就是你先发送数据包给,它接收到了之后,根据你发送的数据包的IP地址,返回给你网页的数据包,也就是说,网页的浏览,实际上就是数据包的交换。

理解数据包,对于网络管理的网络安全具有至关重要的意义。

(3)C#语言简介

C#是微软于2000年提出的一种源于C++、类似于Java的面向对象编程语言,适合于分布式环境中的组件开发。

C#是专门为.NET设计的,也是.NET编程的首选语言。

C#的产生是因为微软在.NET上需要一种类似Java的语言,而Java本身却不能胜任这一需求。

C#太像C++了,以至于它很难给人带来体验新事物时的那种兴奋。

不过,绝大部分的C++开发者将会因为C#保留了C++中大部分其喜欢的、强大的、令人激动的功能而选择使用它。

C#通过避免一般的编程错误和自动资源管理,使得C#的稳定性得到了极大的增强。

另外,C#语言功能强大且可以实现对象之间的转换,轻松实现各种对象转换成字符串。

(4)嗅探技术简介

数据在网络上是以很小的称为帧(Frame)的单位传输的,帧由几部分组成,不同的部分执行不同的功能。

帧通过特定的称为网络驱动程序的软件进行成型,然后通过网卡发送到网线上,通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。

接收端机器的以太网卡捕获到这些帧,并告诉操作系统帧已到达,然后对其进行存储。

就是在这个传输和接收的过程中,存在安全方面的问题。

每一个在局域网(LAN)上的工作站都有其硬件地址,这些地址惟一地表示了网络上的机器(这一点与Internet地址系统比较相似)。

当用户发送一个数据包时,这些数据包就会发送到LAN上所有可用的机器。

在一般情况下,网络上所有的机器都可以“听”到通过的流量,但对不属于自己的数据包则不予响应(换句话说,工作站A不会捕获属于工作站B的数据,而是简单地忽略这些数据)。

嗅探器工作在网络的底层,在网络上监听数据包来获取敏感信息。

从原理上来说,在一个实际的系统中,数据的收发是由网卡来完成的,网卡接收到传输来的数据,网卡内的单片程序接收数据帧的目的MAC地址,根据计算机上的网卡驱动程序设置的接收模式判断该不该接收,认为该接收就接收后产生中断信号通知CPU,认为不该接收就丢掉不管,所以不该接收的数据网卡就截断了,计算机根本就不知道。

对于网卡来说一般有四种接收模式:

a)广播方式:

该模式下的网卡能够接收网络中的广播信息。

b)组播方式:

设置在该模式下的网卡能够接收组播数据。

c)直接方式:

在这种模式下,只有目的网卡才能接收该数据。

d)混杂模式:

在这种模式下的网卡能够接收一切通过它的数据,而不管该数据是否是传给它的。

首先,在以太网中是基于广播方式传送数据的,也就是说,所有的物理信号都要经过我的机器。

其次,如果某个工作站的网络接口处于混杂模式,那么它就可以捕获网络上所有的数据包和帧。

Sniffer程序是一种利用以太网的特性把网络适配卡(NIC,一般为以太网卡)置为混杂模式状态的工具,一旦网卡设置为这种模式,它就能接收传输在网络上的每一个信息包,而不管该数据是否传给它的。

三、详细设计

1、嗅探原理

要知道在以太网中,所有的通讯都是广播的,也就是说通常在同一个网段的所有网络接口都可以访问在物理媒体上传输的所有数据,而每一个网络接口都有一个唯一的硬件地址,这个硬件地址也就是网卡的MAC地址,大多数系统使用48比特的地址,这个地址用来表示网络中的每一个设备,一般来说每一块网卡上的MFC地址都是不同的,每个网卡厂家得到一段地址,然后用这段地址分配给其生产的每个网卡一个地址。

在硬件地址和IP地址间使用ARP和RARP协议进行相互转换。

在正常的情况下,一个网络接口应该只响应这样的两种数据帧:

1.与自己硬件地址相匹配的数据帧。

2.发向所有机器的广播数据帧。

我们来看一个简单的例子,如图一所示,机器A、B、C与集线器HUB相连接,集线器HUB通过路由器Router访问外部网络。

这是一个很简单也很常见的情况,比如说在公司大楼里,我所在的网络部办公室里的几台机器通过集线器连接,而网络部、开发部、市场部也是同样如此,几个部门的集线器通过路由器连接。

还是回到我们的图一上来,值得注意的一点是机器A、B、C使用一个普通的HUB连接的,不是用SWITCH,也不是用ROUTER,使用SWITCH和ROUTER的情况要比这复杂得多。

我们假设一下机器A上的管理员为了维护机器C,使用了一个FTP命令向机器C进行远程登陆,那么在这个用HUB连接的网络里数据走向过程是这样的。

首先机器A上的管理员输入的登陆机器C的FTP口令经过应用层FTP协议、传输层TCP协议、网络层IP协议、数据链路层上的以太网驱动程序一层一层的包裹,最后送到了物理层,我们的网线上。

接下来数据帧送到了HUB上,现在由HUB向每一个接点广播由机器A发出的数据帧,机器B接收到由HUB广播发出的数据帧,并检查在数据帧中的地址是否和自己的地址相匹配,发现不是发向自己的后把这数据帧丢弃,不予理睬。

而机器C也接收到了数据帧,并在比较之后发现是发现自己的,接下来他就对这数据帧进行分析处理。

在上面这个简单的例子中,机器B上的管理员如果很好奇,他很想知道究竟登陆机器C上FTP口令是什么?

那么他要做的很简单,仅仅需要把自己机器上的网卡置于混杂模式,并对接收到的数据帧进行分析,从而找到包含在数据帧中的口令信息。

2、代码设计

主界面的设计对程序的成败起着至关重要的作用,所以在设计代码的时候要兼顾程序的可扩展性和简洁性。

下面给出主界面部分代码:

staticvoidMain(){

try{

Application.Run(newPacketMonitorForm());

}catch(Exceptione){

MessageBox.Show(e.Message,"网络嗅探器",MessageBoxButtons.OK,MessageBoxIcon.Error);

}

}

privatevoidInitialize(){

//取得计算机的所有端口,并以列表的形式显示出来

IPAddress[]hosts=Dns.Resolve(Dns.GetHostName()).AddressList;

if(hosts.Length==0)

thrownewNotSupportedException("Thisputerdoesnothavenon-loopbackinterfacesinstalled!

");

for(inti=0;i

HostsMenu.MenuItems.Add(hosts[i].ToString(),newEventHandler(this.OnHostsClick));

}

m_PacketMonitors=newPacketMonitor[HostsMenu.MenuItems.Count];

for(inti=0;i

m_PacketMonitors[i]=newPacketMonitor(hosts[i]);

m_PacketMonitors[i].NewPacket+=newNewPacketEventHandler(this.OnNewPacket);

}

m_Packets=newArrayList();

}

privatevoidPacketMonitormForm_Closing(objectsender,CancelEventArgse){

OnToolBarClick(this,newToolBarButtonClickEventArgs(StopButton));

}

publicvoidOnToolBarClick(objectsender,ToolBarButtonClickEventArgse){

if(e.Button==StopButton){//停止监听所有的端口

for(inti=0;i

m_PacketMonitors[i].Stop();

HostsMenu.MenuItems[i].Checked=false;

}

StatusBar.Text="停止嗅探"+string.Format("数据包总量:

{0}字节数:

{1}bytes",m_Packets.Count,m_PacketsSize);

}elseif(e.Button==StartButton){//开始监听所有的端口

for(inti=0;i

try{

m_PacketMonitors[i].Start();

}catch(Exceptionex){

MessageBox.Show(this,"界面出现一个错误"+m_PacketMonitors[i].IP.ToString()+"\r\n\r\n["+ex.Message+"]","Mentalis.orgPacketMonitor",MessageBoxButtons.OK,MessageBoxIcon.Error);

}

HostsMenu.MenuItems[i].Checked=true;

}

StatusBar.Text="检测所有端口";

}elseif(e.Button==ClearButton){//清除列表

PacketList.Items.Clear();

m_Packets.Clear();

StatusBar.Text="清空列表";

}elseif(e.Button==AboutButton){

AboutFormaf=newAboutForm();

af.ShowDialog(this);

}

}

(详细代码见软件压缩包。

四、测试运行

软件的运行情况如下列图:

图4-1

主界面示意图

图4-2

软件抓包示意图

图4-3

开发信息示意图

五、总结

这次课程设计使我受益匪浅,以前对于知识的学习,我仅限于课本。

但是,通过此次课程设计,我意识到想要把知识和实际联系起来才会有意义。

我们不能死读书,能在实际中运用才能把知识掌握的够牢固,对以后的学习也有很大的帮助。

其次,我明白了团队合作的重要性。

若是一个人编写软件,很多时候会感到无从下手,但是有一个搭档,有人帮你出主意,你便多了一条思路。

而且遇到难题的时候,可以互相讨论,加快了软件的开发速度。

还有就是明白了网络安全的重要性,现在的社会是信息爆炸的时代,网络的诞生在给我们带来便利的同时,也隐藏着许多的隐患。

我们在网络上要保护自己的隐私不被别人侵犯,就要用到网络安全工具,虽然嗅探器知识其中的一种,但是意义也是不容忽视的。

最后感谢李老师对我们的谆谆教导,使我对网络安全的认识进一步加深,以后会更加努力,争取取得更好的成绩。

 

六、参考文献

《C#入门经典》清华大学(美)KarliWatsonChristianNagel等著

《C#课程设计案例精编》清华大学段德亮,余健,X仁才编著

XX百科:

TCP/IP协议分析、嗅探技术、数据包

《计算机网络安全技术》王群编著

 

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

当前位置:首页 > 临时分类 > 批量上传

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

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