网络嗅探器的设计与实现

1  引 言

1.1  开发背景

随着各种新的网络技术的不断出现、应用和发展,计算机网络的应用越来越广泛,其作用也越来越重要。但是由于计算机系统中软硬件的脆弱性和计算机网络的脆弱性以及地理分布的位置、自然环境、自然破坏以及人为因素的影响,不仅增加了信息存储、处理的风险,也给信息传送带来了新的问题。计算机网络安全问题越来越严重,网络破坏所造成的损失越来越大。Internet的安全已经成为亟待解决的问题。多数黑客入侵成功并植入后门后的第一件事就是选择一个合适当前网络的嗅探器,以获得更多的受侵者的信息。嗅探器是一种常用的收集有用数据的方法,可以作为分析网络数据包的设备。网络嗅探器就是利用计算机的网络接口截获其他计算机的数据报文的一种工具,而且它与一般的键盘捕获程序不同。键盘捕获程序捕获在终端上输入的键值,而嗅探器捕获的则是真实的网络报文.如果把网络嗅探器放置于网络节点处,对网络中的数据帧进行捕获的一种被动监听手段,是一种常用的收集有用数据的方法,可以分析各种信息包并描述出网络的结构和使用的机器,由于它接收任何一个在同一网段上传输的数据包,所以也就存在着捕获密码、各种信息、秘密文档等一些没有加密的信息的可能性。这成为黑客们常用的扩大战果的方法,用来夺取其他主机的控制权。当然嗅探器的正当用处主要是网络管理人员分析网络的流量,以便找出所关心的网络中潜在的问题。例如,假设网络的某一段运行得不是很好,报文的发送比较慢,而我们又不知道问题出在什么地方,此时就可以用嗅探器截获网络中的数据包,分析问题的所在。[1]

1.2  开发意义

本次毕业设计是基于C#的网络嗅探器的设计与实现,由于本人能力上的限度,只是对抓取到的本机在网络中的通信数据,比如说协议类型,源、目的地址和端口、数据包的大小等加以分析,而无法做到像Sniffer或者影音神探那种成熟的嗅探器所拥有的强大功能。作为从事网络技术方面的人员来说,要想有效地利用它、防范它,就得深入地学习、分析网络嗅探技术。最为重要的是,对于网络嗅探器的设计与实现,使我对网络通信,数据传输和网络信息安全等有了切身的体会与融入,同时也是对大学四年的学以致用,不断提高自我的一种有效途径。

2  系统分析

2.1  设计概述

基于C#的网络嗅探器的设计与实现,首先就是要设定好实现的目标,确定开发的环境。有个合理的设计目标使得在设计过程中不茫然,思路更清楚。而一个好的开发环境对提高开发的效率同样起着很重要的作用。

2.1.1  实现目标

实现一个简单的网络嗅探器。具备以下功能:

1、实现一个简洁的易操作的计算机操作用户界面

2、实现抓取数据包的功能

3、实现暂停抓取数据包的功能

4、实现清空列表的功能

5、实现显示数据包详细信息的显示功能

2.1.2  开发环境

Microsoft Visual Studio 2005,Windows XP

2.2  开发相关技术简介

本节将对本设计中用到的一些主要技术进行简单的介绍。

2.2.1  C#语言简介

C#是微软于2000年提出的一种源于C++、类似于Java的面向对象编程语言,适合于分布式环境中的组件开发。C# 是专门为.NET设计的,也是.NET编程的首选语言。C#的产生是因为微软在.NET上需要一种类Java的语言,而Java本身却不能胜任这一需求。C#太像C++了,以至于它很难给人带来体验新事物时的那种兴奋。不过,绝大部分的C++开发者将会因为C#保留了C++中大部分其喜欢的、强大的、令人激动的功能而选择使用它。C#通过避免一般的编程错误和自动资源管理,使得C#的稳定性得到了极大的增强。另外,C#语言功能强大且可以实现对象之间的转换,轻松实现各种对象转换成字符串。鉴于以上种种,我选用C#作为我本次设计的开发语言。[2]

2.2.2  嗅探技术简介

