毕业设计(论文)网络嗅探器的设计与实现.doc

上传人:laozhun 文档编号:3984627 上传时间:2023-03-30 格式:DOC 页数:21 大小:168.50KB
返回 下载 相关 举报
毕业设计(论文)网络嗅探器的设计与实现.doc_第1页
第1页 / 共21页
毕业设计(论文)网络嗅探器的设计与实现.doc_第2页
第2页 / 共21页
毕业设计(论文)网络嗅探器的设计与实现.doc_第3页
第3页 / 共21页
毕业设计(论文)网络嗅探器的设计与实现.doc_第4页
第4页 / 共21页
毕业设计(论文)网络嗅探器的设计与实现.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《毕业设计(论文)网络嗅探器的设计与实现.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)网络嗅探器的设计与实现.doc(21页珍藏版)》请在三一办公上搜索。

1、网络嗅探器的设计与实现摘 要随着网络技术的发展和网络应用的普及,越来越多的信息资源放在了互联网上,网络的安全性和可靠性显得越发重要。因此,对于能够分析、诊断网络,测试网络性能与安全性的工具软件的需求也越来越迫切。网络嗅探器具有两面性,攻击者可以用它来监听网络中数据,达到非法获得信息的目的,网络管理者可以通过使用嗅探器捕获网络中传输的数据包并对其进行分析,分析结果可供网络安全分析之用。本文对网络嗅探技术进行了简要分析,研究了网络数据包的捕获机制,如winpcap、原始套接字。文中首先分析了嗅探的原理和危害,并介绍了几种常见的嗅探器,然后研究了入侵检测系统中使用的包捕获技术。本文利用原始套接字在w

2、indows平台下实现了一个网络嗅探器程序,完成了对数据包进行解包、分析数据包的功能。关键词:网络嗅探器;数据包捕获;数据包分析;原始套接字Design and Realization of Network SnifferAbstractAlong with the development of network technologies and the popularization of network applications, more and more information resources are put on internet. The network security and

3、reliability become important increasingly. Therefore, the demand of the software tools which could analyze, diagnosis and test network performance or security are more and more pressing. Network sniffer has two sides. An attacker can use it to monitor network data, to achieve the purpose for obtaini

4、ng information illegally, while network managers can use it to capture and analyze the data which transmitted on network. The result of analysis can be used to analyze the network security.This thesis briefly analyzed the technology of network sniffer, and researched the capture mechanism of network

5、 data packets such as winpcap and raw socket. This paper first analyzed the theory and the harm of sniffer, introduced several common sniffers, and then researched the capture technology which used in the intrusion detection system. The thesis uses raw sockets on windows platform to realize one snif

6、fer which can complete unpack and analyze data packet.Key words: network sniffer; capture data packet; analyze data capture; raw sockets目 录论文总页数:25页1 引言11.1 网络安全的现状11.1.1 计算机网络安全的问题11.1.2 网络安全机制及技术措施11.2本课题的研究意义21.3本文研究的内容32 网络嗅探器的基本原理32.1网络嗅探器概述32.2 嗅探器实现基础32.3 常见的sniffer42.4 数据包捕获机制的研究42.4.1 WinPc

7、ap包捕获机制52.4.2 套接字包捕获机制62.5 嗅探器的两面性82.5.1 sinffer的危害82.5.2 通过网络嗅探进行网络管理93 入侵检测系统与嗅探器93.1 入侵检测概念93.2 入侵检测的实现与嗅探器103.2.1 入侵检测的实现与嗅探器的关系113.2.2 数据包嗅探技术在入侵检测系统中的应用114 嗅探器的实现与测试124.1利用套接字开发网络嗅探程序的步骤124.2 嗅探器的具体实现原理134.3 数据包捕获程序设计154.4 数据包的解析154.5 数据的显示194.6 嗅探器的测试22结 论23参考文献23致 谢24声 明251 引言1.1 网络安全的现状1.1.

