当前位置:文档之家› 网络协议仿真软件的设计与实现毕业论文

网络协议仿真软件的设计与实现毕业论文

xxxxxxx

信息科学与技术学院毕业论文

课题名称:网络协议仿真软件的设计与实现

学生姓名:xxxxx xxxxxxxx

xxxxx xxxxxxxx

学院:信息科学与技术学院

专业年级:信息管理与信息系统2008级

指导教师:xxxxxx 讲师

完成日期:二〇一二年四月

网络协议仿真软件的设计与实现

学生:xxxxxxxxx

指导老师:xxxxx

[摘要]由于网络模型和协议的抽象性,即使专业人员对其理解也有很大困难。为了将抽象的难以理解的网络模型框架、协议原理、网络应用等专业知识,用易于理解的通俗易懂的形式将其理解。非专业的人员在使用网络协议仿真软件的同时可以对网络协议有基本的理解,有一定专业知识的人员更好的理解网络协议原理、掌握学习要领。

本课题通过对网络抓包软件的实现,来详细深入的了解网络协议如何工作,文中首先分析了抓包的原理和技术,并介绍了几种常见的抓包软件,然后研究了入侵检测系统中使用的包捕获技术,利用winpcap接字在windows平台下实现了一个网络抓包软件程序,具有对数据包进行拆包、解包等功能,最后通过动画演示生动形象的描述网络协议如何运行。

[关键词] 网络抓包软件数据包捕获数据包分析 Winpcap

Network protocol emulation software design

and implementation

Students:xxxxxxxxxxx

Instructor:xxxxxxxxx

[Abstract] As the network model and agreement of the abstract, even to the professional understanding will have great difficulty. In order to bring the abstract to understand the network model of the framework agreement, principle, network application and other professional knowledge, in an understandable easy-to-read formats will be the understanding. Casual personnel to use network protocol emulation software on the network at the same time can be a basic understanding of the agreement, have certain professional knowledge workers better understanding of network protocol principle, learning will bring.

This topic through network caught software to realize, to a detailed understanding of how the network protocol, this paper first analyzes the principle and technology of caught, and introduces several common caught software, and then studied the intrusion detection system used in the packet capture technology, using winpcap meet word in Windows the workbench implements a network caught a software program, has for packet for unpacking, solution package, and other functions, the last through the animation of vivid description network protocol how to run.

[Key words] network sniffe ; capture data packet ; analyze data capture ; Winpcap

目录

第一章绪论 (1)

1.1 课题背景 (1)

1.2 课题研究的目的及意义 (1)

1.3 任务书 (1)

1.3.1 设计时间 (1)

1.3.2 课题分工 (2)

1.3.3 设计成果 (2)

1.3.4 论文组织 (2)

第二章网络协议及协议仿真技术 (3)

2.1 网络协议 (3)

2.1.1 OSI七层参考模型 (3)

2.1.2 TCP/IP参考模型 (3)

2.1.3 OSI模型与TCP/IP模型的比较 (4)

2.1.4 主要协议 (5)

2.1.5 数据包在TCP/IP网络中的封装解封过程 (10)

2.2 仿真技术简介 (11)

2.3 反嗅探措施 (13)

2.3.1 嗅探的检测 (13)

2.3.2 嗅探的防御 (13)

2.4 Windows下的网络嗅探及WinPcap研究 (13)

2.4.1 WinPcap简介 (13)

2.4.2 WinPcap体系结构 (16)

2.4.3 Windows下的网络嗅探 (19)

2.4.4 基于WinPcap的包捕获过程 (21)

第三章需求分析与动画演示设计 (23)

3.1 功能需求 (23)

3.2 性能需求 (23)

3.3 可行性分析 (24)

3.4 动画演示设计 (24)

第四章详细设计 (28)

4.1 开发环境 (28)

4.2 系统功能模块图 (29)

4.3 系统流程图 (30)

4.4 详细设计 (31)

4.4.1 界面实现 (31)

4.4.2 选择网卡 (34)

4.4.3 过滤规则 (34)

4.4.4 数据包捕获 (36)

4.4.5 数据包分析 (37)

第五章系统测试 (46)

5.1编写目的 (46)

