通信网原理实验报告.docx
- 文档编号:16174572
- 上传时间:2023-07-11
- 格式:DOCX
- 页数:43
- 大小:1.24MB
通信网原理实验报告.docx
《通信网原理实验报告.docx》由会员分享,可在线阅读,更多相关《通信网原理实验报告.docx(43页珍藏版)》请在冰点文库上搜索。
通信网原理实验报告
通信网原理课程设计报告
专业班级
姓名学号
指导教师
设计时间2013年7月
电子信息工程系
信息科学与工程学院
摘要
计算机网络嗅探器是可以窃听计算机程序在网络上发送和接收到的数据,程序实现了对抓取到的本机在网络中的通信数据的协议类型、源地址、目的地址、端口和数据包的大小加以简单的分析,改程序应用C#语言编写,实现了一个简单的网络嗅探功能。
其中一个窗体显示主页面,另一个窗体显示详细信息。
关键词:
网络嗅探器;数据包;C#
Abstract
Thecomputernetworksniffercanbetappedthecomputerprogramsonthenetworktosendandreceivethedata,theprogramhasrealizedtograbthemachineonthenetworktothecommunicationofthedataoftheagreement,thesourceaddress,purposetypeaddress,portandthesizeofthedatapacketstosimpleanalysis,theprogramwrittenapplicationc#,implementsasimplenetworksnifferfunction.Oneofthemainscreendisplayform,anotherformshowsdetailedinformation.
Keywords:
Networksniffer,Packet,C#
课题:
IP数据包的捕获与解析
1绪论
1.1开发背景
随着各种新的网络技术的不断出现、应用和发展,计算机网络的应用越来越广泛,其作用也越来越重要。
但是由于计算机系统中软硬件的脆弱性和计算机网络的脆弱性以及地理分布的位置、自然环境、自然破坏以及人为因素的影响,不仅增加了信息存储、处理的风险,也给信息传送带来了新的问题。
计算机网络安全问题越来越严重,网络破坏所造成的损失越来越大。
Internet的安全已经成为亟待解决的问题。
多数黑客入侵成功并植入后门后的第一件事就是选择一个合适当前网络的嗅探器,以获得更多的受侵者的信息。
嗅探器是一种常用的收集有用数据的方法,可以作为分析网络数据包的设备。
网络嗅探器就是利用计算机的网络接口截获其他计算机的数据报文的一种工具,而且它与一般的键盘捕获程序不同。
键盘捕获程序捕获在终端上输入的键值,而嗅探器捕获的则是真实的网络报文.如果把网络嗅探器放置于网络节点处,对网络中的数据帧进行捕获的一种被动监听手段,是一种常用的收集有用数据的方法,可以分析各种信息包并描述出网络的结构和使用的机器,由于它接收任何一个在同一网段上传输的数据包,所以也就存在着捕获密码、各种信息、秘密文档等一些没有加密的信息的可能性。
这成为黑客们常用的扩大战果的方法,用来夺取其他主机的控制权。
当然嗅探器的正当用处主要是网络管理人员分析网络的流量,以便找出所关心的网络中潜在的问题。
例如,假设网络的某一段运行得不是很好,报文的发送比较慢,而我们又不知道问题出在什么地方,此时就可以用嗅探器截获网络中的数据包,分析问题的所在。
1.2研究意义
本次课程设计是基于C#的网络嗅探器的设计与实现,由于本人能力上的限度,只是对抓取到的本机在网络中的通信数据,比如说协议类型,源、目的地址和端口、数据包的大小等加以分析,而无法做到像Sniffer或者影音神探那种成熟的嗅探器所拥有的强大功能。
作为从事网络技术方面的人员来说,要想有效地利用它、防范它,就得深入地学习、分析网络嗅探技术。
最为重要的是,对于网络嗅探器的设计与实现,使我对网络通信,数据传输和网络信息安全等有了切身的体会与融入,同时也是对大学三年的学以致用,不断提高自我的一种有效途径。
对网络嗅探器的深入研究更重要的是可以让我们的互联网世界更安全、信息更健康。
2系统分析
2.1需求分析
实现一个简单的网络嗅探器。
具备以下功能:
◆有一个简洁的易操作的计算机操作用户界面。
◆能抓取与本机网络相关的数据包。
◆能随时暂停抓取数据包。
◆能清空数据包列表。
◆能显示数据包详细的信息。
◆能保存数据包条目。
2.2开发环境
◆一台能联网并安装有WindowsXP或Windows7操作系统的计算机。
◆使用MicrosoftVisualStudio2010开发平台。
◆使用易开发的C#语言来开发。
◆必须安装有Microsoft.NETFrameWork4.0。
2.3开发相关技术介绍
2.3.1嗅探技术简介
数据在网络上是以很小的称为帧(Frame)的单位传输的,帧由几部分组成,不同的部分执行不同的功能。
帧通过特定的称为网络驱动程序的软件进行成型,然后通过网卡发送到网线上,通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。
接收端机器的以太网卡捕获到这些帧,并告诉操作系统帧已到达,然后对其进行存储。
就是在这个传输和接收的过程中,存在安全方面的问题。
每一个在局域网(LAN)上的工作站都有其硬件地址,这些地址惟一地表示了网络上的机器(这一点与Internet地址系统比较相似)。
当用户发送一个数据包时,这些数据包就会发送到LAN上所有可用的机器。
如图2.1所示:
图2.1一个简单的局域网组成
在一般情况下,网络上所有的机器都可以“听”到通过的流量,但对不属于自己的数据包则不予响应(换句话说,工作站A不会捕获属于工作站B的数据,而是简单地忽略这些数据)。
嗅探器工作在网络的底层,在网络上监听数据包来获取敏感信息。
从原理上来说,在一个实际的系统中,数据的收发是由网卡来完成的,网卡接收到传输来的数据,网卡内的单片程序接收数据帧的目的MAC地址,根据计算机上的网卡驱动程序设置的接收模式判断该不该接收,认为该接收就接收后产生中断信号通知CPU,认为不该接收就丢掉不管,所以不该接收的数据网卡就截断了,计算机根本就不知道。
对于网卡来说一般有四种接收模式:
a)广播方式:
该模式下的网卡能够接收网络中的广播信息。
b)组播方式:
设置在该模式下的网卡能够接收组播数据。
c)直接方式:
在这种模式下,只有目的网卡才能接收该数据。
d)混杂模式:
在这种模式下的网卡能够接收一切通过它的数据,而不管该数据是否是传给它的。
首先,在以太网中是基于广播方式传送数据的,也就是说,所有的物理信号都要经过我的机器。
其次,如果某个工作站的网络接口处于混杂模式,那么它就可以捕获网络上所有的数据包和帧。
Sniffor程序是一种利用以太网的特性把网络适配卡(NIC,一般为以太网卡)置为混杂模式状态的工具,一旦网卡设置为这种模式,它就能接收传输在网络上的每一个信息包,而不管该数据是否传给它的。
2.3.2网络协议
现今因特网上用到的主要协议有:
用户数据报协议(UDP),次要文件传输协议(TFTP),网际协议(IP),因特网控制报文协议(ICMP),传输控制协议(TCP),地址转换协议(ARP),虚终端协议(Telnet),反向地址转换协议(RARP),外部网关协议(EGP)版本2,引导协议(BootP),路由信息协议(RIP),距离向量多播路由协议(DVMRP)。
下面对其中的4个协议做一些简单的介绍:
①IP:
网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。
IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。
IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。
IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。
高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。
也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。
IP确认包含一个选项,叫作IPsourcerouting,可以用来指定一条源地址和目的地址之间的直接路径。
对于一些TCP和UDP的服务来说,使用了该选项的IP包好象是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。
这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。
那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。
②TCP:
如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。
TCP将包排序并进行错误检查,同时实现虚电路间的连接。
TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。
TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。
应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。
面向连接的服务(例如Telnet、FTP、rlogin、XWindows和SMTP)需要高度的可靠性,所以它们使用了TCP。
DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。
③UDP:
UDP与TCP位于同一层,但对于数据包的顺序错误或重发。
因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。
相对于FTP或Telnet,这些服务需要交换的信息量较小。
使用UDP的服务包括NTP(网落时间协议)和DNS(DNS也使用TCP)。
欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。
④ICMP:
ICMP与IP位于同一层,它被用来传送IP的的控制信息。
它主要是用来提供有关通向目的地址的路径信息。
ICMP的‘Redirect’信息通知主机通向其他系统的更准确的路径,而‘Unreachable’信息则指出路径有问题。
另外,如果路径不可用了,ICMP可以使TCP连接‘体面地’终止。
PING是最常用的基于ICMP的服务。
2.3.3数据包简介
“包”(Packet)是TCP/IP协议通信传输中的数据单位,一般也称“数据包”。
有人说,局域网中传输的不是“帧”(Frame)吗?
没错,但是TCP/IP协议是工作在OSI模型第三层(网络层)、第四层(传输层)上的,而帧是工作在第二层(数据链路层)。
上一层的内容由下一层的内容来传输,所以在局域网中,“包”是包含在“帧”里的。
OSI(OpenSystemInterconnection,开放系统互联)模型是由国际标准化组织(ISO)定义的标准,它定义了一种分层体系结构,在其中的每一层定义了针对不同通信级别的协议。
OSI模型有5层,1到5层分别是:
物理层、数据链路层、网络层、传输层、应用层。
OSI模型在逻辑上可分为两个部分:
低层的1至3层关注的是原始数据的传输;高层的4至5层关注的是网络下的应用程序。
数据包主要由“目的IP地址”、“源IP地址”、“净载数据”等部分构成。
数据包的结构与我们平常写信非常类似,目的IP地址是说明这个数据包是要发给谁的,相当于收信人地址;源IP地址是说明这个数据包是发自哪里的,相当于发信人地址;而净载数据相当于信件的内容。
如图2.2所示:
图2.2数据包封装格式
正是因为数据包具有这样的结构,安装了TCP/IP协议的计算机之间才能相互通信。
我们在使用基于TCP/IP协议的网络时,网络中其实传递的就是数据包。
比如说当你上网打开网页,这个简单的动作,就是你先发送数据包给网站,它接收到了之后,根据你发送的数据包的IP地址,返回给你网页的数据包,也就是说,网页的浏览,实际上就是数据包的交换。
理解数据包,对于网络管理的网络安全具有至关重要的意义。
2.4可行性分析
可行性研究(FeasibilityStudy)是通过对项目的主要内容和配套条件,如市场需求、资源供应、建设规模、工艺路线、设备选型、环境影响、资金筹措、盈利能力等,从技术、经济、工程等方面进行调查研究和分析比较,并对项目建成以后可能取得的财务、经济效益及社会环境影响进行预测,从而提出该项目是否值得投资和如何进行建设的咨询意见,为项目决策提供依据的一种综合性的系统分析方法。
可行性研究应具有预见性、公正性、可靠性、科学性的特点。
当然这次论文的可行性研究并没有上述的如此意义重大,只是理清整个系统分析和设计的大致过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。
它的目的不是解决问题,而是确定问题是否值得去解决。
当然在现阶段这样的信息安全背景下,网络嗅探器的研究与使用的价值是毋庸置疑的。
不仅可以有效地诊断网络状况,更可以为信息安全战打攻坚战。
3总体设计
3.1设计原理
嗅探侦听主要有两种途径,一种是将侦听工具软件放到网络连接的设备或者放到可以控制网络连接设备的电脑上,(比如网关服务器,路由器)——当然要实现这样的效果可能也需要通过其他黑客技术来实现:
比如通过木马方式将嗅探器发给某个网络管理员,使其不自觉的为攻击者进行了安装。
另外一种是针对不安全的局域网(采用交换HUB实现),放到个人电脑上就可以实现对整个局域网的侦听,这里的原理是这样的:
共享HUB获得一个子网内需要接收的数据时,并不是直接发送到指定主机,而是通过广播方式发送到每个电脑,对于处于接受者地位的电脑就会处理该数据,而其他非接受者的电脑就会过滤这些数据,这些操作与电脑操作者无关,是系统自动完成的,但是电脑操作者如果有意的话,就可以将那些原本不属于他的数据打开,这就是安全隐患。
以太网的数据传输是基于“共享”原理的:
所有的同一本地网范围内的计算机共同接收到相同的数据包。
这意味着计算机直接的通讯都是透明可见的。
正是因为这样的原因,以太网卡都构造了硬件的“过滤器”。
这个过滤器将忽略掉一切和自己无关的网络信息。
事实上是忽略掉了与自身MAC地址不符合的信息。
嗅探程序正是利用了这个特点,它主动的关闭了这个过滤器,也就是前面提到的设置网卡“混杂模式”。
因此,嗅探程序就能够接收到整个以太网内的网络数据了信息了。
举例一下,很多的小型局域网计算机用户都为实现文件和打印共享,安装了“NetBEUI”因为它不是基于TCP/IP协议的,所以来自于网络的黑客一样无法得知他们的设备情况。
基于Raw协议,传输和接收都在以太网里起着支配作用。
你不能直接发送一个Raw数据给以太网,你必须先做一些事情,让以太网能够理解你的意思。
这有点类似于发短信的方法,你不可能直接把一条短信直接发送出去,你还要输入对方的手机号码才可以发送,同样的网络上的传输数据也是一个道理。
以下是一个帮助我们理解数据传送的简单图示:
__________
/......................\
/…...Internet……\
+-----++----+.......................+-----+
用户A ----- 路由 ............. 用户B
+-----+^+----+.............+-----+
\............................/
\------------------/
+----------+
嗅探器
+------+
用户AIP地址:
192.168.1.10
用户BIP地址:
192.168.1.1
现在知道用户A要于用户B进行计算机通讯,用户A需要为192.168.1.10到用户B192.168.1.1的通讯建立一个IP包。
这个IP包在网络上传输,它必须能够穿透路由器。
因此,用户A必须首先提交这个包给路由器。
由每个路由器考查目地IP地址然后决定传送路径。
用户A所知道的只是本地与路由连接和用户B的IP地址。
用户A并不清楚网络的结构情况和路由走向。
用户A必须告诉路由器准备发送数据包的情况,以太网数据传输结构大概是这样的:
+--+--+--+--+--+--+
目标MAC
+--+--+--+--+--+--+
源MAC
+--+--+--+--+--+--+
0x0800
+--+--+-----------+
IP包
+--+--+--+--+-----+
CRC校验
+--+--+--+--+
理解一下这个结构,用户A的计算机建立了一个数据包假设它由100个字节的长度(假设一下,20个字节是IP信息,20个字节是TCP信息,还有60个字节为传送的数据)。
现在把这个数据包发送给以太网,放14个字节在目的MAC地址之前,源MAC地址还要置一个0x0800的标记,他指示出了TCP/IP栈后的数据结构。
同时,也附加了4个字节用于做CRC校验(CRC校验用来检查传输数据的正确性)。
现在发送数据到网络,所有在局域网内的计算机通过适配器都能够发现这个数据包,其中也包括路由适配器,嗅探器和其他一些机器。
通常,适配器都具有一块芯片用来做结构比较的,检查结构中的目地MAC地址和自己的MAC地址,如果不相同,则适配器会丢弃这个结构。
这个操作会由硬件来完成,所以,对于计算机内的程序来说,整个过程时毫无察觉的。
当路由器的以太网适配器发现这个结构后,它会读取网络信息,并且去掉前14个字节,跟踪4个字节。
查找0x0800标记,然后对这个结构进行处理(它将根据网络状况推测出下一个最快路由节点,从而最快传送数据到预定的目标地址)。
设想,只有路由机器能够检查这个结构,并且所有其他的机器都忽略这个结构,则嗅探器无论如何也无法检测到这个结构的。
3.2功能说明
本课程设计我只对抓取到的本机在网络中的通信数据(如协议类型,源、目的地址和端口、数据包的大小等)加以分析,实现一个简单的网络嗅探器。
一个窗体显示主页面,另一个页面显示详细的包信息。
详细信息页面,我们显示一下信息:
开始时间:
嗅探器抓取数据包的时间;
源端口:
源目的IP地址+端口号;
目的端口:
目的IP地址+端口号;
协议类型:
只分析一下常见的类型,如ICMP,IGMP,IP,TCP,UDP;
版本信息:
协议的版本;
生存时间:
数据包的生命周期;
报头大小:
报文报首部大小;
报文总长:
整个数据报的大小;
优先级别:
提供七个级别,分别是Routine=0,Priority=1,Immediate=2,Flash=3,FlashOverride=4,CRITICECP=5,InternetworkControl=6,NetworkControl=7;
延迟:
NormalDelay=0、LowDelay=1;
吞吐量:
NormalThroughput=0,HighThroughput=1;
可靠性:
NormalReliability=0,HighReliability=1;
3.3设计流程
根据系统分析后设计出相应的流程图。
内容主要包括初始化,获得主机IP列表,绑定Socket,开始捕获数据,分析数据,显示数据项,导出日志文件,根据用户操作退出程序。
如图3.1所示:
图3.1程序流程图
4详细设计
4.1界面设计
主程序捕获数据包的界面设计如图4.1所示:
图4.1主程序捕获数据包界面
分析数据包的界面设计如图4.2所示:
图4.2分析数据包界面
4.2主要功能函数说明
(1)在主程序的Load方法中初始化,获取本地计算机的IPv4地址,并添加到ComboBox中显示出来。
privatevoidPacketMonitor_Load(objectsender,EventArgse)
{
//取得计算机的所有IPv4,并以列表的形式显示出来
IPAddress[]hosts=PacketMonitor.GetLocalhostIPv4Addresses();
if(hosts.Length==0)
{
thrownewNotSupportedException("没有安装网卡");
}
for(inti=0;i { this.cbxIPs.Items.Add(hosts[i].ToString()); } m_PacketTracks=newPacketTrack[this.cbxIPs.Items.Count]; for(inti=0;i { m_PacketTracks[i]=newPacketTrack(hosts[i]); m_PacketTracks[i].NewPacket+=newNewPacketEventHandler(this.OnNewPacket); } m_Packets=newArrayList(); } (2)当点击开始捕获数据包按钮后,启动Start函数,开始捕获并接收数据包。 publicvoidStart() { if(m_Monitor==null) { try { m_Monitor=new Socket(AddressFamily.InterNetwork,SockeType.Raw,ProtocolType.IP); m_Monitor.Bind(newIPEndPoint(IP,9980)); m_Monitor.SetSocketOption(SocketOptionLevel.IP,SocketOptionName.HeaderIncluded,1); m_Monitor.IOControl(SIO_RCVALL,BitConverter.GetBytes((int)1),null);//低级别操作模式 m_Monitor.BeginReceive(m_Buffer,0,m_Buffer.Length,SocketFlags.None,newAsyncCallback(this.OnReceive),null); } catch { m_Monitor=null; thrownewSocketException(); } } } (3)当捕获到数据包时,对其进行处理的函数如下: publicPacket(byte[]raw,DateTimetime) { if(raw==null) { hrownewArgumentNullException(); } if(raw.Length<20) { thrownewArgumentException(); } m_Raw=raw; m_Time=time; m_Version=(raw[0]&0xF0)>>4; m_HeaderLength=(raw[0]&0x0F)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通信网 原理 实验 报告