8、1 计算机网络安全的问题随着各种新的网络技术的不断出现、应用和发展,计算机网络的应用越来越广泛,其作用也越来越重要。但是由于计算机系统中软硬件的脆弱性和计算机网络的脆弱性以及地理分布的位置、自然环境、自然破坏以及人为因素的影响,不仅增加了信息存储、处理的风险,也给信息传送带来了新的问题。计算机网络安全问题越来越严重,网络破坏所造成的损失越来越大。Internet的安全已经成为亟待解决的问题。从目前使用的情况来看,对计算机网络的入侵、威胁和攻击,基本上可以归纳为以下几种:1.外部人员攻击2.黑客入侵3.信息的泄漏、窃取和破坏4.搭线窃听5.线路干扰6.拒绝服务或注入非法信息7.修改或删除关键信息

9、8.身份截取或中断攻击9.工作疏忽,造成漏洞10.人为的破坏网络设备,造成网络瘫痪1.1.2 网络安全机制及技术措施目前国内外维护网络安全的机制主要有以下几类:1.访问控制机制 访问控制机制是指在信息系统中,为检测和防止未授权访问,以及为使授权访问正确进行所设计的硬件或软件功能、操作规程、管理规程和它们的各种组合。2.身份鉴别 身份鉴别技术是让验证者相信正在与之通信的另一方就是所声称的那个实体,其目的是防止伪装。3.加密机制 对纯数据的加密,加密机制是对你不愿意让他人看到的这些数据(数据的明文)用可靠的加密算法,只要破解者不知道被加密数据的密码,他就不可解读这些数据。4.病毒防护 计算机病毒的

10、防范既是一个技术问题,也是一个管理问题,它采取以“预防为主,治疗为辅”的防范策略将计算机病毒的危害降到最小限度。针对以上机制的网络安全技术措施主要有:(1)防火墙技术 防火墙是指一种将内部网和公众网络分开的方法,它实际上是一种隔离技术,是在两个网络通信是执行的一种访问控制手段,它能允许用户“同意”的人和数据进入网络,同时将用户“不同意”的人和数据拒之门外,最大限度地阻止网络中的黑客来访自己的网络,防止他们更改、复制和毁坏自己的重要信息。(2)基于主机的安全措施 通常利用主机操作系统提供的访问权限,对主机资源进行保护,这种安全措施往往只局限于主机本身的安全,而不能对整个网络提供安全保证。 (3)

11、加密技术 用于网络安全的加密技术通常有两种形式:(a)面向服务的加密技术。面向服务的加密技术即通常所说的信息加密。它是指利用好的密码算法对有些敏感数据、文件和程序进行加密,并以密文方式存取,以防泄密。其优点在于实现相对简单,不需要对网络数据所经过的网络的安全性提出特殊的要求。(b)面向网络的加密技术。面向网络的加密技术是指通信协议加密,它是在通信过程中对包中的数据进行加密,包括完整性检测、数字签名等,这些安全协议大多采用了诸如RSA公钥密码算法、DES分组密码、MD系列Hash函数及其它一些序列密码算法实现信息安全功能,用于防止黑客对信息进行伪造、冒充和篡改,从而保证网络的连通性和可用性不受损

12、害。加密技术是网络信息最基本、最核心的技术措施。但加密的有效性完全取决于所采用的密码算法,故一般由中央授权部门研制生产,不能自行采用一些密码算法用于网络中,否则后果不堪设想。 (4)其它安全措施 包括鉴别技术、数字签名技术、入侵检测技术、审计监控、防病毒技术、备份和恢复技术等。鉴别技术是指只有经过网络系统授权和登记的合法用户才能进入网络。审计监控是指随时监视用户在网络中的活动,记录用户对敏感的数据资源的访问,以便随时调查和分析是否遭到黑客的攻击。这些都是保障网络安全的重要手段。1.2本课题的研究意义计算机网络技术的飞速发展,极大的改变了人们传统的生活和工作模式,越来越多的社会经济活动开始依赖网