5.2测试概要 (46)

5.3对软件功能的评价 (49)

第六章开发总结 (51)

致谢 (53)

第一章绪论

1.1课题背景

近年来,数据通信网络无论就其物理的规模还是应用范围来讲,都获得了巨大的发展。Internet 上不断地有新的需求出现,人们开发新的协议和算法来满足这些变化的需求。这种需求的例子包括服务质量支持、组播传输、安全性、移动组网和策略管理。对这些领域的协议和算法的开发和评价要求人们回答很多设计上的问题。由于网络协议是抽象的,很多学生不易理解,所以用仿真软件的设计与实现来了解网络协议。

本论文采用了WinPcap驱动对链路层数据帧进行高效捕获,并针对四种具体协议ARP、IP、TCP、UDP进行协议分析。借助WinPcap来研究Windows平台下的网络协议仿真技术是具有现实意义的,这不仅能促进网络嗅探系统的改进和发展,还能促进WinPcap本身的发展。在本论文的程序开发过程中涉及到较多方面,如协议分析,MFC编程,及对WinPcap驱动框架的理解,这些工作在很大程度上加深了自己对网络协议应用的理解。本课题主要通过对数据包的抓捕与分析机制进行研究,参考了大量有关抓捕数据包的专业文献,由此了解国内以及国际上主要的抓捕分析数据包的技术方法,并通过制作一个共享环境下的的数据抓包软件的具体实现以对该机制进行深一步的了解。

1.2课题研究的目的及意义

网络协议具有抽象、难以理解等特点,学生在学习计算机网络相关课程时总感到协议难懂、不具体。设计一个网络协议仿真软件可形象的将网络协议的运行原理和过程演示出来,学生对网络原理理解就会更深、学习的进度也会加快。

由于网络模型和协议的抽象性,即使专业人员对其理解也有很大困难。为了将抽象的难以理解的网络模型框架、协议原理、网络应用等专业知识,用易于理解的通俗易懂的形式将其理解。非专业的人员在使用网络协议仿真软件的同时可以对网络协议有基本的理解,有一定专业知识的人员更好的理解网络协议原理、掌握学习要领。

1.3任务书

1.3.1设计时间

(1)第1-3周搜集相关文献文档

(2)第4周系统功能模块分析

(3)第5周系统技术实现分析

(4)第6-13周程序编写,系统调试,相关文档的撰写

(5)第14周完善系统和对论文的撰写

(6)第15周准备预审和相关毕业答辩文档

(7)第16周终期答辩

总计16周

1.3.2课题分工

徐婷:开题报告、文献综述、论文初稿搜集整理相关文献资料、需求分析、系统测试

饶冬冬:功能模块的分析和设计、动画演示制作、系统调试修改

共同合作:结构设计、整体模块设计、系统编写实现

1.3.3设计成果

毕业设计相关文献及成果清单包括:

可执行软件一份

《开题报告》

《文献综述》

《用户手册》

《石河子大学信息科学与技术学院2012毕业设计论文》

1.3.4论文组织

下面是本论文的章节组织:

第一章:绪论,概括介绍了论文的研究背景、研究目的及意义。

第二章:网络协议及协议仿真技术,系统介绍网络协议框架结构,每层的相关的协议,以及协议仿真技术的知识,包括嗅探的原理,以及一些反嗅探的方法。研究分析网络TCP/IP协议,并对本嗅探器基于的 WinPcap的框架体系进行深入地研究。

第三章:需求分析与可行性分析,动画演示设计。

第四章:主要是网络数据包捕获工具实现的详细步骤及设计,主要分为界面,网卡选择模块、数据包过滤模块、数据包捕获模块和数据包分析模块。

第五章:对本文所构建的数据包嗅探器进行测试,实验证明系统达到了预期的设计目标。

第六章:总结了本论文的主要工作。

第二章网络协议及协议仿真技术

2.1网络协议

2.1.1OSI七层参考模型

要使两台计算机进行通信,必须让它们使用同一种“语言”,通信协议就是两台计算机交换信息所使用的共同语言,它规定了通信双方在通信中所应共同遵守的规则,精确地定义了计算机在相互通信过程中的所有细节。我们利用一个共同遵守的通信协议,从而使Intemet成为一个允许连接不同类型的计算机和不同操作系统的网络。例如,协议规定了每台计算机发送报文的格式和每个字段的含义,还规定了在各种情况下计算机应该做出什么反应,以避免差错从而达到最好的通信效果。

