数据包截获技术与实现毕业设计论文.doc

上传人:文库蛋蛋多 文档编号:3944424 上传时间:2023-03-28 格式:DOC 页数:36 大小:415KB
返回 下载 相关 举报
数据包截获技术与实现毕业设计论文.doc_第1页
第1页 / 共36页
数据包截获技术与实现毕业设计论文.doc_第2页
第2页 / 共36页
数据包截获技术与实现毕业设计论文.doc_第3页
第3页 / 共36页
数据包截获技术与实现毕业设计论文.doc_第4页
第4页 / 共36页
数据包截获技术与实现毕业设计论文.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《数据包截获技术与实现毕业设计论文.doc》由会员分享,可在线阅读,更多相关《数据包截获技术与实现毕业设计论文.doc(36页珍藏版)》请在三一办公上搜索。

1、业设计(论文)数据包截获技术的研究与实现论文作者姓名:申请学位专业:申请学位类别:指导教师姓名(职称):论文提交日期:数据包截获技术的研究与实现摘 要随着网络入侵的不断发展,网络安全变得越来越重要,于是网络入侵取证系统的研究也变得日益重要。在网络入侵取证系统中,对网络上传送的数据包进行有效的监听即截获包是目前取证的关键技术,只有进行高效的数据截获,网络管理员才能对所截获的数据进行一系列的分析,从而进行可靠的网络安全管理。本文对数据包截获技术进行了简要的分析,介绍了TCP/IP基础知识及数据包截获的基本原理,分析了网络数据包的类型及结构,研究了网络数据包的截获机制。利用原始套接字在windows

2、平台下实现了一个数据包截获程序,完成了对数据包进行解包、分析数据包的功能,并对程序进行了功能测试。关键词: 网络数据包;原始套接字;数据包截获;Winpcap;TCP/IP;The Research and Implementation of Capture Mechanism for Network Data PackagesAbstractBecause of the network intrusion of continuously development, the network security becomes more and more important, and the res

3、earch of network intrusion evidence obtaining system is also becoming important day by day. In such systems, the key technique is capturing the data package through the network. With these data, the administrator can carry on a series of analysis and manage the network safety. Data packets capture t

4、echnology is analyzed first. It introduces the TCP/IP basic knowledge, and the captures basic principles, analyses the network data packets type and structure, researches how to do it. The raw socket is used to implement a program that can capture the data package under windows platform. It can unpa

5、ck the data package and analysis as well. The program is tested at last.Key words: Network packet; Raw socket; Data packet capture; Winpcap; TCP/IP;目录论文总页数:27页1引 言11.1本课题的研究意义11.2本文研究的内容22 数据包截获的基本原理22.1 TCP/IP通信模型22.1.1基本概念22.1.2 TCP/IP 术语22.1.3 TCP/IP 体系结构32.1.4 TCP/IP特点42.2数据包截获技术概述52.2.1局域网的连接方式

6、52.2.2网卡工作模式62.3数据包截获实现基础62.4网络数据截获63数据包截获机制的研究73.1 概述73.2 WinPcap数据包截获机制83.3 套接字数据包截获机制94基于原始套接字的设计与实现114.1原始套接字简介114.2数据包截获技术需求分析114.3数据包截获程序设计流程图124.4数据包截获程序的具体实现原理134.5程序设计实现重点154.5.1数据包的截获154.5.2数据包的解析175 功能测试225.1截获UDP数据包225.2截获TCP包225.3截获ICMP包23结 论24参考文献25致 谢26声 明27 1引 言Internet的发展与普及产生了巨大的社会

7、与经济效益,同时也给网络管理员们带来了越来越多的挑战和烦恼,应付无穷的网络故障、黑客攻击及入侵已成为他们每天必须面对的难题。因此,针对具体问题开发相应的网络管理工具已成为许多网络专家及有识之士的共识。数据包的截获(或称嗅探)技术是开发这些工具的重要基础之一。网络数据包的截获无论是在网络安全还是在黑客攻击方面均扮演很重要的角色。通过使用数据包截获程序可以把网卡设置为混杂模式,并可以实现对网络上传输数据包的截获与分析。此分析结果可供网络安全分析之用,但如为黑客所利用也可以为其发动进一步的攻击提供有价值的信息。可见,数据包截获程序实际上是一把双刃剑。虽然数据包截获技术被黑客利用后会对网络安全构成一定