13、络来完成,可以说计算机网络的发展已经成为现代社会进步的一个重要标志。但与此同时,计算机犯罪、黑客攻击、病毒入侵等恶性事件也频频发生。因此,信息安全已越来越受到世界各国的重视。嗅探器作为一种网络通讯程序,是通过对网卡的编程来实现网络通讯的,对网卡的编程是使用通常的套接字(socket)方式来进行。但是,通常的套接字程序只能响应与自己硬件地址相匹配的或是以广播形式发出的数据帧,对于其他形式的数据帧比如已到达网络接口但却不是发给此地址的数据帧,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取到达的数据包。而网络嗅探器的目的恰恰在于从网卡接收所有经过它的数据包,这些数据包即

14、可以是发给它的也可以是发往别处的。显然,要达到此目的就不能再让网卡按通常的正常模式工作,而必须将其设置为混杂模式。本文通过对网络嗅探器对网络上传输的数据包的捕获与分析功能的进一步了解,做到知己知彼。通过网络嗅探器对网络上传输的数据包进行捕获和分析,获取所需要的信息,利用对这些信息进行网络安全分析。因此,对网络嗅探器的研究具有重要意义。1.3本文研究的内容本文的研究主要围绕以下几个方面进行。1.网络嗅探器的概念及技术的研究。主要包括网络嗅探器的概念、网络嗅探器的工作原理及常见网络嗅探器的实现原理等。2.入侵检测与嗅探器之间的联系,入侵检测的实现由四部分组成:数据包嗅探解析部分、数据行为检测部分、

15、算法部分和扫描检测部分。数据包嗅探技术是实现入侵检测的基础,将数据包从共享网络线路中捕获,并将其提取到应用程序中。3.网络嗅探程序的实现。主要工作包括:给出了一个网络嗅探程序的系统框架、数据包捕获程序的设计、数据包的解析、数据的显示等。4.网络嗅探程序的性能测试与评价,得出结论。2 网络嗅探器的基本原理2.1网络嗅探器概述网络嗅探器又称为网络监听器,简称为Sniffer子系统,放置于网络节点处,对网络中的数据帧进行捕获的一种被动监听手段,是一种常用的收集有用数据的方法,这些数据可以是用户的账号和密码,可以是一些商用机密数据等等。Sniffer是利用计算机的网络接口截获目的地为其他计算机的数据报

16、文的一种工具。Sniffer的正当用处主要是分析网络的流量,以便找出所关心的网络中潜在的问题。例如,假设网络的某一段运行得不是很好,报文的发送比较慢,而我们又不知道问题出在什么地方,此时就可以用嗅探器截获网络中的数据包,分析问题的所在。而嗅探器也可作为攻击工具被黑客所利用为其发动进一步的攻击提供有价值的信息。2.2 嗅探器实现基础以太网数据帧是一组数字脉冲,它们在传输介质上进行传输,从而实现信息的传递。以太网帧格式符合IEEE802.3标准,帧中包含目的地址和源地址,目的地址最高位为0是普通地址,为1时是组地址。当一个帧送到组地址时,组内的所有站点都会收到该帧。如果将它送到一个普通地址,一般情

17、况下,只有一个站点收到这个帧,但是,以太网是以广播方式发送帧的,也即这个帧会传播到其所在网段内的所有站点,只不过该站点不会接收目的地址不为本机地址的帧。为了捕获网段内的所有帧(以后称数据包),可以设置以太网卡的工作方式,以太网卡通常有正常模式(normal mode)和混杂模式(promiscuous mode)两种工作模式。在正常模式下,网卡每接收到一个到达的数据包,就会检查该数据包的目的地址,如果是本机地址和广播地址,则将接收数据包放入缓冲区,其他目的地址的数据包则直接丢掉。因此,正常模式下主机仅处理以本机为目的的数据包,网卡如果工作在混杂模式,则可以接收本网段内传输的所有数据包。如果要进

