




已阅读5页,还剩64页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
陕西理工学院毕业设计网络数据包的捕获与分析(陕西理工学院数学与计算机科学学院网络工程专业1101班,陕西汉中723003)指导教师:【摘要】网络数据包的捕获对于网络安全有着巨大的作用,为我们更好的分析网络中的数据流提供了帮助。本论文是基于Windows下开发一个网络监听工具,侧重点在于实现网络数据包的捕获,然后分析并显示捕获到的数据包信息这部分功能的实现,如分析:IP首部协议类型、源IP、目的IP和端口号等。采用的是Winpcap(WindowsPacketCapture)来实现的抓包功能。通过VC+6.0中MFC编程实现通过一个完整界面来控制调用Winpcap中的函数来实现对网卡信息的捕获和循环捕获数据包,然后通过预先对于IP、TCP、UDP等数据包的定义和TCPIP等协议来解析其中包含的内容并返回显示捕获到数据包的信息,当然也可以保存捕获到的数据包到指定地点以便进一步分析。【关键词】Winpcap;数据包;捕获;分析陕西理工学院毕业设计TheCaptureandAnalysisofNetworkDataPacketsWangHang(Grade11Class1MajorNetworkEngineeringSchoolofMathematicsandComputerScienceDeptShaanxiUniversityofTechnologyHanzhong723003Shaanxi)Tutor:JiaWeiAbstract:Thecaptureofnetworkdatapacketsplaysanimportantpartinnetworksecuritywhichishelpfulforourbetteranalysisofnetworkdataflow.ThispaperisaboutanetworkmonitoringtoolbasedonWindowssystemwhichemphasizesparticularlyonrealizingthecaptureandanalysisofnetworkdatapacketsandthendisplaysthem.TakeanalysisasanexampleitwillcheckthetypeoftheIPprotocolthesourceaddressofIPthedestinationaddressofIPandtheportnumber.UsetheWinpcap(WindowsPacketCapture)tocaptureofdatapackets.InMFCprogrammingofVC+6.0thecaptureofnetworkdatapacketscanberealizedviatheinvokingandcontrolofthefunctionsthroughafullcontrolpanelandthentheanalysisofIPTCPUDPandTCPIPwillbedonebeforetheyaredisplayed.Certainlytheinationcapturedcanbesavedtotheappointeddestinationinordertogothroughanadvancedanalysis.Keywords:Winpcap;DataPackets;Capture;Analysis陕西理工学院毕业设计目目录录引言.11概述.21.1课题背景.21.2国内外研究现状.21.3课题研究的意义.21.4课题研究的内容.22相关知识介绍.32.1TCPIP协议简介.32.1.1什么是TCPIP.32.1.2TCPIP整体构架概述.32.1.3TCPIP中的协议.32.2WINPCAP开发技术详解.52.2.1Winpcap介绍.52.2.2Winpcap的组成.62.2.3Winpcap数据结构.72.2.4Winpcap函数.73系统设计方案及功能描述.93.1系统设计方案.93.2系统功能描述.94系统编码实现.114.1网络数据包捕获模块的实现.114.1.1网络数据包捕获程序的编写过程.114.1.2在程序中用到的WinPcap内核函数详细介绍.124.1.3网络数据包捕获的应用.134.2网络数据包分析模块的实现.144.2.1网络数据包分析模块主要建立的类.144.2.2IP协议分析类的设计.144.2.3TCP协议分析类的设计.154.2.4UDP协议分析类的设计.174.2.5系统中变量函数的设计.174.3主界面构造.175软件测试.19总结.21参考文献.22致谢.23科技外文文献.24外文文献翻译.36附录A:软件开发源代码.47附录B:软件使用说明书.65陕西理工学院毕业设计第1页共65页引言引言随着网络技术的不断发展,通过网络将人与人的距离拉近,因此网络为来自世界各地不同的人、团体、机构构建了一个网络村。网络的出现方便人们的日常生活及工作,在高度发展的今天,网络已经不仅是浏览信息的品台,还广泛的运用到了商业、办公、金融、政务等各行各业中,网络中的风险也越发突出,进而网络安全问题越来越受到关注。因此,对网络的监控与管理势在必行,而想要监控和管理网络,首先就要获取网络中所传输的各类信息,才能进一步得进行监控和管理,可以说数据包的捕获是对网络监控与管理的前提,所以研究并开发出一种能够有效地实时捕获网络信息的系统具有极其重要的意义。在网络中,信息是以数据包的形式传输,所以为了监控计算机当前网络信息,可以通过WinPcap来实现在当前计算机网络中传输的数据包的抓取,然后通过对捕获数据包中数据信息,进行过滤解析,得到所抓数据包的协议、数据长度,以及数据报内容等信息。此外,此次毕业设计还注重研究,主要体现在应用层协议的识别方面,同时采用了基于正则表达式技术得到某种应用层协议的特征表达式。而为了实现将抓包获取的数据进行解析并展现出来,本次毕业设计还要通过C+编程将其编写成为软件,以便于操作运用,能让获取的数据包数据进行解析后,在界面中显示出来,方便查看数据包各类信息,以及进一步的进行一些对应操作,达到我们解析数据包的目的,并可在日后能添加新功能,加强对数据包的分析能力。陕西理工学院毕业设计第2页共65页11概述概述1.11.1课题背景课题背景随着网络技术的飞速发展,网络的普及,给我们带来了巨大的社会和经济效益,同时网络安全问题变得日益严重,计算机网络的设计、维护难度日益增加,安全问题正威胁着每一个网络用户,对网络安全的研究也越来越重要。因此,人们迫切的需要能够分析、诊断和测试网络的工具,以防我们的电脑尽可能减少受到侵害。对于网络数据包的捕获现在也有着很多的实现方法,存在着许多开源的sniffer软件供我们参考,但是其中的某些细节上还是有一些问题的存在,在效果和效率上都有一些问题,分析上也并不是很方便。所以尝试选择了这个课题。1.21.2国内外研究现状国内外研究现状现在不论是网上的一些开源的Sniffer软件还是市面上出售的网络监听软件,其实其基础功能都是基于网络数据包捕获功能后扩展开的。所以我们可以清晰的认识到网络数据包捕获功能的巨大作用和广泛的应用范围。目前sniffer软件种类繁多,但是很多都存在一些问题,比如说:效率低,效果差,分析困难等等。有些sniffer软件往往嵌入许多并不怎么使用的功能在里面,增加了操作的复杂性,使用起来反而不便。所以真正想要找到一款操作简单使用方便的数据包捕获软件并不容易。作为一名网络工程专业的学生,熟悉常用的各种计算机相关软件,特别是和网络相关的软件是应该的。现在市场上的国内外的各种防火墙软件、网络监听软件和协议分析软件等软件种类繁多,让人有点眼花缭乱。这些产品大多数品质都不错,各有各的特点,所以选择起来的难度也挺大。我总是在一些比较著名的软件下载网站上获取一些比较受好评的软件来使用,然后从中选择适合自己的。通过一系列的使用和学习,我希望能够自己完成一款功能适合自己使用的操作简单让人可以轻易上手的网络数据包捕获和简单分析的软件。1.31.3课题研究的意义课题研究的意义随着网络的飞速发展,Internet的迅速普及,网络已经深入到了我们的生活,跟我们息息相关。伴随着网络带来的便利,网络安全问题也越来越受到人们的关注和重视。防火墙也成了一个非常热门的课题,带来巨大的社会经济效益,保护我们的合法权益不受到侵害。我选择的课题是windows下的网络数据包的捕获与分析,所以主要的研究方向和侧重点是在于最基本也是最核心的网络数据包的捕获和分析等功能上。网络数据包的捕获对于网络安全领域有着无可代替的重要作用,不论是防火墙技术,网络监听技术或者是网络测试都离不开数据包的捕获,这是一切的基础,其他的功能都要基于这个功能才能实现。1.41.4课题研究的内容课题研究的内容由上所述,加强对网络中数据包传输的监管,已经越发显得重要。而对网络中所传输的数据包进行捕获则是对网络中数据包管理的前提,通过监控分析网络中的数据包,是建设安全网络的保障。本实验就是通过研究网络中数据包的传输情况,构建一个简单快捷的数据包抓包及分析软件:一、运用C+开发一个简单的软件实现通过调用winpcap来对网络中的基本数据包进行捕获。二、通过winpcap中常用的库函数的使用方式,来实现了简单的小型的络数据包抓包器,并通过对原始包文的分析来展示当前网络的运行状况。三、对捕获的数据包进行解析分类处理,能将所捕获的数据包中的信息解析罗列成数据表,并可导入日志文本存储。通过以上步骤通过实现数据包的捕获、数据包信息的解析、流量的监控以及数据的导出。陕西理工学院毕业设计第3页共65页22相关知识介绍相关知识介绍2.12.1TCPIPTCPIP协议简介协议简介我们捕获数据包的主要目的就是要对捕获的数据包进行分析。而我们目前使用的网络传输协议就是TCPIP协议。所以我们如果想更好的分析数据包就应该对此协议有点初步的了解。下面我将简单的介绍一下TCPIP协议。.1什么是什么是TCPIPTCPIPTCPIP是供已连接因特网的计算机进行通信的通信协议。TCPIP指传输控制协议网际协议(TransmissionControlProtocolInternetProtocol)。TCPIP定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的标准。22.11.22TTCCPPIIPP整整体体构构架架概概述述TCPIP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而TCPIP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为:应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。传输层:在此层中,它提供了节点间的数据传送,应用程序之间的通信服务,主要功能是数据格式化、数据确认和丢失重传灯。如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。网络接口层(主机-网络层):接收IP数据报并进行传输,从网络上接收物理帧,抽取IP数据报转交给下一层,对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、SerialLine等)来传送数据。.3TCPIPTCPIP中的协议中的协议以下简单介绍TCPIP中的协议都具备什么样的功能,都是如何工作的:(1)IP网际协议IP是TCPIP的心脏,也是网络层中最重要的协议。IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层-TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫作IPsourcerouting,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好像是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。IP数据报格式如图2.1陕西理工学院毕业设计第4页共65页图2.1IP报文格式(2)TCP如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向上传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。面向连接的服务(例如Telnet、FTP、rlogin、XWindows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。TCP报文格式如图2.2图2.2TCP报文格式(3)UDPUDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询-应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网络时间协议)和DNS(DNS也使用TCP)。欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。陕西理工学院毕业设计第5页共65页UDP报文格式如图2.3图2.3UDP报文格式(4)ICMPICMP与IP位于同一层,它被用来传送IP的的控制信息。它主要是用来提供有关通向目的地址的路径信息。ICMP的Redirect信息通知主机通向其他系统的更准确的路径,而Unreachable信息则指出路径有问题。另外,如果路径不可用了,ICMP可以使TCP连接体面地终止。PING是最常用的基于ICMP的服务。(5)TCP和UDP的端口结构TCP和UDP服务通常有一个客户服务器的关系,例如,一个Telnet服务进程开始在系统上处于空闲状态,等待着连接。用户使用Telnet客户程序与服务进程建立一个连接。客户程序向服务进程写入信息,服务进程读出信息并发出响应,客户程序读出响应并向用户报告。因而,这个连接是双工的,可以用来进行读写。(6)常用网际协议编号如表2.1表2.1常用网际协议编号十进制编号协议说明0无保留1ICMP网际控制报文协议2IGMP网际组管理协议3GGP网关网关协议4无未分配5ST流6TCP传输控制协议8EGP外部网关协议9IGP内部网关协议11NVP网络声音协议17UDP用户数据报协议2.22.2WinPcapWinPcap开发技术详解开发技术详解.1WinpcapWinpcap介绍介绍Winpcap(WindowsPacketCapture)是Windows平台下一个专业网络数据包捕获开发包,是为Libpcap在Windows平台下实现数据包的捕获而设计的。在设计Winpcap时参照了Libpcap,两者使用方法相似。使用Winpcap开发包,可以把在Linux下基于Libpcap的程序很容易的移植到Winpcap平台下。Winpcap是在BSD许可证下发布的,它主要是由加利福尼亚大学的LawrenceBerkeleyLaboratory开发。使用Winpcap开发包的主要软件有:Windump(与linux下的Tcpdump的功能几乎一致)、Analyzer(Windows下的嗅探器)、Ethereal(网络协议分析软件)等。陕西理工学院毕业设计第6页共65页开发Winpcap这个项目的目的在于为Win32应用程序提供访问网络底层的能力,其核心功能是捕获网络数据包,其他功能包括数据包过滤、数据包发送、流量统计和数据包存储等。Winpcap给程序员提供了一套标准的网络数据包捕获的编程接口,并且与Libpcap兼容,增加了从linux到windows平台的可移植性。而且提供很高的应用效率,充分考虑了各种性能和效率的优化,在内核层实现了数据包的捕获和过滤。这是由NPF来实现的,NPF是Winpcap的核心部分,它实现了内核层次的统计功能,对于设计网络流量的程序很有好处。在这里我使用的是WinPcap4.1.3版,性能稳定。.2WinpcapWinpcap的组成的组成Winpcap包括三部分内容。第一部分是内核层的数据包过滤模块。它相当于在Linux下Libpcap使用的BPF过滤模块,实现了高效的网络数据包的捕获和过滤功能,其过滤规则跟BPF是一样的。此过滤模块实际上是一个驱动程序,被称为NPF(NetgroupPacketFilter)数据包驱动程序。第二部分是动态链接库packet.dll。它是提供给开发者的一个接口,使用它就可以调用Winpcap的函数,它是一个较低层的开发接口。第三部分是动态链接库wpcap.dll。它也是提供给开发者的一个接口,但它是一个更高层的编程接口,其调用与系统无关。使用此接口进行编程,几乎可以把linux下使用libpcap写的程序原封不动的搬到Windows平台下。网络驱动程序接口规范(NDIS,NetworkDriverInterfaceSpecification)是由微软和3com公司共同制定的,它位于网卡和协议层之间,提供一个接口,为上层协议提供服务,并且屏蔽了下层各种网卡的差别,并且支持多种网络协议。并且支持多种工作模式和网络驱动类型(小端口驱动、中间层驱动、协议驱动),其中Winpcap的NPF就属于协议驱动类型。NPF(NetgroupPacketFilter):NPF是Winpcap的核心部分,它的主要功能就是捕获数据包,还可以发送数据包、存储数据包以及对网络进行统计分析。图2.4NPF的结构图2.4中的箭头标识网络数据包的流动方向,并且可以看到NPF是工作在内核层的。NPF由一个网络转发部件,从网卡驱动程序收集网络数据包,既可以发送给过滤部件,对网络数据包进行过滤,也可以发送给统计部件,对网络进行统计分析,还可以发送给存储陕西理工学院毕业设计第7页共65页部件,把网络数据包直接存储到磁盘。数据包在NPF中使用了缓存机制,主要是为了提高效率和速度。从图2.4中也可以看到,packet.dll位于wpcap.dll的下层,是较低层的网络编程接口。使用它可以跟内核打交道,它是开发者与内核交互的一个很好的接口。Packet.dll提供了很多功能复杂的编程接口,其接口形式与微软的DDK提供的packet32.dll差不多。使用packet.dll比较烦琐,如果无特殊要求,一般不用packet.dll进行编程开发。用的最多的还是wpcap.dll,因为它提供了一个更高级、更方便的编程接口。图2.4中,wpcap.dll是最上层的一个接口,与libpcap兼容,具有很好的可移植性,是用的最多的一种编程接口。使用wpcap.dll进行数据包捕获的编程与使用Libpcap一样简单。.3WinpcapWinpcap数据结构数据结构详细的一些数据结构在后面的软件编程中会给出,此处只是给出一些比较核心的数据结构,并简单介绍。(1)pcap_addrPcap_addr数据结构的定义如下:Tpyedefstructpcap_addrpcap_addr_t;Structpcap_addrStructpcap_addrnext;指向下一个地址结点Structsockaddraddr;网络接口地址Structsockaddrnetmask;地址掩码Structsockaddrbroadaddr;广播地址Structsockaddrdstaddr;目的地址;此数据结构描述的是网络接口的地址。(2)pcap_ifPcap_if数据结构定义如下:Tpyedefstructpcap_ifpcap_if_t;Structpcap_ifStructpcap_ifnext;指向下一个网络接口结点charname;网络接口名字chardescription;描述信息Structsockaddraddresses;网络接口地址Bpf_u_int32flags;标记;此数据结构描述的是一个网络接口,它其实是网络接口链表中的一个结点。(3)pcap_pkthdrPcap_pkthdr数据结构定义如下:Structpcap_pkthdrStructtimts;时间戳Bpf_u_int32caplen;捕获长度Bpf_u_int32len;数据包长度;此数据结构用来描述每个捕获到的数据包的一些基本信息,每个数据包都有此数据结构。.4WinpcapWinpcap函数函数Winpcap提供的输出函数与Libpcap的函数完全一样,使用方法也一样。下面介绍一陕西理工学院毕业设计第8页共65页些主要的函数。(1)网络接口函数:intpcap_findalldevs(pcap_if_talldevspcharerrbuf);此函数的功能是查找机器的所有可用网络接口,用一个链表返回。voidpcap_freealldevs(pcap_if_talldevs);此函数的功能是释放网络接口链表中的所有网络接口。pcap_tpcap_open_live(constchardeviceintsnaplenintpromiscintto_mscharebuf);此函数的功能是打开一个网络接口进行数据包捕获打开的模式有promisc表示,如果是1就表示以混杂模式把接口打开。(2)规则函数:intpcap_setfilter(pcap_tpstructbpf_programfp)此函数设置BPF过滤规则由参数fp确定intpcap_compile(pcap_tpstructbpf_programprogramcharbufintoptimizebpf_u_int32mask)此函数的功能是编译BPF过滤规则。(3)数据包捕获函数:intpcap_loop(pcap_tpintcntpcap_handlercallbacku_charuser)此函数是循环捕获网络数据包,直到遇到错误或者满足退出条件。每捕获一个数据包就调用callback指示的回调函数,所以可以在回调函数中对捕获到的数据包进行操作。intpcap_next_ex(pcap_tpstructpcap_pkthdrpkt_headerconstu_charpkt_data)此函数的功能是捕获一个网络数据包。voidpcap_close(pcap_tp)此函数的功能是关闭winpcap操作,并销毁相应资源。(4)文件相关函数:pcap_dumper_tpcap_dump_open(pcap_tpconstcharfname)此函数的功能是打开一个文件,并准备向其写入网络数据包数据。voidpcap_dump(u_charuserconststructpcap_pkthdrhconstu_charsp)此函数的功能是向文件中写入网络数据包内容。陕西理工学院毕业设计第9页共65页33系统设计方案及功能描述系统设计方案及功能描述3.13.1系统设计方案系统设计方案对于该软件的设计和执行过程,主要分为两个关键部分,所以按此要求分为中有两个核心的工作步骤,第一步是调用Winpcap函数库实现下层抓包,这部分是为了实现网络中的数据包获取,也是最基础的步骤。第二步是对所获取的数据包文进行分析和统计或是其他操作,筛选出我们所需要的信息。下面分别列出两个核心过程。捕获过程,通过winpcap的调用从网络中获取数据包信息,步骤如下:第一:初始化Winpcap开发库。第二:获得当前的网卡列表信息,从列表中选取其中所需要的指定网卡。第三:获得当前的过滤规则,决定其过滤细节,但也可为空。第四:调用库函数,pcap_loop(),并同时指定其回调函数,所指定的回调函数其实就是数据包分析过程。分析过程,将所获取的当前数据包信息转存后进行解析过程,步骤如下:第一:由上一步通过winpcap抓包,将抓包后得到的数据包后转存到内存里,满足以后的使用和操作。第二:调用相符协议类型的数据包分析类。在概要设计中,按模型层的要求,构造了多个用于分析不同类型数据包的分析类模型,每个模型对应一种数据包类型,调用是按要求调用符合该数据包类型的指定模块。每个模型中按对应的数据包类型构造分析算法,完成对本类型数据包的具体解析工作。第三:对数据包信息内容进行解析,过程如下:在数据包中,其前14个字节(Byte)表示为数据链路层的报文头,其报文格式是前6个字节(Byte)表示为目的MAC地址,随后的6个字节(Byte)表示为源Mac地址,最后的2个字节(Byte)代表上层协议类型,这些重要的数据信息,是我们分析上层协议的依据。根据所分析到的协议类型进行类似的迭代分析。这样就可以得到各层中的报文头信息和数据信息。第四:结束本次分析,等待下一次调用。总体设计流程图如图3.1所示启动程序选择网卡启动监听不停的通过pcap.loop抓包,通过调用各Packet类来解析报文的包增加相应的包类型计数(tcp或udp),将捕获到的包的分析结果插入list中。开始监听线程图3.1设计流程图3.23.2系统功能描述系统功能描述开发的这个系统最主要也是最核心的功能就是对于网络数据包的捕获以及对于捕获到陕西理工学院毕业设计第10页共65页的网络数据包显示和简单的分析。实质是主要实现一个网络实时监听的功能,然后将捕捉到的数据包保存下来以便进一步的分析使用。具体实现功能如下:(1)通过使用winpcap库函数进行数据包的捕获;(2)将捕获到的数据包进行分析并显示;(3)解析出数据包使用的协议、源地址、目的地址、包的大小和内容等;(4)在界面的列表中实时显示捕获到的数据包的情况,点击列表,可以展开此数据包的详细信息;(5)流量监控;(6)导出数据。陕西理工学院毕业设计第11页共65页44系统编码实现系统编码实现4.14.1网络数据包捕获模块的实现网络数据包捕获模块的实现以太网具有共享介质的特征,信息是以明文的形式在以太网络上传输的,当网卡被设置为混杂模式时,可以捕获任何一个在同一冲突域上传输的数据包。运用这一原理使网络数据包捕获系统能够拦截到我们所要的信息,这是捕获数据包的物理基础。网卡具有4种工作模式:广播模式,多播传送模式,直接模式,混杂模式。网卡的缺省工作模式包含广播模式和直接模式,即它只接收广播帧和发给自己的帧。如果采用混杂模式,网卡将接受同一网络内所有主机所发送的数据包,这样就可以到达对所有数据包进行捕获的目的。.1网络数据包捕获程序的编写过程网络数据包捕获程序的编写过程(1)获取本机已连接的网络适配器列表WinPcap提供了pcap_findalldevs_ex()函数来实现这个功能:这个函数返回pcap_if结构的链表,每个这样的结构都包含了一个适配器的详细信息。值得注意的是,数据域name和description表示一个适配器名称和一个可以让人们理解的描述。intpcap_findalldevs_ex(charsourcestructpcap_rmtauthauthpcap_if_talldevscharerrbuf)(2)打印网卡列表for(d=alldevsdd=d-next)printf(%d.%s+id-name)if(d-description)printf(%s)nd-description)elseprintf(Nodescriptionavailable)n)(3)选择网卡一般的情况下都会检测到至少两块网卡,所以我们要选择我们正在使用的网卡设备。scanf(%d&inum)输入要选择的网卡if(inumi)选端口输入错误printf(nInterfacenumberoutofrange.n)pcap_freealldevs(alldevs)释放设备列表return-1(4)跳转到选中的适配器for(d=alldevsi=0inexti+)打开设备if(adhandle=pcap_open(d-name设备名称抓包的设备6553665535保证能捕获到不同数据链路层上的每个数据包的全部内容1PCAP_OPENFLAG_PROMISCUOUS混杂模式,010000读取超时时间陕西理工学院毕业设计第12页共65页NULL远程机器验证errbuf错误缓冲池)=NULL)fprintf(stderrnUnabletoopentheadapter.%sisnotsupportedbyWinPcapnd-name)pcap_freealldevs(alldevs)释放设备列表return-1(5)打开捕获的数据存储的文件dumpfile=pcap_dump_open(adhandlefileway)打开文件(6)循环捕获并存储pcap_freealldevs(alldevs)循环捕获数据并调用packet_handler函数把数据存储到堆文件conststructpcap_pkthdrheaderconstu_charpkt_datapcap_loop(adhandle-1packet_handler(unsignedchar)dumpfile)利用adhandle描述符,pcap_close(adhandle)关闭抓包过程return0voidpacket_handler(u_chardumpfileconststructpcap_pkthdrheaderconstu_charpkt_data)pcap_dump(dumpfileheaderpkt_data)此函数功能将数据报存储到堆文件.2在程序中用到的在程序中用到的WinPcapWinPcap内核函数详细介绍内核函数详细介绍(1)pcap_if结构体structpcap_ifstructpcap_ifnextcharnamechardescriptionstructpcap_addraddressesbpf_u_int32flags结构体成员个变量意义:structpcap_ifnext:如果不为空,指向下一成员列表;为空则为最后一个成员列表。charname:指向一个字符串提供的名称装置传递给pcap_open_live()。chardescription:如果不为空,则指向一个可让人理解的描述字符串。u_intflags:PCAP_IF_LOOPBACK的接口标示。(2)pcap_findalldevs_ex()intpcap_findalldevs_ex(charsource,structpcap_rmtauthauth,pcap_if_talldevs,charerrbuf)charsource:用来查找适配器。陕西理工学院毕业设计第13页共65页structpcap_rmtauthauth:一个指针到pcap_rmtauth结果体。ThispointerkeepstheinationrequiredtoauthenticatetheRPCAPconnectiontotheremotehost.这指针保持必要的资料,验证RPCAP连接到远程主机。Thisparameterisnotmeaningfulincaseofaquerytothelocalhost:inthatcaseitcanbeNULL.这个参数在没有意义的情况下查询本地主机:在这种情况下,它可以是NULL。pcap_if_talldevs:返回一个pcap_if结构的链表。charerrbuf:一旦错误将返回错误信息。通常,编写基于WinPcap应用程序的第一件事情,就是获得已连接的网络适配器列表。libpcap和WinPcap都提供了pcap_findalldevs_ex()函数来实现这个功能:这个函数返回一个pcap_if结构的链表,每个这样的结构都包含了一个适配器的详细信息。值得注意的是,数据域name和description表示一个适配器名称和一个可以让人们理解的描述。当我们完成了设备列表的使用,我们要调用pcap_freealldevs()函数将其占用的内存资源释放。(3)adhandle=pcap_open()adhandle=pcap_open(d-name设备名称抓包的设备6553665535保证能捕获到不同数据链路层上的每个数据包的全部内容1PCAP_OPENFLAG_PROMISCUOUS混杂模式10000读取超时时间NULL远程机器验证errbuf错误缓冲池)(4)pcap_loop()intpcap_loop(pcap_tpintcntpcap_handlercallbacku_charuser)pcap_loop()非常像pcap_dispatch(),唯一不同的是它将保留所有读到的包直到cnt个包被处理或者发生错误。负数将使它永远循环。(5)pcap_dump(dumpfileheaderpkt_data)此函数功能将数据报存储到堆文件。.3网络数据包捕获的应用网络数据包捕获的应用数据包捕获是进行网络分析的基础,具体来说,只有对网络上所传输的数据包有了定量的分析,才可能完成诸如网络流量监测,网络故障分析,网络协议工作原理及过程分析,非法数据捕获与入侵检测,网络设备仿真等。网络数据包捕获的应用主要在以下几个方面:(1)流量统计:WinPcap的强大功能还在于它提供了流量分析与统计的功能,它能够将局域网上所运行数据包的大小及多少进行定量的统计,在统计模式下工作的WinPcap可以在不捕获整个数据包的前提条件下高效快速地获得该数据包的大小,因而我们可以利用WinPcap的这个特点统计出单位时间中网络上数据包数目及数据字节数。(2)协议及数据内容分析:在上文中通过对过滤规则的设置,WinPcap可以根据我们的设置对特定协议的网络数据包进行过滤,当然,我们还可以进一步在对所捕获的数据包进行分析的过程中选择某些特定的IP地址的数据包,这些都是可以实现的,而且在WinPcap中实现是比较简单的。专门捕获某一协议或某一主机的数据包,进而对数据进一步分析就可以了解该类协议的工作过程及协议内容,这对网络管理人员来说是非常重要且陕西理工学院毕业设计第14页共65页基本的事情。(3)IDS中的应用:随着分布式网络的发展,入侵检测是成为维护网络安全的必不可少的一环,人侵检测系统的基础离不开对网络数据包的解析,只有对网络上所运行的数据包有了深刻的认识和掌握,才能够发现和阻止攻击行为,以达到保护网络的目的。很显然,数据包捕获是人侵检测系统信息的重要来源之一。4.24.2网络数据包分析模块的实现网络数据包分析模块的实现网络数据包分析模块的设计思想是将WinPcap捕获到的数据对应网络数据包的格式进行初始化,取得具体的值,并输出到界面。数据分析模块主要实现数据的解析。从网络适配器中捕获数据的为原始数据,这些原始数据为二进制格式,必须转化为能比较好明白的格式,这就要求将这些原始数据能按照网络数据传输的具体格式来保存,主要为了能较好的读懂相关的信息,以便使用者分析。.1网络数据包分析模块主要建立的类网络数据包分析模块主要建立的类网络数据包分析模块实现时,本系统提取的数据包中主要的一些信息。为了实现这个功能,特此构造了几种数据包分析类,用于分析这几种常见常用的数据包,在提取获得的数据包信息后,按照不同的数据包类型,相应的调用构建好的数据包分析类,对所获取的该类型数据包进行分别处理。这几种类根据控制层控制,从抓包开始到结束,一直重复调用,分门别类的处理各自相应数据包,并通过主界面显示。如表4.1所示表4.1分析类表类名作用CFramePacket类构造函数CFramePacket:CFramePacket(constunsignedcharbufintbuflen)用于处理链路层数据,分析数据包的类型。CIPPacket类构造函数CIPPacket(constunsignedcharbufintbuflen),中实现通过调用已获取的IP包数据,分析IP包中的各项参数。CTCPPacket类构造函数CTCPPacket(unsignedcharbufintbuflen),实现通过调用已获取的TCP包数据,分析TCP包中的各项参数。CUDPPacket类构造函数CUDPPacket(unsignedcharbufintbuflen),实现通过调用已获取的UDP包数据,分析UDP包中的各项参数。CARPPacket类构造函数CARPPacket(constunsignedcharbufconstunsignedintbuflen),实现通过调用已获取的ARP包数据,分析ARP包中的各项参数。其中buf指向该数据包的数据内容,buflen代表其数据长度,由这两个变量构造算法变换进制,对数据包逐层解析出所含信息:版本号、头部长度、服务类型、优先级等等。.2IPIP协议分析类的设协议分析类的设计计IP协议的基本功能:寻址、路由选择和数据包的分割和组装,它不提供可靠的传输服务。依据IP报文格式在程序中声明IP报头以及进行类的设计,程序如下:classCIPPacketIP数据包类private:intm_nVersion版本intm_nHeaderLength头部长度intm_nServiceType服务类型typeofserviceintm_nPrecedence优先级boolm_bDelay延迟boolm_bThroughtPut吞吐量boolm_bReliability可靠性陕西理工学院毕业设计第15页共65页unsignedintm_uTotalLength总长totallengthintm_nIdentification标识boolm_bDF不要分段boolm_bMF还有进一步的分段intm_nFragOffSet分段偏移fragmentoffsetintm_nTTL生命期timetoliveintm_nProtocol协议如TCPUDPunsignedintm_nCheckSum头部校验和longm_lSrcIP源IP地址longm_lDestIP目的IP地址intm_nOptLength选项长度unsignedcharm_pOptions选项内容intm_nDataLength数据长度unsignedcharm_pData数据内容public:CIPPacket()CIPPacket(constunsignedcharbufintbuflen)virtualCIPPacket()public:CStringGetProtocol()CStringGetDestIP()CStringGetSrcIP()unsignedcharGetTData()intGetDataLength()CStringGetVersion()版本CStringGetHeaderLength()头部长度CStringGetServiceType()服务类型typeofserviceCStringGetPrecedence()优先级CStringGetDelay()延迟CStringGetThroughtPut()吞吐量CStringGetReliability()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课件橡胶卷教学课件
- 课件模板色彩搭配
- 传统民居绘画课件
- 中班课件和教案
- 商务人才核心能力培养
- 广东工程力学自考试题及答案
- 广东法律思想自考试题及答案
- 恐怖思维考试题及答案
- 课程实施考试题及答案
- 白酒微生物培菌工应急处置考核试卷及答案
- 新药研究与开发技术 课件2.新药的发现研究
- 中医调理男女生殖系统疾病的技巧
- 2025年湖北国土资源职业学院单招职业技能测试题库必考题
- 2024年设备监理师历年真题答案
- 杜绝“死亡游戏”(梦回大唐)主题班会教学设计上学期-高中主题班会
- 盾构施工安全管理
- 职场动物进化手册
- 脑脊液漏的健康宣教
- 青少年脊柱侧弯预防
- 2025年静脉输液考试题及答案2024
- 政府机关保安职责及安全政策
评论
0/150
提交评论