8、的威胁,但数据包截获程序本身的危害并不是很大,主要是用来为其他黑客软件提供网络情报,真正的攻击主要是用其他黑客软件来完成。而在网络安全方面,网络嗅探手段可以有效地探测在网络上传输的数据包信息,通过对这些信息的分析利用是有助于网络安全维护的。比如,我们可以截获到在网络上传输的数据包的MAC地址、IP地址、协议类型端口号等细节。通过分析这些数据,网络管理员就可以知道网络中到底有什么样的数据包在活动了。与此同时,数据包截获应用程序不仅仅能用来做一般的嗅探工作外,我们还可以对截获的数据包进行更加深入地分析,如黑客可用来分析网络中SMTP数据包,截取用户的邮件内容,也可以用来分析网络中的口令信息,并与其

9、它手段结合起来,入侵到相关的主机。对一些已知的网络攻击方法,我们还可以编制专门的分析程序,监听该类型的数据包,找到攻击者,及时保护网络安全。另外,我们也可以用它来监测网络中的数据流量,分析网络故障。网络包过滤、网络日志等也是相关的应用领域。总之深入研究数据包截获技术,可以帮助我们找到网络中存在的问题,更好地进行网络维护及安全管理。1.1本课题的研究意义计算机网络技术的飞速发展,极大的改变了人们传统的生活和工作模式,越来越多的社会经济活动开始依赖网络来完成,可以说计算机网络的发展已经成为现代社会进步的一个重要标志。但与此同时,计算机犯罪、黑客攻击、病毒入侵等恶性事件也频频发生。因此,信息安全已越

10、来越受到世界各国的重视。本文通过对数据包截获技术对网络上传输的数据包的截获与分析功能的进一步了解,做到知己知彼。通过数据包截获程序对网络上传输的数据包进行截获和分析,获取所需要的信息,利用对这些信息进行网络安全分析。因此,对数据包截获技术的研究具有重要意义。1.2本文研究的内容本文的研究主要围绕以下几个方面进行。1. 数据包截获的概念及技术的研究。主要包括数据包截获技术的概念、数据包截获技术的工作原理及常见数据包截获技术的实现原理等。2. 数据包截获程序的实现。主要工作包括:给出了一个数据包截获程序的系统框架、数据包截获程序的设计、数据包的解析等。3. 数据包截获程序的功能测试与评价,得出结论

11、。2 数据包截获的基本原理2.1 TCP/IP通信模型2.1.1基本概念TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是发展至今最成功的通信协议之一。它允许分布在各地安装着完全不同系统的计算机互相通信。它是一个真正的开放系统,该协议族的定义及其多种实现可以通过多重途径无偿得到。随着PC的普及,TCP/IP以其开放的特点,成为了Internet的基础。TCP/IP协议是由ISO(Internet Standards Organization,国际化标准组织)制定的一系列网络协议的总称。TCP/IP通信的基础是

12、OSI(Open System Internet connection,开放系统互连)OSI模型将计算机网络按功能分为7层,如图1所示源机 目标机 7、应用层同层之间对等通信 7、应用层6、表示层6、表示层信信息流5、会话层信信息流5、会话层4、传输层4、传输层3、网络层3、网络层2、数据链路层2、数据链路层1、物理链路层1、物理链路层信 息 流图1 OSI模型2.1.2 TCP/IP 术语Internet 标准使用一套特定的术语来描述与 TCP/IP 网络相关的网络元素和概念。这些术语是后面各章节内容的基础。TCP/IP 中的常用术语和概念如下所述: 节点 任何运行一个 IP 实现的设备(包

13、括路由器和主机)。 上层协议 位于 IP 之上并将 IP 用作其传输层的协议。示例包括 Internet 层协议(如 Internet 控制消息协议 (ICMP))和传输层协议(如传输控制协议 (TCP) 和用户数据报协议 (UDP))。(但是,将 TCP 和 UDP 用作传输层的应用层协议不属于上层协议。文件传输协议 FTP 和域名系统 DNS 属于这类应用层协议)。有关 TCP/IP 协议套件各层的详细信息,请参见2.1.3“TCP/IP体系结构”和2.1.4“TCP/IP特点”。 地址 在 Internet 层分配给一个接口或一组接口的、可用作 IP 数据包的源或目标的标识符。 数据包