18、行数据包捕获,必须利用网卡的混杂模式,获得经过本网段的所有数据信息。2.3 常见的sniffer sniff网络分析仪有专用硬件和软件的产品,尖端的网络分析仪产品可以找出一般网络接口检测不到的错误:中等商业市场的网络分析仪产品往往是带有特定软件的便携计算机;而基于各个平台的很多普通的网络监听软件则在网上可以自由下载。比较知名的被广泛用于调试网络故障的免费sniff工具有:tcpdump(运行在FreeBSD、linux、SunOS等系统下);Nfswatch(运行在HP-UX、 Irix、SunOS); Etherfind, Snooper(运行在SunOS); Ipman, therload

19、,Gobbler(运行在DOS、Windows)。在Linux下监听的基本实现过程是通过Socket来实现的。Linux支持一种特殊的套接字,即Sock-Packet型套接字。在这种套接字下,应用程序可以读到网卡传递给系统的全部报文,一般情况下,网卡只将那些目的地址是自身的报文传递给系统内核。因此,需要将网卡的工作模式设定为混杂模式,这样系统内核就可以读到网卡监听到的所有报文,从而监听器应用程序也可以读到这些报文。2.4 数据包捕获机制的研究纵观国内外在网络嗅探技术中所使用的包捕获机制的方法,大致可归纳为两类:一类是由操作系统内核提供的捕获机制;另一类是由应用软件或系统开发包通过安装包捕获驱动

20、程序提供的捕获机制,该机制主要用于Win32平台下的开发。操作系统提供的捕获机制主要有四种:BPF(Berkeley packet Filter),DLPI (Data Link Provider Interface),NIT(Network Interface Tap), Sock Packet类型套接口。BPF由基于BSD的Unix系统内核所实现。DLPI是Solaris(和其它System V Unix)系统的内嵌子系统。从性能上看, Sock Packet最弱。Windows操作系统没有提供内置的包捕获机制。它只提供了数量很少并且功能有限的API调用。WinPcap(Windows P

21、acket Capture)是Win32上的第一个用来捕获数据包的开放系统软件包,它是一种新提出的强有力并且可扩展的框架结构。WinPcap包含了一系列以前系统所没有的创新特性。本文将对目前比较流行的WinPcap软件包提供的捕获机制进行简单介绍。2.4.1 WinPcap包捕获机制WinPcap的体系结构如图2-1所示:NetworkLeverAplicationKernlLeverPacketsUser codeCall WinpcapUser codeCall WinpcapUser codeMonitoringWpcap.dllWpcap.dllWpcap.dllWpcap.dllWp

22、cap.dllUser-buffer1User-buffer2User codeDirectaccess tothe NPFpacket.dllcallsPacket.dllStatisticalFilter1Filter2Filter3KernelBuffer2KernelBuffer2NIC Driver(NDIS 3.0 or higher)OtherProtoclStacksUserNetgroupPacker filterNPF图2-1 Winpcap的体系结构由WinPcap体系结构图可以看出它采用的是分层化的驱动程序模型,并包含有三个组件:1.内核级的数据包捕获驱动程序2.低级的

23、动态连接库(Packet.dll)3.高级系统无关库(Wpcap.dll)WinPcap(Windows Packet Capture)是由微软资助的一个项目,其核心仍是基于NDIS的,但它对NDIS进行封装,它是Windows平台下一个免费、公共的网络访问系统,它为win32应用程序提供访问网络底层的能力。它提供了以下的各项功能:1.捕获原始数据报,包括在共享网络上各主机发送/接收以及相互之间交换的数据报;2.在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;3.在网络上发送原始的数据报;4.收集网络通信过程中的统计信息。在Windows NT下WinPcap包捕获驱动和网

24、卡设备驱动的交互是通过NDIS(Network Device Interface Specification)来实现的。而且包捕获驱动既与网络驱动通信又与用户应用程序通信,所以它在NDIS结构中如同一个协议驱动,对WindowsNT操作系统中的NDIS结构中的高端驱动进行编程,这样编制的程序与上层应用程序更容易连接,应用程序对驱动设置的工作也更方便。如图2-2所示:应用程序应用程序协议驱动包捕获驱动NIC驱动数据包核心层网络层图2-2 包捕获驱动在NDIS中所处位置2.4.2 套接字包捕获机制上世纪80年代初,加利福尼亚大学Berkeley分校在UNIX操作系统下实现了TCP/IP协议,它们为