在网络历史的早期,国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)共同出版了开放系统互联的七层参考模型[6],它是一种抽象的包含七层通信协议的参考模型,其中每一层执行某一规定的任务,每层之间都有相应的接口,除了第一层和第七层外,每一层即使用下层提供的服务,又给上层提供服务,也就是说它即是服务的享有者,又是服务的提供者。这种设计模型可以简化协议开发过程中的难度,每一层只需做好该层的工作并提供好向上的接口即可,在保证每一层实现效率的前提下,具体怎么实现要根据具体情况来确定。该模型的目的是使各种硬件在相同的层次上相互通信,表2-1表示了OSI七层参考模型。

表2-1 OSI七层参考模型

应用层

表示层

会话层

传输层

网络层

数据链路层

物理层

按照OSI开放系统互联参考模型的观点,可将网络系统划分为7层结构,每一个层次上运行着不同的协议和服务,并且上下层之间互相配合,完成网络数据交换的功能。然而,OSI模型仅仅是一个参考模型,并不是实际网络中应用的模型。实际上应用最广泛的商用网络模型是TCP/IP网络参考模型,将网络划分为四层,每一个层次上运行着不同的协议和服务[4]。

2.1.2TCP/IP参考模型

TCP/IP参考模型被称作因特网分层模型、因特网参考模型(Intemet Reference Model),表2-2表示了TCP/IP分层模型的四层。TCP/IP协议被设计成四个层次,其中应用层对应于OSI模型中的应用层、会话层、表示层,传输层和网络层分别对应OSI中的相应层,网络接口层对应于OSI中的

数据链路层和物理层。TCP/IP分层模型的四个协议层分别完成以下的功能[5]:

第一层网络接口层:网络接口层包括用于协作IP数据在已有网络介质上传输的协议。它对实际的网络媒体进行管理,定义了将资料组成正确帧的规则和在网络中传输帧的规则,定义如何使用实际网络如以太网Ethemet等来传送数据。实际上TCP/IP标准并不定义与ISO数据链路层和物理层相对应的功能。相反,它定义像地址解析协议(ARP-Address Resolution Protocol)这样的协议,提供TCP/IP协议的数据结构和实际物理硬件之间的接口。

表2-2 TCP/IP参考模型

应用层DINS、FTP、HTTP、TELNET、SMTP、

USENET、FINGER、WHOIS、

GOPHER、IRC、其他

传输层 TCP UDP

网络层ICMP IP

网络接口层ARP/RARP 其他协议第二层网络层:负责提供基本的数据封包路由功能,让每一个数据包都能够到达目的主机,但不检查是否被正确接收,如网际协议IP。本层包含IP协议、RIP协议(Routing Information Protocol,路由信息协议),负责数据的包装、寻址和路由。同时还包含网问控制报文协议(ICMP Intemet Control Message Protocol)用来提供网络诊断信息。

第三层传输层:为两个用户进程之间建立、管理和拆除可靠而又有效的端到端连接,提供两种端到端的通信服务。其中TCP协议(Transmission Control Protocol)提供可靠的数据流传输服务,UDP协议(Use Datagram Protocol)提供不可靠的用户数据报服务。

第四层应用层:因特网的应用层协议包括FTP(文件传输协议)、HTTP(超文本传输协议)、Telent(远程终端协议)、SMTP(简单邮件传送协议)、IRC(因特网中继会话)、NNTP(网络新闻传输协议)等。

2.1.3OSI模型与TCP/IP模型的比较

与OSI参考模型不同,TCP/IP协议并不完全符合OSI的七层参考模型,如表2-3所示。TCP/IP 参考模型更侧重于互联设备间的数据传送,更注重实用性,而不是严格的功能层次划分。OSI参考模型在解释互联网络通信原理上比较适合,TCP/IP在实用性上面比较好,因而成为了互联网络协议的市场标准。TCP/IP参考模型是在它所解释的协议出现很久以后才发展起来的,并吸取了OSI