14、存在于 Internet 层的、由 IP 标头和有效负载构成的协议数据单元 (PDU)。2.1.3 TCP/IP 体系结构TCP/IP协议实际上就是在物理网上的一组完整的网络协议。其中TCP是提供传输层服务,而IP则是提供网络层服务。TCP/IP包括以下协议:(结构如图2)应用层网络层传输层链路层图2 TCP/IP体系结构IP: 网际协议(Internet Protocol) 负责主机间数据的路由和网络上数据的存储。同时为ICMP,TCP,UDP提供分组发送服务。用户进程通常不需要涉及这一层。ARP: 地址解析协议(Address Resolution Protocol)此协议将网络地址映射到

15、硬件地址。RARP:反向地址解析协议(Reverse Address Resolution Protocol)此协议将硬件地址映射到网络地址ICMP:网际报文控制协议(Internet Control Message Protocol)此协议处理信关和主机的差错和传送控制。TCP: 传送控制协议(Transmission Control Protocol)这是一种提供给用户进程的可靠的全双工字节流面向连接的协议。它要为用户进程提供虚电路服务,并为数据可靠传输建立检查。(注:大多数网络用户程序使用TCP)UDP: 用户数据报协议(User Datagram Protocol) 这是提供给用户进程

16、的无连接协议,用于传送数据而不执行正确性检查。FTP: 文件传输协议(File Transfer Protocol)允许用户以文件操作的方式(文件的增、删、改、查、传送等)与另一主机相互通信。SMTP:简单邮件传送协议(Simple Mail Transfer Protocol)SMTP协议为系统之间传送电子邮件。ELNET:终端协议(Telnet Terminal Protocol) 允许用户以虚终端方式访问远程主机HTTP: 超文本传输协议(Hypertext Transfer Protocol)TFTP: 简单文件传输协议(Trivial File Transfer Protocol)2

17、.1.4 TCP/IP特点TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中实现。因此用户一般不涉及。编程时,编程界面有两种形式:(1)由内核心直接提供的系统调用;(2)使用以库函数方式提供的各种函数。前者为核内实现,后者为核外实现。用户服务要通过核外的应用程序才能实现,所以要使用套接字(socket)来实现。图3是TCP/IP协议核心与应用程序关系图。图3 TCP/IP协议核心与应用程序关系图2.2数据包截获技术概述对前面的TCP/IP协议有了一定了解,对数据包截获技术研究就奠定了一定基础。数据包截获技术又称为网络嗅探,放置

18、于网络节点处,对网络中的数据帧进行截获的一种被动监听手段,是一种常用的收集有用数据的方法,其基本原理对经过网卡的数据包进行截获和解码,从链路层协议开始进行解码分析,一直到应用层的协议,最后获取数据包中需要的内容。这些数据可以是用户的账号和密码,可以是一些商用机密数据等等。 2.2.1局域网的连接方式局域网的连接设备主要有HUB和交换机。由于以HUB连接的以太网等很多网络是基于总线方式的,所以当一个机器给另一个机器发送数据时,HUB会将要传送的数据包发送至本网段内的所有主机。这种以广播方式发送数据包的形式使得任何网络接收设备都可以接收到所有正在传送的通讯数据,不过通常情况下主机只将判断为应该接收

19、的数据包传给上层应用程序处理。所以在共享HUB情况下同一网段的所有机器的网卡都能接收到数据。 而交换机能记住每个端口的MAC地址,该哪个机器接收就发往哪个端口,而不是像HUB那样发给所有的端口,所以交换机环境下只有该接收数据的机器的网卡能接收到数据。HUB的工作模式使得共享决定了同一网段同一时间只能有两个机器进行数据通信,而交换机在两个机器传输数据的时候其它端口没有占用,所以其它端口之间也可以同时传输。这就是HUB与交换机不同的两个地方,HUB是同一时间只能有一个机器发送数据并且所有机器都可以接收,只要不是广播数据,交换机同一时间可以有一对机器进行数据传输并且数据是私有的。 2.2.2网卡工作