25、TCP/IP网络通信开发了一个应用程序接口(API),这个API称为socket(套接字)接口。Socket给程序员提供了一个高层接口,它的出现使得程序员在编写网络应用程序时只需要调用函数,对网络的底层细节并不需要精通,因此十分方便。socket实质上是提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的。正如打电话之前,双方必须拥有各自的电话机一样。在网间和网内部,每一个socket用一个半相关描述:协议,本地地址,本地端口一个完整的socket连接则用一个相关描述:协议,本地地址,本地端口,远地地址,远地端口每一个socket有一个本地唯一的

26、socket号,由操作系统分配。最重要的是,socket是面向客户服务器模型而设计出来的,针对客户和服务器程序提供不同的socket系统调用。客户随机申请一个socket(相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个socket号;服务器拥有全局公认的socket(在LINUX中,/etc/services用于存储全局公认的socket号),任何客户都可以向它发出连接请求和信息请求。下面我们一一给出重要的socket系统调用。函数socket()可以创建一个socket对象,socket()函数的原型如下:SOCKET socket(int af, int typ

27、e, int protocol);创建一个socket实际上是向系统申请一个属于自己的socket号。af(Address Family)俗称套接字地址族,如表2.1所示。表2.1 Linux支持的套接字地址族套接字地址族描述UNIXUNIX域套接字INET通过TCP/IP协议支持的Internet地址族AX25Amater radio X25IPXNovell IPXAPPLETALKAppletalk DDPX25X25协议族、socket类型和协议常用的组合如表2.2所示:表2.2 系统调用三参数组合关系协议族(af)Socket类型(type)协议(UNIX表示)实际协议AF_INET

28、Sock_DGRAMIPPROC_UDPUDPSock_STREAMIPPROC_TCPTCPSock_RAMIPPROC_ICMPICMPSock_RAMIPPROC_RAM某低级协议指定本地地址使用函数bind()一一绑定socket()系统调用创建socket时,只指定了相关五元组的协议元,没有指定其余四元(本地地址、本地端口、远地地址、远地端口),因此需要别的系统调用加以补充。bind()将本地socket地址(包括本地主机地址和本地端口)与所创建的socket号联系起来,即将本地socket地址赋予socket,以指定本地半相关。其用于Linux性能评估的测试工具的设计与实现调用格式

29、为: bind(sockid, localaddr, addrlen)总的来说,各种socket地址数据结构包括两大部分:地址类型和协议地址。网络协议地址又包括主机地址和端口号。监听 listen()对于服务器来说,在它接受客户机的连接之前,首先要监听。只有进入了监听模式,才能接受来自客户机的连接。这一点可以通过listen()函数来实现,它的原型如下:int listen(SOCKET s, int backlog);各参数意义如下:s:进行监听的套接字。Backlog:正在等待连接的最大队列的长度。如果backlog的只为3,有4个客户机同时发出连接请求,则前3个会放在等待连接队列中,最后

30、一个将被忽略。如果函数成功,则返回0;否则返回SOCKET_ERROR。当客户机和服务器的连接建立起来后,用函数send()和recv()来进行数据传输。2.5 嗅探器的两面性从事网络安全的技术人员和相当一部分准黑客(指使用现成的黑客软件进行攻击的人)都知道网络嗅探器无论是在网络安全还是在黑客攻击方面均扮演了很重要的角色。通过使用网络嗅探器可以实现对网络上传输的数据包的捕获与分析。此分析结果可供网络安全分析之用,也可为黑客所利用为其发动进一步的攻击提供有价值的信息。可见,嗅探器实际是一把双刃剑。2.5.1 sinffer的危害网络嗅探器作为被黑客所利用的攻击工具其危害性主要表现在以下几个方面:

31、1.偷窥机密或敏感的数据信息 通过拦截数据包,入侵者可以记录网上敏感信息的传送,或者干脆拦截整个会话过程。2.窥探低级的协议信息 对底层的协议信息记录,如两台主机之间的网络接口地址,远程网络接口IP地址,IP路由信息和TCP连接的字节顺序号码等,这些信息由非法入侵者掌握后将对网络的安全构成极大的危害。一个入侵者攻击网络系统可能步骤大体有:信息收集安全弱点探测和分析实施攻击逃避检测。入侵者会利用公开的协议和工具,收集目标网络中各个主机系统的相关信息,入侵者会探测目标网络上的各个主机,以寻找该系统的安全漏洞及安全弱点。他可以自编程序或利用公开的程序进行自动扫描,然后对目标实施攻击,获得系统控制权。

32、入侵者甚至可以利用该主机为基础入侵整个网络并留下后门,掩盖痕迹,完成一次入侵。2.5.2 通过网络嗅探进行网络管理在合理的网络中,网络嗅探器的存在对系统管理员是致关重要的,系统管理员通过sniffer可以诊断出大量的不可见模糊问题,这些问题涉及两台乃至多台计算机之间的异常通讯有些甚至牵涉到各种的协议,借助于sniffer系统管理员可以方便的确定出多少的通讯量属于哪个网络协议、占主要通讯协议的主机是哪一台、大多数通讯目的地是哪台主机、报文发送占用多少时间、或者相互主机的报文传送间隔时间等等,这些信息为管理员判断网络问题、管理网络区域提供了非常宝贵的信息。 使用嗅探器进行网络管理主要体现在两个方面

33、:1.使用网络嗅探技术进行网络故障诊断与分析 通过网络嗅探技术收集到网络中传送的数据后对这些数据进行分析可以帮助解决在各种网络上的性能问题并排除网络故障,进一步可以产生报表等数据分析结果以更好的支持网络的运行。2.使用网络嗅探技术进行安全分析 通过对监听结果进行分析,可以及时发现各种危害网络安全的行为,维护网络的安全性。新的网络安全技术的研究方向正集中于网络嗅探技术上,这种方式隐蔽,不会对正常的网络传输造成任何影响,同时数据收集也十分丰富。通过网络嗅探技术实现审计跟踪、攻击检测等在网络安全问题上具有重要意义。3 入侵检测系统与嗅探器3.1 入侵检测概念建立入侵检测系统是网络安全的一个重要工作,

34、通过学习,对入侵检测系统有了一定的了解,下面对入侵检测技术做一个总体介绍。入侵检测技术与防火墙、PKI等技术不同,防火墙、PKI只是立足于“防”,而入侵检测是对网络系统的运行状态进行监视,发现各种攻击企图、攻击行为或者攻击结果,以保证系统资源的机密性、完整性和可用性。为了提高入侵检测系统(IDS)产品、组件及与其他安全产品之间的互操作性,美国国防高级研究计划署(DARPA)和互联网工程任务组(IETF)的入侵检测工作组(IDWG)发起制定了一系列建议草案,从体系结构、API、通信机制、语言格式等方面规范IDS的标准。DARPA提出的建议是公共入侵检测框架(CIDF),最早由加州大学戴维斯分校安

35、全室主持起草工作。CIDF提出了一个通用模型, 将入侵检测系统分成了四大模块:事件产生器(Event Generators),事件分析器(Event Analyzers),响应单元(Response Units)和事件数据库(Event Database)。各部分功能是:1. 事件产生器获得数据并向 IDS 的其它模块提供;2. 事件分析器针对数据进行入侵分析;3. 响应单元对分析的结果作出不同的响应;4. 数据库存储以上三个模块收集及分析的各种数据。在检测的技术上,主要分为三类:静态分析、异常检测、误用检测。1.静态分析方法:通过分析系统配置,检查系统是否已经或可能被人入侵。2.异常检测方法

36、:通过历史数据定义用户正常活动的模型,当检测到与所建立的正常模型有差异的行为发生时,认为可能有入侵行为的发生。3.误用检测方法:通过分析已知的入侵模式,用事先定义的规则描述这些入侵模式,再通过这些已知的行为模式来检测当前网络中是否存在入侵行为。上述三种方法均建立在数据包捕获的基础上。3.2 入侵检测的实现与嗅探器 入侵检测的实现由四部分组成:数据包嗅探解析部分、数据行为检测部分、算法部分和扫描检测部分。在这里以误用检测方法对入侵检测的实现做更详细的介绍。系统编写构架如图3-1所示: 显示模块入侵检测模块网络协议分析模块数据包捕获模块存储模块规则解析模块攻击特征图3-1 入侵检测系统的架构由图3

37、-1可以知道,在编写入侵检测系统时,需要遵循CIDF 标准来进行系统的设计,首先通过数据包嗅探技术获得网络上流通的数据包;其次通过攻击特征库对嗅探到的数据包进行入侵行为的检测;再次对入侵数据包做出报警;最后将这些入侵事件纪录到数据库,便于查询和分析。3.2.1 入侵检测的实现与嗅探器的关系数据包嗅探技术是实现入侵检测的基础,将数据包从共享网络线路中捕获,并将其提取到应用程序中,这个过程要依赖于网络物理层到应用层以及操作系统本身各方面进行协调、设置,下面通过实例来看一下以太网络中数据包的流程:1. 物理层,在一个以太局域网,数据在共享的网络介质(网线、HUB)中以广播的形式到达局域网每一个节点;

38、2. 数据链路层,节点的网络适配器(网卡 NIC)查看到来的数据帧(Frame),通过一系列的检验,将到来的大量的数据帧中属于自己且正确合法的数据帧重构成数据包(Packet)送入操作系统的协议栈;3. 网络层至运输层,操作系统的协议栈通过这两层中的 IP、TCP、UDP 等协议判断到来的数据包是否属于本操作系统的接收范围(根据 IP 地址),是否属于本操作系统上的应用程序的接收范围(根据 Port 端口号),如果所属范围正确并且数据包合法,操作系统通过端口将数据包重构成报文(Segment)送入应用程序。3.2.2 数据包嗅探技术在入侵检测系统中的应用为了嗅探到网络中的任意一个数据包,必须对

39、物理线路、网卡、操作系统进行完全的配合,首先从网络构成上讲,嗅探技术并不是适合所有类型的网络,不同传输介质的网络的可监听性是不同的。一般来说,以太网被监听的可能性比较高,因为以太网是一个广播型的网络,在一个标准的以太网子网上,多台计算机通过一条线路互联,且任何时刻,电缆上只有一个数据包存在,为了保证多台计算机能 共 享 同 一 线 路 , 以 太 网 使 用 了 CSMA/CD(Carrier Sense MultipleAccess/Collision Detection)载波侦听多路访问/冲突检测,这样一来,共享线路上的所有以太网卡及相关设备总是处于对线路上的信号进行监听的状态中,这使得每

40、一台机器都能够探知并接受线路上的数据流。事实证明嗅探适用于基于广播包的网络,如利用广播技术来分发数据包的连通网络(或者使用令牌的网络,只不过因为令牌不一定经过本机器,所以只能嗅探到网络中部分数据包)。此外如果在一个子网内部进行嗅探,而子网顶部存在着诸如交换机这类设备,由于它能够阻止广播,所以就不能够对子网内其他的机器进行监听,若想要对此子网进行监听,就必须处于与此交换机同级的包交换网络中。例如从路由器到某一子网的共享网络中安装一个 hub,在将监听机器和子网交换机用此 hub 连接起来,这样,就能够对此子网进行监听了,另一种办法就是在交换机上给监听机器做端口映射,指明让它接受经过交换机的所有数

41、据包。当数据经过数据链路层后,就要通过操作系统协议栈的审核了,系统协议栈在 TCP/IP 网络模型跨越的层次非常多,它们直接从位于系统的数据链路层提取数据,通过在这一层的开发环境中设置混杂模式,就可以成功的接收从驱动层来的各种数据包。大多数的操作系统在这一层使用的是 Socket 套接字技术,它们通过函数 ioctlsocket(socket, SIO_RCVALL, &Value)来实现混杂模式接收数据包。通过 Socket 的处理,数据流(Bits)已经变成了能识别的数据结构,最后协议栈将数据信息传入应用层应用程序中。最终,所有的数据变成可以识别的文字、符号出现在机器的视频输出上。4 嗅探

42、器的实现与测试4.1利用套接字开发网络嗅探程序的步骤利用套接字开发网络嗅探器程序时的一般步骤如图4-1所示:关闭套接字是开始建立套接字绑定套接字设置网卡为混杂模式初始化数据包接收结构停止接收分析处理数据包否开始捕获显示分析结果图4-1 嗅探器工作流程如图4-1所示,在利用套接字开发网络嗅探器程序时的一般步骤是:首先,创建原始套接字,并设置其操作选项;其次将原始套接字绑定到本地网卡地址上;设置网卡为混杂模式,这样网卡就可以收到任何在网络中传输的数据包;在以上条件下开始对数据包进行捕获、分析。4.2 嗅探器的具体实现原理嗅探器作为一种网络通讯程序,是通过对网卡的编程来实现网络通讯的,对网卡的编程是

43、使用通常的套接字(socket)方式来进行。但是,通常的套接字程序只能响应与自己硬件地址相匹配的或是以广播形式发出的数据帧,对于其他形式的数据帧比如已到达网络接口但却不是发给此地址的数据帧,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取到达的数据包。而本设计的要求通过网络嗅探器从网卡接收所有经过它的数据包,因此,在该系统中将网卡以混杂模式替代通常的正常模式。 具体到编程实现上,这种对网卡混杂模式的设置是通过原始套接字(raw socket)来实现的,这也有别于通常经常使用的数据流套接字和数据报套接字。在创建了原始套接字后,需要通过setsockopt()函数来设置

44、IP头操作选项,然后再通过bind()函数将原始套接字绑定到本地网卡。为了让原始套接字能接受所有的数据,还需要通过WSAIoctl ()来进行设置。至此,实际就可以开始对网络数据包进行嗅探了,对数据包的获取仍象流式套接字或数据报套接字那样通过recv()函数来完成。但是与其他两种套接字不同的是,原始套接字此时捕获到的数据包并不仅仅是单纯的数据信息,而是包含有 IP头、 TCP头等信息头的最原始的数据信息,这些信息保留了它在网络传输时的原貌。通过对这些在低层传输的原始信息的分析可以得到有关网络的一些信息。由于这些数据经过了网络层和传输层的打包,因此需要根据其附加的帧头对数据包进行分析。下面先给出

45、结构,数据包的总体结构如图4-2所示: 数据包 IP头 TCP头(或其他信息头) 数据 图4-2 数据包总体结构数据在从应用层到达传输层时,将添加TCP数据段头,或是UDP数据段头。其中UDP数据段头比较简单,由一个8字节的头和数据部分组成,具体格式如图4-3所示: 16位 16位 源端口 目的端口 UDP长度 UDP校验和 图4-3 UDP数据段头格式对于此UDP数据段头的分析在编程实现中可通过数据结构UDPPacketHead来定义:struct UDPPacketHead WORD SourPort; /16位源端口WORD DestPort; /16位目的端口WORD Len; /16

46、位长度WORD ChkSum; /16位校验和;而TCP数据头则比较复杂,以20个固定字节开始,在固定头后面还可以有一些长度不固定的可选项,图4-4给出TCP数据段头的格式组成: 16位 16位 源端口 目的端口 顺序号 确认号 TCP头长 (保留)7位 URG ACK PSH RST SYN FIN 窗口大小 校验和 紧急指针 可选项(0或更多的32位字) 数据(可选项) 图4-4 TCP数据段头格式对于此TCP数据段头的分析在编程实现中可通过数据结构TCPPacketHead来定义: struct TCPPacketHead WORD SourPort; /源端口WORD DestPort; /目的端口DWORD SeqNo; /32位序列号DWORD AckNo; /32位确认号BYTE HLen; /4位首部长度BYTE Flag; /6位标志位WORD WndSize; /16位窗口大小WORD ChkSum; /16位校验和WORD UrgPtr;

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号