模型的经验和教训,比OSI模型更灵活,这也是TCP/IP协议之所以流行的原因。

表2-3 OSI模型与TCP/IP模型的比较

OSI参考模型OSI层号TCP/IP参考模型

应用层7

应用层

表示层 6

会话层 5

传输层 4 传输层

网络层 3 网络层

数据链路层 2

网络接口层

物理层 1

2.1.4主要协议

1)IP

网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。

IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP 数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP 数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。

高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP 地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫作IP source routing,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好像是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。

IP数据报格式,如图2-1所示:

图2-1 IP数据报格式

版本:4位,标识IP版本号。目前有IPv4、IPv6。我们目前所用的IP协议基本都是IPv4版本。

首部长度:4位,度指的是首部占32bit字的数目,包括任何选项。由图3-1可知首部所占字节数为(4+4+8+16+16+3+13+8+8+16+32+32+0)=160bit,正好是32bit的5倍,所以首部长度最小为5。如果选项字段有其它数据,则这个值会大于5。由上面也可知IP首部最小长度为20字节,最大长度为(2的4次方-1)*32/8=60字节。

服务类型:8位,其中:

优先权:3位,设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)-7(网

络控制)。

TOS:4位,分别表示最小延时、最大吞吐量、最高可靠性、最小费用。如果4位TOS子字段均为0,那么就意味着是一般服务。

未使用:1位,必须置0。

总长度:16位,总长度指首部和数据之和的长度,以字节为单位。利用首部长度字段和总长度字段,就可以知道I P数据报中数据内容的起始位置和长度。由于该字段长16比特,所以IP数据报最长可达65535字节。

标识:16位,唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。IP 软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。在分片和重组技术中将会用到。

标志:3位,但目前只有2位有意义。标志字段中的最低位记为MF(More Fragment)。MF=1

即表示后面“还有分片”的数据报;MF=0表示这已是若干数据报片中的最后一个。标志字段中间的一位记为DF(Don't Fragment),意思是“不能分片”。只有当DF=0时才允许分片,具体定义如下:

保留位: 1位;

DF字段:1位,取值:0(允许数据报分段)、1(数据报不能分段);

MF字段:1位,取值:0(数据包后面没有包,该包为最后的包)、1(数据包后面有更多的包)。

片偏移:13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置,也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位,这就是说,每个分片的长度一定是8字节(64位)的整数倍。

生存时间:8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段,其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。一般可以理解为经过路由器的最大数目。

协议:8位。协议字段指出此数据报携带的数据是使用何种协议(上层协议),以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。协议可包括TCP、UDP、TELNET等,

1=ICMP,6=TCP,17=UDP。

首部校验和:16位,首部检验和字段是根据IP首部计算的检验和码,它不对首部后面的数据进行计算。ICMP,UDP,TCP在它们各自的首部中均含有同时覆盖首部和数据检验和码。为了计算一份数据报的IP检验和,首先把检验和字段置为0,然后对首部中每个16bit进行二进制反码求和(整个首部看成是由一串16 bit的字组成),结果存在检验和字段中。当收到一份IP数据报后,同样对首部中每个16 bit进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1,如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报,但是不生成差错报文,由

上层去发现丢失的数据报并进行重传。

源IP地址:32位,发送IP的主机地址。

目的IP地址:32位,数据发往的IP主机地址。

2)TCP

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

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

面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。

TCP数据被封装在一个IP数据报中,如图2-2所示:

图2-2 TCP数据在IP数据报中的封装

图2-3显示TCP首部的数据格式。如果不计任选字段,它通常是20个字节。

图2-3 TCP包首部

3)UDP

UDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网络时间协议)和DNS(DNS 也使用TCP)。

欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。

UDP是一个简单的面向数据报的运输层协议,进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。

UDP数据报格式有首部和数据两个部分,如图2-4:

图2-4 UDP数据报格式

首部很简单,共8字节,如图2-5:

图2-5 UDP首部

包括:

源端口(Source Port):2字节,源端口号。

目的端口(Destination Port ):2字节,目的端口号。

长度(Length):2字节,UDP用户数据报的总长度,以字节为单位。