20、模式在实际的系统中,数据的收发由网卡来完成,网卡的主要工作原理是整理计算机发往网线上的数据,并将数据包发送出去。当网卡接收到传输来的数据时,根据接收数据帧的目的MAC地址和网卡驱动程序设置的接收模式进行判断,对需要接收的就产生中断信号送CPU,然后由操作系统调用驱动程序进行接收;认为不该接收的就丢弃不管,所以不该接收的数据在网卡处就截断了。对于网卡来说一般有四种接收模式: (1)广播方式(Broadcast):能够接收网络中的广播信息。 (2)组播方式(Multicast):网卡能够接收组播数据,也就是一个人发出的包可以同时被其他多个有资格的人接收,这些人就形成了一个组,他们在组内的通信是广播

21、式的。 (3)直接方式(Directory):只有目的网卡才能接收该数据。 (4)混杂模式(Promiscuous):能够接收一切通过网卡的数据。 网卡的缺省工作模式包含广播模式和直接模式,即它只接收广播帧和发给自己的帧,而网络数据包截获程序一般采用第4种模式。 2.3数据包截获实现基础以太网数据帧是一组比特流,它们在传输介质上进行传输,从而实现信息的传递。以太网帧格式符合IEEE802.3标准,帧中包含目的地址和源地址,目的地址最高位为0是普通地址,为1时是组地址。当一个帧送到组地址时,组内的所有站点都会收到该帧。如果将它送到一个普通地址,一般情况下,只有一个站点收到这个帧,但是,以太网是以

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

23、本网段的所有数据信息。2.4网络数据截获网络数据截获主要利用系统提供的协议编程接口来实现,Windows sockets是在Windows环境下使用的一套网络编程规范简称为Winsock。在windows环境下Winsock API依靠套接口(Socket)进行通讯。通信时,数据首先被写入本地主机的socket中,然后该socket通过网络接口卡(NIC)的传输介质将传来的信息发送到另一台主机的socket中如图4所示图4 网络数据截获原理图套接口有三种类型:流式套接口、数据报套接口和原始套接口。前两种套接字只能访问到传输层。也就是说只能接收自己硬件地址相匹配的或是以广播形式发出的数据帧,对于

24、其他形式的数据帧比如已到达网络接口但却不是发给此地址的数据帧,网络接口在验证投递地址并非自身地址之后将引起响应。而原始套接口允许对网络层协议如(IP或ICMP)进行直接访问,对于流经网卡的所有数据都可以接收到。原始套接字截获到的数据包并不仅仅是单纯的数据信息,而是包含有IP头、TCP头等信息头的最原始的数据信息,通过对这些在低层传输的原始信息的分析可以得到有关网络的一些信息。3数据包截获机制的研究3.1 概述纵观国内外在数据包截获技术中所使用的包截获机制的方法,大致可归纳为两类:一类是由操作系统内核提供的截获机制;另一类是由应用软件或系统开发包通过安装包截获驱动程序提供的截获机制,该机制主要用

25、于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 Packet Capture)是W

26、in32上的第一个用来截获数据包的开放系统软件包,它是一种新提出的强有力并且可扩展的框架结构。WinPcap包含了一系列以前系统所没有的创新特性。本文将对目前比较流行的WinPcap软件包提供的截获机制进行简单介绍。3.2 WinPcap数据包截获机制WinPcap的体系结构如图5所示:图5 Winpcap的体系结构由WinPcap体系结构图可以看出它采用的是分层化的驱动程序模型,并包含有三个组件:1.内核级的数据包截获驱动程序2.低级的动态连接库(Packet.dll)3.高级系统无关库(Wpcap.dll)WinPcap(Windows Packet Capture)是由微软资助的一个项目