数据在网络上是以很小的称为帧(Frame)的单位传输的,帧由几部分组成,不同的部分执行不同的功能。帧通过特定的称为网络驱动程序的软件进行成型,然后通过网卡发送到网线上,通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。接收端机器的以太网卡捕获到这些帧,并告诉操作系统帧已到达,然后对其进行存储。就是在这个传输和接收的过程中,存在安全方面的问题。

每一个在局域网(LAN)上的工作站都有其硬件地址,这些地址惟一地表示了网络上的机器(这一点与Internet地址系统比较相似)。当用户发送一个数据包时,这些数据包就会发送到LAN上所有可用的机器。[3]

         

                     图示:一个简单的局域网组成

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

嗅探器工作在网络的底层,在网络上监听数据包来获取敏感信息。从原理上来说,在一个实际的系统中,数据的收发是由网卡来完成的,网卡接收到传输来的数据,网卡内的单片程序接收数据帧的目的MAC地址,根据计算机上的网卡驱动程序设置的接收模式判断该不该接收,认为该接收就接收后产生中断信号通知CPU,认为不该接收就丢掉不管,所以不该接收的数据网卡就截断了,计算机根本就不知道。对于网卡来说一般有四种接收模式:

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

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

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

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

首先,在以太网中是基于广播方式传送数据的,也就是说,所有的物理信号都要经过我的机器。其次,如果某个工作站的网络接口处于混杂模式,那么它就可以捕获网络上所有的数据包和帧。

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

2.2.3  TCP/IP协议

因特网是一个发展非常活跃的领域。在1968年,它的早期研究成果开始崭露头角,后来便出现了它的前身ARPANET,ARPANET为表现因特网特性的试验平台做出了重大贡献,1973年,因特网正式面世。从那时起,关于因特网的研究和努力就一直没有间断过,其中大部分努力都是围绕着被称为网络的一个新型赛博空间所需要的标准而进行的。因特网协议及其标准与世界上任何其他事物的结构不同,它总是由一些机构或专业人士中的个人首先提出的。为了了解新的协议是如何出现并最终成为标准的,应该首先熟悉缩写词RFC,即Request for Comment。它的发展变迁过程要追溯到1 9 6 9年,起因是由于因特网的成员过于分散。正如这个词的字面意思所示,这些文档是一些实用文档、方法、测试结果、模型甚至完整的规范。因特网社会的成员可以阅读,也可以把意见反馈给RFC,如果这些想法(或基本原理)被社会接受,就有可能成为标准。在因特网社会中关于R F C的用法(M O)以及如何操作并没有太大的变化。1969年,当时只有一个网络,整个社会不超过一百位专业人员;随着因特网的飞速发展,因特网不但需要一个机构来集中和协调这些成果,并且需要制定一个最低要求的准则,至少能在成员之间进行有效的通信并取得相互了解。1974年前后,摆在ARPANET面前的形势很清晰了,通信联络需要进一步扩展,它需要的不仅是要能容纳成倍增加的通信媒体,而且要了解早已存在于群组中的许多领域的意义。这个领域需要一个管理者。大约在1977年,随着作为因特网实验备忘录(IEN)一部分的许多实验的进行,著名的T C P / I P协议获得了发展的动力。没过多久(1986年),为了RFC讨论的需要,需要建立一个由工程技术人员组成的、对标准的发展负责的工作机构,以便有效地引导因特网的发展成长,这样,因特网工程工作组

(INENG)成立了。今天,因特网工程部(IETF)和因特网研究部(TRTF)成为对因特网近期工程需求和远期研究目标负责、并担负重任的两个工作组。这两个组织曾直接隶属于国际网络执行委员会(IAB),现在属于因特网协会(1992年成立),这个协会最终也是为因特网技术的发展负责的。

但是,如果你是一个因特网上的常客,可能对缩略词IAB并不满意,的确,在IAB的逐步发展并走向成熟过程中,IAB将它的名字改为“Internet Architecture Board”(由“Activities”改为“Architecture”),因为I A B在因特网发展的运作方面并没起多大作用。谈到RFC标准,那么首先考虑到的应该是RFC733。如果有关于标准的想法或对因特网有益的新技术,可以把它作为RFC提交给因特网社会。作为IAB成员之一的RFC编辑,决定着RFC的发表,对任一正式文档,RFC都有一种确定的风格和格式。[5]