检验和(Checksum):2字节,用于校验UDP数据报的数字段和包含UDP数据报首部的“伪首部”。尽管UDP校验和的基本计算方法与IP首部校验和的计算方法类似(16bit字的二进制反码和),但是它们之间存在不同的地方,UDP数据报长度可以为奇数字节,但是校验和的算法是把若干个

16bit字相加。解决方法是必要时在最后增加填充字节0,这只是为了校验和的计算(也就是说,可能增加的填充字节不被传送)。

UDP数据报和TCP段都包含一个12字节长的伪首部,它是为了计算校验和而设置的。伪首部包含IP首部一些字段,其目的是让UDP两次检查数据是否已经正确到达目的地(例如,IP有没有接受地址不是本主机的数据报,以及IP有没有把应传给另一高层的数据报传送给UDP)。UDP数据报中的伪首部格式如图2-6所示:

图2-6 UDP数据报的伪首部格式

4)ICMP

ICMP与IP位于同一层,它被用来传送IP的的控制信息。它主要是用来提供有关通向目的地址的路径信息。

IP协议提供的是面向无连接的服务,不存在关于网络连接的建立和维护过程,也不包括流量控制与差错控制功能,但需要对网络的状态有一些了解,因此在网际层提供了因特网控制消息协议(Internet control message protocol,简称ICMP)来检测网络,包括路由、拥塞、服务质量等问题。在网络中,ICMP报文将作为IP层数据报的数据,封装在IP数据报中进行传输,如图2-7所示,但ICMP并不是高层协议,而仍被视为网络层协议。

图2-7 ICMP数据在IP数据报中的封装

ICMP报文的类型很多,且各自又有各自的代码,因此,ICMP并没有一个统一的报文格式,不同的ICMP类别分别有不同的报文字段。ICMP报文只是在前4个字节有统一的格式,共有类型、代码和校验和3个字段。如图2-8所示。

图2-8 ICMP报文的格式

其中类型字段表示ICMP报文的类型;代码字段是为了进一步区分某种类型的几种不同情况;校验和字段用来检验整个ICMP报文,接着的4个字节的内容与ICMP的类型有关,再后面是数据字段,其长度取决于ICMP的类型。

5)TCP和UDP的端口结构

TCP和UDP服务通常有一个客户/服务器的关系,例如,一个Telnet服务进程开始在系统上处于空闲状态,等待着连接。用户使用Telnet客户程序与服务进程建立一个连接。客户程序向服务

进程写入信息,服务进程读出信息并发出响应,客户程序读出响应并向用户报告。因而,这个连接是双工的,可以用来进行读写。

2.1.5数据包在TCP/IP网络中的封装解封过程

数据在网络中传输时要经过封装和解封的过程,这是两个正好相反的过程,一个组包,一个解包,下面是数据包在网络中封装的过程:首先,计算机生成用户数据,数据经过应用层后,被加上应用层协议的首部,然后传递到传输层变成了传输层的数据单元,传输层把收到的大的报文分割成小的包,再给每一个包加上这一层的报文头,如TCP头或者UDP头,形成新的数据单元然后再交给网络层,网络层又在各个数据包上加上自己的IP头部,包括源IP及目的IP,以方便路由,这样就到了网络接口层,这一层给到来的数据加上链路层的头部和尾部,此处是以太网头部和尾部,最后形成比特流传输到线路上。包的封装过程如图2-9所示:

当数据到达网络另一端的计算机时,又经过相反的解包过程:首先,数据链路层接收到从另一端计算机发过来的数据帧,并由链路层的协议来读取数据帧的内容,对于以太网的数据链路层帧其中有一个字段是标志上层协议的,此处我们假设是IP协议,链路层协议会把以太网首部和尾部都去掉,然后把数据交给上层的网络层,数据经过网络层的处理去掉IP首部后交给相应的上层协议TCP或UDP去处理,同样道理,TCP或UDP协议经过对数据的处理后去掉TCP或UDP头部,又把数据交给应用层去处理,最终还原成用户数据,这就是数据进入协议栈时的解封过程,如图2-10所示:

图2-9 数据进入协议栈时的封装过程

图2-10 数据进入协议栈时的解封过程