27、,其核心仍是基于NDIS的,但它对NDIS进行封装,它是Windows平台下一个免费、公共的网络访问系统,它为win32应用程序提供访问网络底层的能力.它提供了以下的各项功能:1.截获原始数据报,包括在共享网络上各主机发送/接收以及相互之间交换的数据报;2.在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;3.在网络上发送原始的数据报;4.收集网络通信过程中的统计信息。在Windows NT下WinPcap包截获驱动和网卡设备驱动的交互是通过NDIS(Network Device Interface Specification)来实现的。而且包截获驱动既与网络驱动通信又与用户

28、应用程序通信,所以它在NDIS结构中如同一个协议驱动,对WindowsNT操作系统中的NDIS结构中的高端驱动进行编程,这样编制的程序与上层应用程序更容易连接,应用程序对驱动设置的工作也更方便。如图6所示:图6 数据包截获驱动在NDIS中所处位置3.3 套接字数据包截获机制上世纪80年代初,加利福尼亚大学Berkeley分校在UNIX操作系统下实现了TCP/IP协议,它们为TCP/IP网络通信开发了一个应用程序接口(API),这个API称为socket(套接字)接口。Socket给程序员提供了一个高层接口,它的出现使得程序员在编写网络应用程序时只需要调用函数,对网络的底层细节并不需要精通,因此

29、十分方便。socket实质上是提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的。正如打电话之前,双方必须拥有各自的电话机一样。在网间和网内部,每一个socket用一个半相关描述:(协议,本地地址,本地端口)一个完整的socket连接则用一个相关描述: (协议,本地地址,本地端口,远地地址,远地端口)每一个socket有一个本地唯一的socket号,由操作系统分配。最重要的是,socket是面向客户服务器模型而设计出来的,针对客户和服务器程序提供不同的socket系统调用。客户随机申请一个socket(相当于一个想打电话的人可以在任何一台入网电

30、话上拨号呼叫),系统为之分配一个socket号,服务器拥有全局公认的socket(在LINUX中,/etc/services用于存储全局公认的socket号),任何客户都可以向它发出连接请求和信息请求。下面我们一一给出重要的socket系统调用。函数socket()可以创建一个socket对象,socket()函数的原型如下:SOCKET socket(int af, int type, int protocol);创建一个socket实际上是向系统申请一个属于自己的socket号。af(Address Family)俗称套接字地址族,如表1所示。表1 Linux支持的套接字地址族套接字地址族

31、描述UNIXUNIX域套接字INET通过TCP/IP协议支持的Internet地址族AX25Amater radio X25IPXNovell IPXAPPLETALKAppleTalk DDPX25X25协议族、socket类型和协议常用的组合如表2所示:表2 系统调用三参数组合关系协议族(af)Socket类型(type)协议(UNIX表示)实际协议AF_INETSock_DGRAMIPPROC_UDPUDPSock STREAMIPPROC_TCPTCPSock RAMIPPROC_ICMPICMPSock RAMIPPROC_RAM某低级协议指定本地地址使用函数bind()一一绑定so

32、cket()系统调用创建socket时,只指定了相关五元组的协议元,没有指定其余四元(本地地址、本地端口、远地地址、远地端口),因此需要别的系统调用加以补充。bind()将本地socket地址(包括本地主机地址和本地端口)与所创建的socket号联系起来,即将本地socket地址赋予socket,以指定本地半相关。其用于Linux性能评估的测试工具的设计与实现调用格式为: bind(sockid, localaddr, addrlen)总的来说,各种socket地址数据结构包括两大部分:地址类型和协议地址。网络协议地址又包括主机地址和端口号。监听 listen()对于服务器来说,在它接受客户机

33、的连接之前,首先要监听。只有进入了监听模式,才能接受来自客户机的连接。这一点可以通过listen()函数来实现,它的原型如下:int listen(SOCKET s, int backlog);各参数意义如下:s:进行监听的套接字。Backlog:正在等待连接的最大队列的长度。如果backlog的只为3,有4个客户机同时发出连接请求,则前3个会放在等待连接队列中,最后一个将被忽略。如果函数成功,则返回0;否则返回SOCKET_ERROR。当客户机和服务器的连接建立起来后,用函数send()和recv()来进行数据传输。4基于原始套接字的设计与实现4.1原始套接字简介 原始套接字是网络的基本构件