现今因特网上用到的主要协议有:用户数据报协议(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确认包含一个选项,叫作IP source routing,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好象是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。 

② TCP:如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。

TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。

面向连接的服务(例如Telnet、FTP、rlogin、X Windows和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的服务。[6]

2.2.4  数据包简介                               

“包”(Packet)是TCP/IP协议通信传输中的数据单位,一般也称“数据包”。有人说,局域网中传输的不是“帧”(Frame)吗?没错,但是TCP/IP协议是工作在OSI模型第三层(网络层)、第四层(传输层)上的,而帧是工作在第二层(数据链路层)。上一层的内容由下一层的内容来传输,所以在局域网中,“包”是包含在“帧”里的。OSI(Open System Interconnection,开放系统互联)模型是由国际标准化组织(ISO)定义的标准,它定义了一种分层体系结构,在其中的每一层定义了针对不同通信级别的协议。OSI模型有5层,1到5层分别是:物理层、数据链路层、网络层、传输层、应用层。OSI模型在逻辑上可分为两个部分:低层的1至3层关注的是原始数据的传输;高层的4至5层关注的是网络下的应用程序。 我们可以用一个形象一些的例子对数据包的概念加以说明:我们在邮局邮寄产品时,虽然产品本身带有自己的包装盒,但是在邮寄的时候只用产品原包装盒来包装显然是不行的。必须把内装产品的包装盒放到一个邮局指定的专用纸箱里,这样才能够邮寄。这里,产品包装盒相当于数据包,里面放着的产品相当于可用的数据,而专用纸箱就相当于帧,且一个帧中只有一个数据包。 “包”听起来非常抽象,那么是不是不可见的呢?通过一定技术手段,是可以感知到数据包的存在的。比如在Windows 2000 Server中,把鼠标移动到任务栏右下角的网卡图标上(网卡需要接好双绞线、连入网络),就可以看到“发送:××包,收到:××包”的提示。(详见下图)

通过数据包捕获软件,也可以将数据包捕获并加以分析。 就是用网络嗅探器捕获数据包,可以查看捕获到的数据包的MAC地址IP地址、协议类型端口号等细节。通过分析这些数据,网管员就可以知道网络中到底有什么样的数据包在活动了。数据包的结构非常复杂,不是三言两语能够说清的,在这里主要了解一下它的关键构成就可以了,这对于理解TCP/IP协议的通信原理是非常重要的。数据包主要由“目的IP地址”、“源IP地址”、“净载数据”等部分构成。 数据包的结构与我们平常写信非常类似,目的IP地址是说明这个数据包是要发给谁的,相当于收信人地址;源IP地址是说明这个数据包是发自哪里的,相当于发信人地址;而净载数据相当于信件的内容。 正是因为数据包具有这样的结构,安装了TCP/IP协议的计算机之间才能相互通信。我们在使用基于TCP/IP协议的网络时,网络中其实传递的就是数据包。比如说当你上网打开网页,这个简单的动作,就是你先发送数据包给网站,它接收到了之后,根据你发送的数据包的IP地址,返回给你网页的数据包,也就是说,网页的浏览,实际上就是数据包的交换。理解数据包,对于网络管理网络安全具有至关重要的意义。

2.3  可行性分析

可行性研究(Feasibility Study)是通过对项目的主要内容和配套条件,如市场需求、资源供应、建设规模、工艺路线、设备选型、环境影响、资金筹措、盈利能力等,从技术、经济、工程等方面进行调查研究和分析比较,并对项目建成以后可能取得的财务、经济效益及社会环境影响进行预测,从而提出该项目是否值得投资和如何进行建设的咨询意见,为项目决策提供依据的一种综合性的系统分析方法。可行性研究应具有预见性、公正性、可靠性、科学性的特点。[7]

当然这次论文的可行性研究并没有上述的如此意义重大,只是理清整个系统分析和设计的大致过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。它的目的不是解决问题,而是确定问题是否值得去解决。当然在现阶段这样的信息安全背景下,网络嗅探器的研究与使用的价值是毋庸置疑的。不仅可以有效地诊断网络状况,更可以为信息安全战打攻坚战。

3  详细设计

3.1  设计原理

嗅探器是如何工作的?如何窃听网络上的信息?网络的一个特点就是数据总是在流动中,从一处到另外一处,而互联网是由错综复杂的各种网络交汇而成的,也就是说:当你的数据从网络的一台电脑到另一台电脑的时候,通常会经过大量不同的网络设备,(我们用tracert命令就可以看到这种路径是如何进行的)。如果传输过程中,有人看到了传输中的数据,那么问题就出现了——这就好比我们用手机给人发了一条短信,结果除了发送对象以外,还发到别人的手机上了一样,这样说或许还不是很可怕,要是传送的数据是企业的机密文件呢,或是用户的信用卡帐号和密码呢?[8]

嗅探侦听主要有两种途径,一种是将侦听工具软件放到网络连接的设备或者放到可以控制网络连接设备的电脑上,(比如网关服务器,路由器)——当然要实现这样的效果可能也需要通过其他黑客技术来实现:比如通过木马方式将嗅探器发给某个网络管理员,使其不自觉的为攻击者进行了安装。另外一种是针对不安全的局域网(采用交换HUB实现),放到个人电脑上就可以实现对整个局域网的侦听,这里的原理是这样的:共享HUB获得一个子网内需要接收的数据时,并不是直接发送到指定主机,而是通过广播方式发送到每个电脑,对于处于接受者地位的电脑就会处理该数据,而其他非接受者的电脑就会过滤这些数据,这些操作与电脑操作者无关,是系统自动完成的,但是电脑操作者如果有意的话,就可以将那些原本不属于他的数据打开,这就是安全隐患!

以太网的数据传输是基于“共享”原理的:所有的同一本地网范围内的计算机共同接收到相同的数据包。这意味着计算机直接的通讯都是透明可见的。正是因为这样的原因,以太网卡都构造了硬件的“过滤器”。这个过滤器将忽略掉一切和自己无关的网络信息。事实上是忽略掉了与自身MAC地址不符合的信息。

嗅探程序正是利用了这个特点,它主动的关闭了这个过滤器,也就是前面提到的设置网卡“混杂模式”。因此,嗅探程序就能够接收到整个以太网内的网络数据了信息了。[9] 

什么是以太网的MAC地址(MAC:Media Access Control),由于大量的计算机在以太网内“共享“数据流,所以必须有一个统一的办法用来区分传递给不同计算机的数据流的。这种问题不会发生在拨号用户身上,因为计算机会假定一切数据都由你发送给MODEM,然后通过电话线传送出去。可是,当你发送数据到以太网上的时候,你必须弄清楚,哪台计算机是你发送数据的对象。的确,现在有大量的双向通讯程序出现了,看上去,他们好像只会在两台机器内交换信息,可是你要明白,以太网的信息是共享的,其他用户,其实一样接收到了你发送的数据,只不过是被过滤器给忽略掉了。[10] 

举例一下,很多的小型局域网计算机用户都为实现文件和打印共享,安装了“NetBEUI” 因为它不是基于TCP/IP协议的,所以来自于网络的黑客一样无法得知他们的设备情况。基于Raw协议,传输和接收都在以太网里起着支配作用。你不能直接发送一个Raw数据给以太网,你必须先做一些事情,让以太网能够理解你的意思。这有点类似于发短信的方法,你不可能直接把一条短信直接发送出去,你还要输入对方的手机号码才可以发送,同样的网络上的传输数据也是一个道理。[11]

以下是一个帮助我们理解数据传送的简单图示:

_________

/.........\

/..Internet.\

+-----+ +----+.............+-----+

   用户A ----- 路由 ............. 用户B 

+-----+ ^ +----+.............+-----+

\.........../

\---------/

+------+

   嗅探器 

+------+

  用户A IP 地址: 192.168.1.10

  用户B IP 地址: 192.168.1.1

现在知道用户A要于用户B进行计算机通讯,用户A需要为192.168.1.10到用户B 192.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标记,然后对这个结构进行处理(它将根据网络状况推测出下一个最快路由节点,从而最快传送数据到预定的目标地址)。

设想,只有路由机器能够检查这个结构,并且所有其他的机器都忽略这个结构,则嗅探器无论如何也无法检测到这个结构的。

MAC地址的格式是什么?以太网卡的MAC地址是一组48比特的数字,这48比特分为两个部分组成,前面的24比特用于表示以太网卡的厂商ID,后面的24比特是一组序列号,是由厂商进行分派的,就像我们身份证上的号码一样具有全球唯一性。这样可以担保没有任何两块网卡的MAC地址是相同的(当然可以通过特殊的方法实现)。如果出现相同的地址,将发生问题,所有这一点是非常重要的。这24比特被称之为OUI(Organizationally Unique Identifier)。

可是,OUI的真实长度只有22比特,还有两个比特用于其他:一个比特用来校验是否是广播或者多播地址,另一个比特用来分配本地执行地址(一些网络允许管理员针对具体情况再分配MAC地址)。

举个例子,你的MAC地址在网络中表示为 03 00 00 00 00 01 。第一个字节所包含的值二进制表示方法为00000011。可以看到,最后两个比特都被置为真值。他指定了一个多播模式,向所有的计算机进行广播,使用了“NetBEUI”协议(一般的,在Windows计算机的网络中,文件共享传输等是不使用TCP/IP协议的)。[12]

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;[13]

3.3  系统实施

(1) Microsoft Visual Studio 2005中新建项目Windows应用程序PackerMonitor。

(2)添加窗体文件和类文件,分别命名PacketForm.cs、PacketMonitorForm.cs和Packet.cs、PacketMonitor.cs。PacketForm.cs实现主页面,PacketMonitorForm.cs实现详细信息页面。[14]

 (3)编码,详细的代码如源程序。

当使用C#系统类提供的接口取到数据包的bite流时,对流的初始化处理如下:

public Packet(byte[] raw, DateTime time)

{

 if (raw == null)

throw new ArgumentNullException();

if (raw.Length < 20)

throw new ArgumentException();

m_Raw = raw;

m_Time = time;

m_Version = (raw[0] & 0xF0) >> 4;

  m_HeaderLength = (raw[0] & 0x0F) * 4;

if ((raw[0] & 0x0F) < 5)

throw new ArgumentException(); // 无效的报头

m_Precedence = (Precedence)((raw[1] & 0xE0) >> 5);

m_Delay = (Delay)((raw[1] & 0x10) >> 4);

m_Throughput = (Throughput)((raw[1] & 0x8) >> 3);

m_Reliability = (Reliability)((raw[1] & 0x4) >> 2);

m_TotalLength = raw[2] * 256 + raw[3];

if (m_TotalLength != raw.Length)

throw new ArgumentException(); // 无效的数据包大小

m_Identification = raw[4] * 256 + raw[5];

m_TimeToLive = raw[8];

if (Enum.IsDefined(typeof(Protocol), (int)raw[9]))

m_Protocol = (Protocol)raw[9];

else

m_Protocol = Protocol.Other;

m_Checksum = new byte[2];

m_Checksum[0] = raw[11];

m_Checksum[1] = raw[10];

m_SourceAddress = new IPAddress(BitConverter.ToUInt32(raw, 12));

m_DestinationAddress = new IPAddress(BitConverter.ToUInt32(raw, 16));

if (m_Protocol == Protocol.Tcp || m_Protocol == Protocol.Udp)

 {

m_SourcePort = raw[m_HeaderLength] * 256 + raw[m_HeaderLength + 1];

m_DestinationPort = raw[m_HeaderLength + 2] * 256 + raw[m_HeaderLength + 3];

}

else {

m_SourcePort = -1;

m_DestinationPort = -1;

}

}[15]

3.4  系统测试

网络嗅探器运行后的界面如下:

点击绿色按钮,开始抓取以太网中与本机通信的IP数据包;点击红色按钮,停止监听。抓取到的信息如下图:

从图中可以看出,抓到的有UDP数据报,TCP数据报,ICMP数据报。鼠标双击列表行,分别得到详细的报文信息。

UDP协议详细的报文信息:

TCP协议详细的报文信息:

ICMP协议详细的报文信息:

4  论文总结

网络嗅探器是一把双刃剑,网络安全管理人员利用它可保障网络畅通,防范网络被攻击,以达到维护网络安全的目的,但是到了入侵者手中,嗅探器成了捕获网络传输的机密、敏感数据的厉害武器。所以,作为网络安全管理人员,应该在技术上把握优势,挥舞这把双刃剑,在与入侵者的斗争中取得胜利。单纯的嗅探器的功能始终是局限的,例如无法穿过交换机、路由器,所以在大多数的情况下,嗅探器往往和其他手段结合起来使用,嗅探器和spoof(欺骗)以及其他技术手段结合在一起对网络构成的危害是巨大的。例如结合ARPSpoof(ARP欺骗)、MAC Flooding、Fake the MAC Address(欺骗MAC地址)、ICMP Router Advertisements、ICMP Redirect(ICMP重定向)等技术手段就可以跨交换机、路由器实施嗅探了。其实嗅探器的目的说穿了只有一个,就是抓包,从抓包这个概念上引伸下去,所有为了能够抓到网络上的信息包而采用的技术都可以归入嗅探,单纯的嗅探是没有什么效率的。嗅探器技术被广泛应用于网络维护和管理方面,它工作的时候就像一部被动声纳,默默地接收来自网络的各种信息,通过对这些数据的分析,网络管理员可以深入了解网络当前的运行状况,以便找出网络中的漏洞。在网络安全日益被关注的今天,我们不但要正确地使用嗅探器,还要合理防范嗅探器的危害,嗅探器能够造成很大的安全危害,主要是因为它们不容易被发现。对于一个安全性要求很严格的企业,在使用技术防范的同时安全管理的制度建设也是非常重要的。

5  参考文献

[1] 卢昱等著.网络安全技术[专著]  - 北京:经济管理出版社,2004

[2] 梅晓东著.Visual C#网络编程技术与实践[M].北京:清华大学出版社. 2006

[3] 谢希仁著.计算机网络电子[M].北京:工业出版社.2005

[4] 段云所著.信息安全概论[专著] - 大连:东北财经大学出版社,2006

[5] 丁永生编著.计算智能--理论、技术与应用 - 北京: 科学出版社,2004.12

[6] 王宝智等著.全新计算机网络教程[专著] - 天津:天津科学技术出版社,1983.1

[7] 肖汉等著.软件工程[专著]-北京:国防工业出版社,2009.6

[8] 王力等著.病毒武器与网络战争[专著]. - 北京:机械工业出版社,1994.7

[9] 程秉恢等著.黑客任务实战 - 北京:科学出版社,2005

[10] 单征等著.网络漏洞攻击与防范指南[专著] - 西安:西安交通大学出版社,1984.10

[11] Comer,D.,Computer Networks and Internets,4ed.,Pearson Education,2006.8

[12] 潘荷新等著.网络技术应用与实训教程[专著]-北京:科技出版社,2009.8

[13] 张保通等著.计算机网络模块教程[专著]-北京:中国水利水电出版社,2009.10

[14]Tanenbaum,A.S.,Computer Networks,4ed.,Prentice-Hall,2003.5

[15] 吴成著.C#网络与通信程序设计案例精讲[专著]  - 北京:国防工业出版社,1999

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
网络嗅探器一种用于监视和分析网络流量的工具,它能够捕获经过网络的数据包,并对这些数据包进行分析和处理。基于C语言的网络嗅探器设计实现需要考虑以下几个方面: 首先,需要使用C语言编写网络嗅探器的核心功能,包括数据包捕获和分析。可以使用像libpcap这样的库来实现数据包捕获功能,该库可以在网络接口上进行数据包捕获,并将捕获的数据包传递给应用程序进行分析。 其次,网络嗅探器需要实现数据包的解析和分析功能,包括提取数据包中的源地址、目的地址、协议类型等信息,并能够对数据包进行过滤和分类。这需要对网络协议进行深入的了解和分析,以便能够正确地解析和处理每一种类型的数据包。 另外,网络嗅探器还需要实现数据的存储和展示功能,可以将捕获到的数据包保存到本地存储或数据库中,并能够以图形界面或命令行界面的形式展示分析结果。 最后,在设计实现网络嗅探器时,需要考虑到安全和性能等方面的问题,确保网络嗅探器能够稳定可靠地运行,并能够有效地监视和分析网络流量。 总的来说,基于C语言的网络嗅探器设计实现需要对网络协议有较深入的了解,并需要充分考虑到安全和性能等方面的问题,以确保网络嗅探器能够准确、稳定地监视和分析网络流量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等天晴i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值