数据在协议栈里面的封装与解封的原理是网络数据包捕获和进行协议分析的基础,本论文所构建的数据包嗅探器就运用了上述的封装解封原理,并对所捕获的数据包以协议树的形式来显示包内所包含的协议层次结构,另外,本论文最高只是涉及到传输层的TCP和UDP协议的解析,考虑到因特网应用层协议的繁多,并且有可能涉及到加密与解密等一系列的问题,如果要对应用层协议进行支持,必须首先去了解掌握这种协议,然后加入相应的应用层协议解析模块,由于涉及到众多问题,所以本论文目前并不支持应用层协议的解析,将留待下一步继续研究。

2.2仿真技术简介

本课题做的网络协议仿真软件实际是嗅探器,嗅探器是指运行在TCP/IP协议、以太网协议、IPX协议或者其他协议的网络上,可以获取网络信息流的软件或硬件,硬件形式的Sniffer称为网络分析仪,一般都是商业性的,价格也比较贵。软件形式的Sniffer有很多,其优点是价格便宜,易于学习使用,缺点是无法抓取网络上所有的传输,某些情况下也就无法真正了解网络的运行情况[2][3]。现在的嗅探器一般都是指软件意义上的,而不是硬件意义上的,软件嗅探器成本要比硬件嗅探器低得多,并且使用方便,但是在性能方面会比硬件嗅探器差,后者一般是用在要求比较高的地方。

通过对国内外的文献调研发现,网络嗅探中的数据包捕获主要可以分两种方式[1],一种是基于操作系统内核的,如Unix、Linux系统,它们系统内核本身就提供包捕获机制;第二种就是基于外界提供的驱动程序库,如Unix下的Libpcap和Windows下的WinPcap。由操作系统内核提供的捕获机制主要有以下四种:BPF(Berkeley Packet Filter),DLPI(Data Link Provider Interface),NIT(Network Interface Tap),SOCK_PACKET套接口。其中BPF由基于BSD的Unix系统内核所实

现,而DLPI是Solaris系统的子系统,对于NIT则是SunOS 4系统的一部分,但在Solaris系统中已经被DLPI取代,Linux系统内核则实现了SOCK_PACKET的包捕获机制。从性能上看,BPF比DLPI及NIT效率要高的多,而SOCK_PACKET最差。

嗅探器是网络管理员用来管理网络的一种工具,通过嗅探器可监视网络的状态、数据流动情况以及网络上传输的信息等。但是黑客们也常通过嗅探器对网络进行攻击,网络嗅探技术在给管理员带来方便的同时,对网络信息安全也构成了潜在的威胁。

一台计算机和其他计算机进行通讯,一般都需要安装一块网卡,嗅探器要想工作,首先要有网卡的支持,由网卡来负责接收和发送网络数据。每块网卡在出厂时都有一个全球唯一的48bit长的MAC地址,这样就保证了网卡地址的唯一性。

在以太网上,数据是以很小的称为帧(Frame)的单位传输的,一个数据帧有以下几部分组成,如表2-4。(1)目的MAC地址(2)源MAC地址(3)0800(表示承载的IPv4)(4)IP头(5)TCP头或UDP头(6)数据(7)校验和。

表2-4数据链路层帧格式

目的MAC地址

源MAC地址

0800(表示承载的IPv4)

IP头

TCP头或UDP头

数据

校验和

计算机所直接传送的数据是大量的二进制数据即比特流,在数据链路层被称为帧。数据发送和接收的过程是:计算机发送数据时,数据从应用层向物理层向下传递,此过程不断加上每一层的头部,逐步包装成链路层数据帧,然后通过网卡发送到线路上,到达目的计算机后,再执行相反的解包过程,最终把数据交给应用层协议处理,还原成真实数据。对于一个嗅探器来说,也必须使用特定的网络协议如TCP协议来分解嗅探到的数据,这就要求嗅探器本身提供对这种协议的解码支持,只有这样才能够进行正确的解码看到数据包里面的数据。另外,嗅探器一般是部署到网络系统的关键位置如路由器和服务器上面的。网络嗅探在局域网中的应用比较广泛,按照嗅探环境的不同,可以分为共享式网络嗅探和交换式网络嗅探。前者相对发展较早,只要将网卡设置为混杂模式,并辅以相应的捕获程序即可达到嗅探的目的。随着交换机的普及,交换式网络嗅探也有了一定的发展。交换式网络嗅探区别于共享式网络嗅探的地方是它主要利用交换网工作机制中的漏洞来实现。知道了嗅探器的工作原理,我们应该认识到嗅探器并不是专为网络攻击入侵而开发的,其实一些网络诊断命令就属于嗅探器的范畴,利用嗅探器可以帮助我们检查底层传输数据封包的能力,对网络进行诊断。