34、。套接字是从 Berkeley Sockets 扩展而来的,其在继承 Berkeley Sockets 的基础上,又进行了新的扩充。这些扩充主要是提供了一些异步函数,并增加了符合WINDOWS消息驱动特性的网络事件异步选择机制。套接字由两部分组成:开发组件和运行组件。开发组件是指套接字实现文档、应用程序接口(API)引入库和一些头文件。运行组件是指套接字应用程序接口的动态链接库(WINSOCK.DLL)。它是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连听进程。套接字存在通信区域(通信区域又称地址簇)中。套接字只与同一区域套接字只支持一个中的套接字交换数据(跨区域时,

35、需要执行某和转换进程才能实现)。WINDOWS 中的域网际域。套接字具有类型,WINDOWS SOCKET 2.1 版本支持两种套接字:流套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM)。本文使用的WINDOWS SOCKET 2.1 版本。4.2数据包截获技术需求分析 数据包截获技术是开发网络管理工具软件的重要基础之一,因为许多故障及入侵判断都是建立在网络流量或数据的分析基础上的。具体来说,数据包截获可以应用在检测网络流量,分析网络故障;网络协议工作原理及过程分析;非法数据截获与入侵检测;网络设备开发。程序可以设置针对IP地址和协议类别包过滤器,专门截获某一协议(如TC

36、P,UDP,ICMP)或某一主机的数据包。对数据进一步分析可以了解该类协议的各种过程及协议内容,这在计算机网络课程的教学对网络知识的掌握。另外,也可以对数据包的内容进行分析与理解,获得所需的信息。入侵检测是网络安全领域一个重要的研究方向,如请检测系统由探测器、分析器、用户接口等三个部分组成,其中探测器负责采集数据(如网络数据报、日志文件和系统调用记录等);分析器则主要是设定一系列规则,对探测器送来的数据进行分析,用户接口负责与用户交互。显然,数据包截获是入侵检测系统信息的重要来源之一。4.3数据包截获程序设计流程图利用套接字开发数据包截获程序时的一般步骤如图7所示N构造运行环境,生成输出条件创

37、建原始套接字,并初始化截获IP包解析IP包输出IP包信息停止截获开始结束Y图7 数据包截获分析工作流程如图7所示,在利用套接字开发数据包截获程序时的一般步骤是:首先,创建原始套接字,其次将原始套接字绑定到本地网卡地址上;设置网卡为混杂模式,这样网卡就可以收到任何在网络中传输的数据包;在以上条件下开始对数据包进行截获、分析。4.4数据包截获程序的具体实现原理数据包截获程序作为一种网络通讯程序,是通过对网卡的编程来实现网络通讯的,对网卡的编程是使用通常的套接字(socket)方式来进行。但是,通常的套接字程序只能响应与自己硬件地址相匹配的或是以广播形式发出的数据帧,对于其他形式的数据帧比如已到达网

38、络接口但却不是发给此地址的数据帧,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取到达的数据包。而本设计的要求通过数据包截获程序从网卡接收所有经过它的数据包,因此,在该系统中将网卡以混杂模式替代通常的正常模式。 本设计中,这种对网卡混杂模式的设置是通过原始套接字(raw socket)来实现的,这也有别于通常经常使用的数据流套接字和数据报套接字。在创建了原始套接字后,需要通过bind()函数将原始套接字绑定到本地网卡。为了让原始套接字能接受所有的数据,还需要通过WSAIoctl ()来进行设置。完成以上设置就可以开始对网络数据包进行嗅探了,对数据包的获取仍像流式套接

39、字或数据报套接字那样通过recv()函数来完成。但是与其他两种套接字不同的是,原始套接字此时截获到的数据包并不仅仅是单纯的数据信息,而是包含有 IP头、 TCP头等信息头的最原始的数据信息,这些信息保留了它在网络传输时的原貌。通过对这些在低层传输的原始信息的分析可以得到有关网络的一些信息。由于这些数据经过了网络层和传输层的打包,因此需要根据其附加的帧头对数据包进行分析。下面先给出结构,数据包的总体结构如表3所示:表3 数据包总体结构数据包IP头TCP头(或其他信息头)数据数据在从应用层到达传输层时,将添加TCP数据段头,或是UDP数据段头。其中UDP数据段头比较简单,由一个8字节的头和数据部分