2.3反嗅探措施

2.3.1嗅探的检测

嗅探作为一种重要的网络安全技术手段,应得到网络安全人员的充分认识。由于共享式以太网中的监听原理非常简单,而且又不干扰正常的网络通信,所以发生在其中的嗅探行为很难被发现。同时,随着交换式局域网的流行,网络监听也已经出现在交换式局域网中,因此,如何有效地检测和发现局域网中的嗅探行为并进行相应的防范己成为维护局域网安全非常重要的环节。尽管网络嗅探比较隐蔽不易被发觉,但仍然可以采用以下几种方法加以防范。

(1)采用加密手段对传输的数据进行加密,以密文形式传输,即使入侵者监听到了传输的数据包信息,也不能立刻理解其中的含义,还需要再进一步的破解,自然增加了监听的难度。例如Telnet、FTP等采用SSH2进行传输数据,它是提供端到端的验证与加密的应用层安全通信协议,是目前国际互联网上最好的安全通信协议之一。

(2)在重要的终端机器上使用静态的ARP表,把本局域网内所有网卡的IP.MAC地址记录下来,建立IP.MAC数据库,以便以后使用。

(3)对网络进行分割。网络广播数据的时候,数据包只能被同一网络地址段内的嗅探器捕获,所以可以利用网络分割的技术把网络进一步划分为小的局域网,缩小嗅探器的嗅探范围,这样就能保证网络其他部分的安全。

2.3.2嗅探的防御

虽然绝对安静的嗅探器在理论上无法发现,但是根据嗅探器在工作中对主机系统或网络通讯的影响,也可从中判断其是否存在。具体可从以下几个方面入手:

(1)网卡工作模式

(2)网络流量分析

(3)系统资源分析

(4)引诱策略

网络嗅探的防御相对网络嗅探的实现难度要大得多,目前大多数反监听工具主要采用DNS检测、ARP检测等方法,而这些方法本身都存在不少缺陷,它们都依赖于目标主机发出DNS反向查询、ARP应答包,而很多优秀的嗅探器在运行时会阻止本机发出以上所说的数据包,从而使基于以上原理检测的反嗅探工具都会失效。对于一些恶意嗅探,目前还没有一个一劳永逸的方法,在综合应用上述方法的同时,还应不断提高网络管理人员的安全意识,做到多注意、勤检查。

2.4Windows下的网络嗅探及WinPcap研究

2.4.1WinPcap简介

本章作为论文的关键部分之一将会做以下几方面的研究:首先是WinPcap框架的组成部分、WinPcap的新特性与优势,接下来会重点分析WinPcap的体系结构,然后对比Windows与Unix下

的网络嗅探和数据包捕获机制,研究WindOWS下的嗅探的底层基础NDIS网络驱动器接口规范,最后总结了基于Windows的数据包捕获方案,得出了基于WinPcap数据包捕获的一般过程。通过本章对WinPcap驱动的研究分析,深刻理解了WinPcap本身的运行机制,为更合理和高效的运用WinPcap 编程奠定了基础。

WinPcap是由意大利的Fulvio Risso和Loris Degioanni等人实现的应用于Win32平台数据包捕获与分析的一种驱动软件包,并提供了在Windows操作系统下的开放源代码,是一套高性能API封装库,有一套标准的抓包接口专门用于网络数据包的截获,并在其基础上增加了自定义数据包的发送能力以及针对Win32平台的扩展函数,独立于Windows操作系统的协议栈。

不同版本的Windows系统都有自己的内核模块和用户层模块,所以使用Windows SDK开发的嗅探程序在不同的Windows操作系统版本下需重新进行编译。WinPcap为Win32平台提供了一个公共的接口Packet.dll,使得程序可以运行在不同版本的Windows 平台上,而无需重新编译。另外,WinPcap的标准抓包接口与Libpcap兼容,使系统便于向Unix/Linux平台移植。

WinPcap的主要功能在于独立于主机协议如TCP-IP协议发送和接收原始数据包,也就是说,WinPcap不能阻塞、过滤或控制其他应用程序对数据报的收发,它只是绕过系统原有的协议栈监听网络上传送的数据包。因此,它不能用于QoS(Quality of Service)调度程序或个人防火墙。WinPcap 有以下几方面的功能[8]:

(1)捕获原始数据包,无论它是发往某台机器的,还是在其他设备(共享媒介)上进行交换的。

(2)在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉。

(3)将原始数据包通过网络发送出去。

(4)收集并统计网络流量信息。

1)WinPcap框架的各个组成部分

图2-11 Winpcap框架的组成部分

如图2-11所示,WinPcap包括内核级的数据包监听驱动NPF、低级动态链接库(Packet.dll)

和高级系统无关库(Wpcap.dll)。在利用WinPcap抓包时,要绕过操作系统的协议栈来访问网络上传输的原始数据包,这就要求WinPcap的一部分要运行在操作系统核心层,直接与网络接口驱动交互,这就是NPF驱动要完成的任务,它是依赖于操作系统的。另外,还需要提供向上的用户级程序接口以方便应用程序调用,WinPcap提供了Packet.dll和Wpcap.dll这两个动态链接库,通过调用这些接口,用户程序可以与NPF交互,利用它所提供的高级特性来捕获并处理数据包。

2)WinPcap的新特性与优势

WinPcap除了有强大的数据包捕获功能以外,相比BSD Capturing Component,它还增加了统计及数据包发送功能,另外还有远程捕获的能力。(1)统计功能可以快速实现对网络数据的统计,如一定时间内流经总线的数据包数目,数据字节数等。它不需要把数据包传送到应用程序,避免了大量的数据包拷贝操作。WinPcap的这种包统计功能是一种非常高效的、用来监测网络的方法,即使在局域网有大量数据包流动时,它仍然可以工作的很好。

(2)发送数据包功能使得应用程序不仅可以嗅探网络,还可以实现向网络发送数据,但是WinPcap本身不具备产生数据包的能力,需要通过手工或者其它工具来构造。

(3)WinPcap又扩展了自身的标准代码,这样,基于WinPcap的工具可以拥有远程捕获的能力[7],这个高级特性能够捕获在远程网络上传输的数据包。它需要一个远程后台程序,由它进行捕获,并把捕获到的数据发回,一个本地客户端会发送合适的命令并接收捕获到的数据。例如:远程后台程序被加入到客户软件中,我们并不需要另外修改,就能使程序拥有远程捕捉的能力。反之亦然,远程后台程序必须被安装和配置在远程机器上。远程捕获协议(RPCAP)可以在两种模式下工作:被动模式(默认):客户机连接到远程后台程序,它发送一些合适的命令,并开始捕获。

主动模式:远程后台程序试图连接到客户机,然后,客户机发送一些合适的命令,并开始捕获。主动模式是有用的,除了当远程后台程序遇到了防火墙的阻止而不能访问外部网络时。在这种情况下,远程后台程序可以被配置成允许与已知的主机建立连接,而那个主机,只需要配置成等待连接即可。在连接建立完成之后,协议会继续自己的工作,这些工作在主动模式和被动模式下几乎是一样的。

使用WinPcap库相对于其他方法有以下优点:

(1)函数调用简单。

(2)可以捕获完整的数据帧,包括链路层帧头信息(不包括帧尾的校验和,网卡在

验证校验和后将自动丢弃校验和部分,只将前面的数据交给上层),从而可以全面地分析各种网络协议。

(3)可以捕获从本机发出的数据帧。

(4)内核级的封包过滤,仅提交给应用程序需要的数据,系统开销小。

(5)WinPcap提供了一套标准的抓包接口,与Libpcap兼容,因此用其开发的应用程序具有较强的可移植性。

相关主题
文本预览
相关文档 最新文档