40、组成,具体格式如表4所示: 表4 UDP数据段头格式16位16位源端口目的端口UDP长度UDP校验和对于此UDP数据段头的分析在编程实现中可通过数据结构UDP_HEADER来定义:typedef struct _udphdr unsigned short uh_sport;/16位源端口 unsigned short uh_dport;/16位目的端口 unsigned short uh_len;/16位长度 unsigned short uh_sum;/16位校验和 UDP_HEADER;而TCP数据头则比较复杂,以20个固定字节开始,在固定头后面还可以有一些长度不固定的可选项,表5给出TC

41、P数据段头的格式组成:表5 TCP数据段头格式16位16位源端口目的端口顺序号确认号TCP头长(保留)7位URGACKPSHRSTSYNFIN窗口大小校验和紧急指针可选项(0或更多的32位字)数据(可选项)对于此TCP数据段头的分析在编程实现中可通过数据结构TCP_HEADER来定义:typedef struct _tcphdrUSHORT th_sport;/16位源端口USHORT th_dport;/16位目的端口unsigned int th_seq;/32位序列号unsigned int th_ack;/32位确认号unsigned char th_lenres; /4位首部长度/6

42、位保留字unsigned char th_flag;/6位标志位USHORT th_win;/16位窗口大小USHORT th_sum;/16位校验和USHORT th_urp;/16位紧急数据偏移量TCP_HEADER;在网络层,还要给TCP数据包添加一个IP数据段头以组成IP数据报。IP数据段头格式如表6所示:表6 IP数据段头格式16位16位版本IHL服务类型总长标识标志分段偏移生命期协议头校验和源地址目的地址选项(0或更多)同样,在实际编程中也需要通过一个数据结构来表示此IP数据段头,下面给出此数据结构的定义: typedef struct _iphdr unsigned charh_

43、lenver;/4位首部长度+4位IP版本号unsigned chartos; /8位服务类型TOSunsigned shorttotal_len;/16位总长度(字节)unsigned shortident;/16位标识unsigned shortfrag_and_flags;/3位标志位unsigned charttl; /8位生存时间 TTLunsigned charproto;/8位协议 (TCP, UDP 或其他)unsigned shortchecksum;/16位IP首部校验和unsigned intsourceIP; /32位源IP地址unsigned intdestIP; /

44、32位目的IP地址IP_HEADER;4.5程序设计实现重点在此数据包截获程序设计中,重点在于设计一个截获、分析程序,用于研究是数据包的截获与分析技术的实现,这二点是此设计的重点。就此设计的数据包截获程序来说,在截获到数据包之后,一层一层对数据包进行解析,最后分析出数据包里面包含的数据信息。现我们详细阐述截获数据包与分析数据包的情况。4.5.1数据包的截获在截获数据包前,首先对原始套接字进行设置,代码如下:/初始化SOCKETWSADATA wsaData;iErrorCode = WSAStartup(MAKEWORD(2,1),&wsaData);CheckSockError(iError

45、Code, WSAStartup);SockRaw = socket(AF_INET , SOCK_RAW , IPPROTO_IP);/创建套接字CheckSockError(SockRaw, socket);/获取本机IP地址char FAR nameMAX_HOSTNAME_LAN;iErrorCode = gethostname(name, MAX_HOSTNAME_LAN);CheckSockError(iErrorCode, gethostname);struct hostent FAR * pHostent;pHostent = (struct hostent * )malloc(sizeof(struct hostent);pHostent = gethostbyname(name);/填充SOCKADDR_IN结构的内容SOCKADDR_IN sa;sa.sin_family = AF_INET;/ internet协议簇sa.sin_port = htons(6000);/ socket端口号(端口号可以随便改,但与系统不能冲突)memcpy(&sa.sin_addr.S_un.S_addr, pHostent-h_addr_list0, pHostent-h_length);free(pHostent);iErrorCode = bind(

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号