局域网监听软件的设计与实现_第1页
局域网监听软件的设计与实现_第2页
局域网监听软件的设计与实现_第3页
局域网监听软件的设计与实现_第4页
局域网监听软件的设计与实现_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEI毕业设计(论文)设计(论文)题目:局域网监听软件的设计与实现学院名称:电子与信息工程学院专业:计算机科学与技术班级:10计科(2)姓名:XXXX学号XXXXXXXX指导教师:XXXX职称教授定稿日期:2014年4月30日PAGEV局域网监听软件的设计与实现摘要 互联网给我们的社会和个人带来了太多的便利和益处。社会运作包括公共设施及其服务、政府运作和个人生活,已经越来越离不开电脑和互联网了。这使得互联网安全这一潜在威胁迅速、悄然但又爆炸式地产生了。公民个人的隐私、通讯和表达自由受到直接冲击。从邮件、电话到电子文档和其他资料,乃至行踪、消费记录等,我们似乎可以变成透明。最近沸沸扬扬的棱镜门和Heartbleed漏洞更是为世人敲响了网络安全的警钟。对局域网内数据监听系统的研究,对于维护网络的稳定性和解决网络安全问题有着重要的意义,它可以用来帮助诊断网络中的路由设备,其他的网络连接设备,查看网络上数据报的传送情况,利于网络管理员的管理与维护。本局域网监听软件主要采用WinPCap开发工具和C++语言在VisualStudio2008编译器下进行开发。软件实现了对局域网内的数据进行捕获以及过滤,并分析出每一协议层的传输数据的主要字段和内容。之后再将其显示,同时进行动态更新。经过长时间的使用,证明该软件运行可靠稳定,捕获数据准确,易于使用。关键词:互联网安全,局域网监听,WinPCap,多协议分析

DESIGNANDIMPLEMENTATIONOFLANMONITORINGSOFTWAREABSTRACTInternethasbroughtmuchconvenienceandbenefitstooureverydaylife.Socialfunctioning,includingpublicfacilitiesandservices,governmentoperationsandpersonallifehasbecomeincreasinglydependentoncomputersandtheInternet.ThismakesthepotentialthreattoInternetsecurityquickly,quietlybutexplosivelygenerated.Theprivacyofindividualcitizens,freedomofcommunicationandexpressiondirectimpact.Frome-mail,telephonetoelectronicdocumentsandotherinformation,aswellasthewhereaboutsofconsumerrecords,itseemsthatwecanbecometransparent.RecentuproartheUSsurveillanceprogramPRISMandHeartbleedloopholeisfortheworldsoundedthealarmfornetworksecurity.ResearchondatamonitoringsysteminLAN,playsanimportantroleinmaintainingthestabilityofthenetworkandsolvetheproblemofnetworksecurity,itcanbeusedtohelpdiagnoseroutingequipmentinthenetwork,theothernetworkconnectiondevice,checkthetransmissionofthedataonthenetwork,managementandmaintenancetothenetworkadministrator.ThisLANmonitoringsoftwaredevelopedwithWinPcap,usingtheC++languagecompilerunderVisualStudio2008.Thissoftwareismainlyrealizesinmonitoringthenetwork,dataanalyzesandanalyzethemainfielddataforeachprotocollayer.Afterthat,itshowswithcarriesonthedynamicrenewal.Afteralongperiodofuse,thesoftwareisreliableandstable,alsoabletoaccuratelycapturedataandeasytouse.KeyWords:internetsecurity,lanmonitoring,winpcap,multi-protocolanalysis

目录摘要 IABSTRACT II目录 IV第1章 绪论 61.1 研究目的和意义 61.2 局域网监听技术的发展 71.2.1局域网监听技术原理 71.2.2局域网监听的实现方法 7第2章 网络传输技术概述 92.1 网络传输模型 92.1.1TCP/IP模型 92.1.2OSI模型 112.1.3TCP/IP模型和OSI模型的关系 122.2 主要数据包结构 142.2.1以太网帧格式 142.2.2IP数据包格式 152.2.3TCP数据报 162.3 WinPCap简介 182.3.1WinPCap主要函数 182.3.2WinPCap过滤器表达式 20第3章 需求分析 223.1 用户需求 223.2 功能需求 223.3 性能需求 23第4章 系统设计 244.1 开发环境 244.2 系统结构 244.2.1结构描述 244.2.2系统架构 244.3 设计思路 254.4 基于WinPCap开发应用程序 254.5 程序流程 26第5章 系统实现 285.1 总体设计 285.2 模块设计 295.2.1网卡初始化 295.2.2数据包捕获 295.2.3数据包分析 335.2.4过滤器模块设计 35第6章 总结 38参考文献 39致谢 40作品(软件)使用说明书 41宁波工程学院本科毕业设计论文PAGE54绪论研究目的和意义随着计算机技术的发展,网络与我们的生活紧密相连,甚至已经成为生活中的一部分,然而越来越多的网络攻击正在一步步侵犯着我们的网络安全。黑客们很容易截获在局域网中传输的数据包,通过对数据包进行分析,就能得到数据包内的重要信息。通过这种方式,我们使用的密码,发送的邮件等私密信息无疑就暴露在别人面前,给个人隐私等信息带来很大的安全威胁!当然,我们也可以利用网络监听技术,获取黑客入侵的信息,甚至可以提前做好预防工作,这样对保护我们的信息安全无疑是一个获得了巨大的先机。因此,了解网络监听的实现原理就显得尤为重要[林莲芳.浅谈局域网监听的原理及其防范对策林莲芳.浅谈局域网监听的原理及其防范对策[J].科技广场,2011.3:82-84网络监听是信息安全领域内一项非常重要和使用的技术,他的起源是网络管理员为了诊断网络故障的需要,而监听网络中传输的数据信息。在网络管理和维护中,网络管理和维护人员常常利用网络监听技术监控网络当前的信息状况,网络流量,进行网络访问统计分析等等。除此之外,网络监听还可以发现网络中存在的安全隐患,及时采取相应措施,不让黑客有机可乘。但在现实生活中,网络监听技术往往能在黑客手中发挥更大的作用,它们利用网络监听技术窃取用户的私密资料。对于普通用户来说,被监听也许只是泄露个人隐私资料;而对于金融机构等资料敏感用户,恶意的网络监听更会带来难以弥补的金钱和信用损失。综上所述,对于局域网数据监听系统的研究,有利于维护计算机网络安全。对于网络管理者来说,局域网监听可以识别网络中的路由设备,查看局域网中传输的数据包,统计网络的流量,并可以侦测到非法的入侵,找出网络中潜在的问题等。同时,管理员还可以利用网络监听软件解决一些网络故障,比如网络延时,丢包等问题。如果不凭借监听软件,就无法准确的知道问题出在何处。在大型的网络中,它的存在对系统管理员是非常重要的,凭借从局域网监听软件获取的信息,系统管理员可以了解网络中出现的问题,给出相应的解决方法,这给网络环境的管理与维护提供了非常宝贵的信息。局域网监听技术的发展局域网监听技术原理局域网监听的基本原理是数据在局域网环境下进行传输时,包含物理地址的帧数据能送达到线路上的每一台主机。当数据到达一台主机的网卡时,在正常情况下,网卡读取数据帧,并进行检查,如果数据帧中所包含的物理地址和本机的物理地址或者广播地址相同,则将该数据帧交由IP层进行处理,否则就将该数据帧丢弃。当主机将该网卡置于混杂模式时,所有的数据帧都将交由IP层进行处理,并不会发生因物理地址不符而将该数据帧丢弃的情况。也就是说,在局域网环境下同一根线缆上传输的所有数据都会被该主机接收到,进而可以将所有接收到的数据进行分析,从而得出用户所需要的数据[周茜,谢智学.网络监听技术的原理与应用周茜,谢智学.网络监听技术的原理与应用[J].科技信息,2008(2):53JohnWiley.PreparingYourNetworktoSurviveSecurityAttacks/Cole[M].SonsInc,2003局域网监听的实现方法要在局域网中监听,就需要主机工作在监听模式下,需要向网络接口发出I/O控制命令,将其设置成监听模式。在Unix系统中,需要超级用户权限来发送命令。但在Windows系统中,就没这个限制。这种工作并不复杂,目前有太多的工具软件可以做到这一点,在很多黑客网站或者从事网络安全管理的网站都能找到。在Unix环境下,监听工具非常多,如Sniffit、Snoop、Dsniff等都是常见的,他们都免费发布源代码,可以进行研究。而在Windows环境下,常用的网络监听工具当然是著名的Snifferpro了,实际上很多人都是用它在Windows环境下抓包来分析[胡晓元,史浩山.WinPcap包截获系统的分析及其应用[J].计算机工程,2005,31(2):96-98.]。胡晓元,史浩山.WinPcap包截获系统的分析及其应用[J].计算机工程,2005,31(2):96-98.(1)Sniffit:Sniffit可以运行在Solaris、SGI和Linux等平台上,是由LawrenceBerkeleyLaboratory开发的一个免费的网络监听软件。举例说明:#Sniffit-a-p21-txxx.xxx.xxx.xxx监听流向机器xxx.xxx.xxx.xxx的21端口(FTP)的信息,并以ASCII显示[方文.网络监听利器一sniffit简介[J].上海微型计算机,2000-10-23.]。方文.网络监听利器一sniffit简介[J].上海微型计算机,2000-10-23.(2)Snifferpro:通过对用监听工具捕获的数据帧进行分析,可以很容易的发现敏感信息和重要信息。例如,在使用Snifferpro对局域网进行一段时间的监听后,分析所得的数据,就能直接看到一些在监听期间该网用户名和口令,都以明码显示,由此也可以看到局域网监听技术如果用于不正当的目的会有多大的危害[邱亮,孙亚刚著.网络安全工具及案例分析[M].北京:电子工业出版社,2004]。

邱亮,孙亚刚著.网络安全工具及案例分析[M].北京:电子工业出版社,2004

网络传输技术概述网络传输模型计算机网络采用两种传输模型进行传输:协议模型和参数模型。协议模型提供了与特定协议族结构精确匹配的模型。TCP/IP模型描述了TCP/IP协议族中每个协议层实现的功能,因此属于协议模型。参考模型为各类网络协议和分服务之间保持一致性提供了通用的参考,参考模型的主要用途是帮组人们更清晰地理解涉及的功能和过程。开放式系统互联(OSI)模型是一种参考模型。TCP/IP模型TCP/IP是TransmissionControlProtocol/InternetProtocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提a供的协议来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台电脑规定一个地址[W.RichardStevens.TCP/IP详解卷[M].北京:机械工业出版社,2000]。W.RichardStevens.TCP/IP详解卷[M].北京:机械工业出版社,2000(1)网络接口层物理层是定义物理介质的各种特性:1、机械特性;2、电子特性;3、功能特性;4、规程特性。数据链路层是负责接收IP数据包并通过网络发送,或者从网络上接收物理帧,抽出IP数据包,交给IP层。ARP是正向地址解析协议,通过已知的IP,寻找对应主机的MAC地址。RARP是反向地址解析协议,通过MAC地址确定IP地址。比如无盘工作站还有DHCP服务。常见的接口层协议有:Ethernet802.3、TokenRing802.5、X.25、Framerelay、HDLC、PPPATM等。(2)网络层负责相邻计算机之间的通信。其功能包括三方面。处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。处理输入数据报:首先检查其合法性,然后进行寻径--假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报。处理路径、流控、拥塞等问题。网络层包括:IP(InternetProtocol)协议、ICMP(InternetControlMessageProtocol)控制报文协议、ARP(AddressResolutionProtocol)地址转换协议、RARP(ReverseARP)反向地址转换协议。IP是网络层的核心,通过路由选择将下一条IP封装后交给接口层。IP数据报是无连接服务。ICMP是网络层的补充,可以回送报文。用来检测网络是否通畅。Ping命令就是发送ICMP的echo包,通过回送的echorelay进行网络测试。(3)传输层提供应用程序间的通信。其功能包括:一、格式化信息流;二、提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送,即耳熟能详的“三次握手”过程,从而提供可靠的数据传输。传输层协议主要是:传输控制协议TCP(TransmissionControlProtocol)和用户数据报协议UDP(UserDatagramprotocol)。(4)应用层向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等。远程登录TELNET使用TELNET协议提供在网络其它主机上注册的接口。TELNET会话提供了基于字符的虚拟终端。文件传输访问FTP使用FTP协议来提供网络内机器间的文件拷贝功能。应用层协议主要包括如下几个:FTP、TELNET、DNS、SMTP、NFS、HTTP。FTP(FileTransferProtocol)是文件传输协议,一般上传下载用FTP服务,数据端口是20H,控制端口是21H。Telnet服务是用户远程登录服务,使用23H端口,使用明码传送,保密性差、简单方便。DNS(DomainNameService)是域名解析服务,提供域名到IP地址之间的转换,使用端口53。SMTP(SimpleMailTransferProtocol)是简单邮件传输协议,用来控制信件的发送、中转,使用端口25。NFS(NetworkFileSystem)是网络文件系统,用于网络中不同主机间的文件共享。HTTP(HypertextTransferProtocol)是超文本传输协议,用于实现互联网中的WWW服务,使用端口80[百度百科.TCP/IP协议[EB/OL]./link?url=c610J_B3Rj7afxdB7TrAyHP6OB91_PtO-wgvI7hzj3_fTTnfweD0EzOzLv60O9Zo,2014-04-09]。百度百科.TCP/IP协议[EB/OL]./link?url=c610J_B3Rj7afxdB7TrAyHP6OB91_PtO-wgvI7hzj3_fTTnfweD0EzOzLv60O9Zo,2014-04-09OSI模型OSI是OpenSystemInterconnect的缩写,意为开放式系统互联。一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互联模型。该体系结构标准定义了网络互连的七层框架。主要如下:(1)应用层(ApplicationLayer)应用层是OSI参考模型的顶层,该层通过应用程序来完成用户的需求,是用户与网络的接口。主要完成文件传输、收发电子邮件等功能。(2)表示层(PresentationLayer)早期的表示层用来转化字符数据的编码等显示相关功能。现在由于应用层能完成一部分表示层功能,因此功能有所淡化。(3)会话层(SessionLayer)会话指的是用户与用户的连接。会话层负责在两台计算机之间建立,管理和终止通信,就如同两台计算机之间的对话。会话层因此而得名。(4)传输层(TransportLayer)传输层是整个OSI模型中最关键的一层,是模型中的中心层,充当心脏的作用。在它之下的层级实现通信,而它之上的层级则对通信进行管理。它负责数据传输和控制,提供端到端的数据控制。传输层独立于物理网络运行。另外它还负责数据重传任务。(5)网络层(NetworkLayer)网络层定义了通信的协议,它把逻辑地址转换成物理地址。同时,网络层还提供选择路由功能,路由器的功能就在这一层实现。它为传输层提供支持。(6)数据链路层(DataLinkLayer)数据链路层位于物理层与网络层之间。在数据链路层上传输的数据为帧。该层的目的是保证在节点之间传输数据帧的正确性。(7)物理层(PhysicalLayer)物理层是OSI参考模型的最底层。顾名思义,它为数据传输建立物理连接。完成通过物理线路在两个节点间传输比特流[百度百科.OSI参考模型[EB/OL]./link?url=rGe9VmBYQuwJ0l7F40IVEVbiJ_Jn_zJLujGHKGG0DFidL2n8mG_xEA32FQ_jMkcJ,2014-03-27]。百度百科.OSI参考模型[EB/OL]./link?url=rGe9VmBYQuwJ0l7F40IVEVbiJ_Jn_zJLujGHKGG0DFidL2n8mG_xEA32FQ_jMkcJ,2014-03-27TCP/IP模型和OSI模型的关系TCP/IP协议并不能够与OSI模型完全匹配,TCP/IP不是使用7层,而是使用4层,它通常也叫做Internet协议套件,它分为下面的4层:网络接口层互连网层传输层应用层这4层的每一层对应于OSI模型的一层或者多个层。表2-1TCP/IP协议簇和OSI对应层级比较OSI层级TCP/IP协议功能应用层TFTP,HTTP,SNMP,FTP等文件传输,电子邮件,文件服务等表示层无数据格式化,代码转换,数据加密会话层无解除或建立别的连接点联系传输层TCP,UDP提供端对端的接口网络层IP,ICMP,OSPF,ARP等为数据包选择路由数据链路层SLIP,PPP,MTU,RARP等传输有地址的帧以及错误检测功能物理层ISO2110,IEEE802等二进制形式在物理媒体上传输数据TCP/IP协议簇对应OSI的相应层级,如下图所示:图2-1TCP/IP协议簇对应OSI的相应层级

主要数据包结构以太网帧格式以太网帧是OSI参考模型数据链路层的封装。它是对网络层传输的数据包加上帧头帧尾进行封装,从而构成了可被数据链路层识别的数据帧。在以太网帧当中,帧头和帧尾的数据大小是固定不变的,但是因为被封装的数据包大小是可变的,所以以太网帧的大小是可变不固定的。大小范围在64-1518字节之间。以太网V2的MAC帧格式。该标准由5个字段组成:目的地址、源地址、类型、数据报、效验。前导码:包括同步码(用来使局域网中的所有节点同步,7字节长)和帧标志(帧的起始标志,1字节)两部分;目的地址:接收端的MAC地址,6字节长;源地址:发送端的MAC地址,6字节长;类型:数据包的类型(即上层协议的类型),2字节长;数据:被封装的数据包,46-1500字节长:校验码:错误检验,4字节长。分析每一帧可以得到此数据包的源MAC地址和目的MAC地址,并且可以得到IP数据报的完整内容(如果是ARP协议则没有IP数据包)。IP数据报的第4至7位是IP首部长度,该字段可以用来准确定位上层协议的起始位置。第10字节是协议字段,指出该IP数据报携带的数据使用何种协议。以太网头数据结构描述如下:typedefstructethernet_header{ u_chardstmac[6];//目标mac地址 u_charsrcmac[6];//源mac地址 u_shorteth_type;//以太网类型}ethernet_header;[D.S.Malik著,晏海华,蔡旭辉译.C++编程—数据结构与程序设计方法[M].北京:电子工业出版社,2003]D.S.Malik著,晏海华,蔡旭辉译.C++编程—数据结构与程序设计方法[M].北京:电子工业出版社,2003IP数据包格式图2-2IP数据报首部的组成表2-2IP数据包总体结构数据包IP首部信息首部(如TCP、UDP首部)数据以太网V2标准的主要特点是通过类型域标识了封装在帧里的数据包所采用的协议,类型域是一个有效的指针,通过它,数据链路层就可以承载多个上层(网络层)协议。但是,它的缺点是没有标识帧长度的字段。根据前面的定义,数据包一般都从数据链路层获取,因此,本软件按照获取数据格式的先后,先处理链路层之上的数据帧,之后分别是网络层,传输层以及应用层上的数据。在对数据链路层上的太网帧进行分析之后,我们就可以得到IP数据包。IP数据包数据结构描述如下:typedefstructip_header{ u_charihl:4;/*首部长度(4bits)*/ u_charver:4;/*版本(4bits)*/ u_chartos;/*服务类型*/ u_shorttlen;/*总长度*/ u_shortidentification;/*标识*/ u_shortfo:13;/*片偏移(13bits)*/ u_shortflags:3;/*标志(3bits)*/ u_charttl;/*生存时间*/ u_charproto;/*协议*/ u_shortcrc;/*首部检验和*/ ip_addresssaddr;/*源地址*/ ip_addressdaddr;/*目标地址*/ u_intop_pad;/*可选+填充*/}ip_header;TCP数据报图2-3TCP数据报的组成源端口和目的端口字段——各占2字节。端口是传输层与应用层的服务接口。传输层的复用和分用功能都要通过端口才能实现。序号字段——占4字节。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。确认号字段——占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。数据偏移——占4bit,它指出TCP报文段的数据起始处距离CP报文段的起始处有多远。“数据偏移”的单位不是字节而是32bit字(4字节为计算单位)。保留字段——占6bit,保留为今后使用,但目前应置为0。紧急比特URG——当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。确认比特ACK——只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。复位比特RST(Reset)——当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。同步比特SYN——同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。终止比特FIN——用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。窗口字段——占2字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。检验和——占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。紧急指针字段——占16bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。选项字段——长度可变。TCP首部可以有多达40字节的可选信息,用于把附加信息传递给终点,或用来对齐其它选项。填充字段——这是为了使整个首部长度是4字节的整数倍。TCP数据报的数据结构描述如下:typedefstructtcp_header//20bytes:default{ u_shortsport;//源端口 u_shortdport;//目标端口 u_longseqno;//Sequenceno u_longackno;//Ackno u_charreserved_1:4;//保留6位中的4位首部长度 u_charoffset:4;//tcp头部长度 u_charflag:6;//6位标志 u_charreserved_2:2;//保留6位中的2位 u_shortwin; u_shortchecksum; u_shortuptr;}tcp_header;WinPCap简介WinPCap是在Windows环境下的链路层网络访问的行业标准工具。它允许应用程序绕过协议栈进行数据捕获和发送,并且还有其他的功能,其中包括内核级别的包过滤,网络流量统计以及远程数据包捕获等功能。WinPCap扩展了操作系统所提供的低级别的网络访问功能,它也提供了一个库用于更方便的访问网络层级中的底层。该库也包含了UNIX下的众所周知的libpcapAPI的Windows版本[TheWinPcapTeam.WinPcap中文技术文档[EB/OL]./WinPcap/html/index.html,2007-05-25][全天形,程伟TheWinPcapTeam.WinPcap中文技术文档[EB/OL]./WinPcap/html/index.html,2007-05-25全天形,程伟.TCPDUMP-网络分析的利器[J].计算机应用研究,2000(11):54-55.WinPCap主要提供以下功能:(1)捕获原始数据包,无论它是发往某台机器的,还是在其他设备(共享媒介)上进行交换的,在数据包发送给某应用程序前,根据用户指定的规则过滤数据包,将原始数据包通过网络发送出去。(2)设置filter,只捕获自己敢兴趣的数据包。(3)方便的把捕获的数据包输出到文件和从文件输入。(4)统计网络流量。WinPCap主要函数1.pcap_if_t结构体,表示适配器列表中的一项。structpcap_if{structpcap_if*next;char*name;/*nametohandto"pcap_open_live()"*/char*description;/*textualdescriptionofinterface,orNULL*/structpcap_addr*addresses;bpf_u_int32flags;/*PCAP_IF_interfaceflags*/2.pcap_findalldevs_ex()获取适配器列表,返回0表示正常,-1表示出错。intpcap_findalldevs_ex(char*source,structpcap_rmtauth*auth,pcap_if_t**alldevs,char*errbuf);3.pcap_freealldevs()释放适配器链表空间。voidpcap_freealldevs(pcap_if_t*);4.pcap_open()通过名字打开适配器。pcap_t*pcap_open(constchar*source,intsnaplen,intflags,intread_timeout,structpcap_rmtauth*auth,char*errbuf);5.pcap_compile()编译数据包过滤器,将程序中高级的过滤表达式,转换成能被内核级的过滤引擎所处理的东西。对于bpf_program结构体我们只需要知道它是pcap_compile()最终要得到用来过滤的东西。[谢小特,王勇军.基于WinPcap的捕包程序设计[J].软件导刊.2007,(21)]谢小特,王勇军.基于WinPcap的捕包程序设计[J].软件导刊.2007,(21)intpcap_compile(pcap_t*,structbpf_program*,constchar*,int,bpf_u_int32);6.pcap_setfilter()在捕获过程中绑定一个过滤器。至于pcap结构体,它是一个已打开的捕捉实例的描述符。这个结构体对用户来说是不透明的,它通过wpcap.dll提供的函数,维护了它的内容。intpcap_setfilter(pcap_t*,structbpf_program*);7.pcap_next_ex()直接获得一个数据包,非回调方法;pcap_pkthdr结构体表示dump文件中数据包首。intpcap_next_ex(pcap_t*p,structpcap_pkthdr**pkt_header,constu_char**pkt_data)8.pcap_dump_open()打开一个文件来写入数据包;而pcap_dumper结构体表示libpcap存储文件的描述符pcap_dumper_t*pcap_dump_open(pcap_t*,constchar*);typedefstructpcap_dumperpcap_dumper_t;WinPCap过滤器表达式WinPCap过滤器语法基于一个声明式的谓词语法。过滤器则是一个包含了过滤表达式的ASCII字符串。Pcap_compile()获取这个表达式并将其翻译为一个内核级包过滤器的程序。这个过滤表达式用于选择需要dump的数据包。如果没有给定的过滤表达式,内核级过滤引擎将会接收所有的数据包。否则,只有带入表达式之后其值为true的包才会被接收。主要规则如下:

(1)表达式支持逻辑操作符,可以使用关键字and、or、not对子表达式进行组合,同时支持使用小括号。

(2)基于协议的过滤要使用协议限定符,协议限定符可以为ip、arp、rarp、tcp、udp等。

(3)基于MAC地址的过滤要使用限定符ether(代表以太网地址)、当该MAC地址仅作为源地址时表达式为ethersrcmac_addr,仅作为目的地址时,表达式为etherdstmac_addr,既作为源地址又作为目的地址时的表达式为etherhostmac_addr。此外应注意mac_addr应该遵从00:E0:4C:E0:38:88的格式,否则编译过滤器时会出错。

(4)基于IP地址的过滤应该使用限定符host(代表主机地址)。当该IP地址仅作为源地址时过滤表达式应为srchostip_addr,仅作为目的地址时的表达式为dsthostip_addr,既作为源地址又作为目的地址时表达式为hostip_addr。

(5)基于端口的过滤应使用限定符port。例如仅接收80端口的数据包则表达式为port80[TheTcpdumpTeam.Tcpdump用户手册[EB/OL].,2013-12-03]。TheTcpdumpTeam.Tcpdump用户手册[EB/OL].,2013-12-03下边给出两个例子:例1:只捕获arp或icmp数据包。过滤表达式:arpor(ipandicmp)。例2:捕获主机3与8之间传递的所有UDP数据包。过滤表达式:(ipandudp)and(host3orhost8)。

需求分析用户需求网络攻击严重威胁到了用户的上网安全。从攻击者的角度而言,攻击者可以利用网络抓包技术非法获取网络中传输的大量敏感信息。如用户的隐私,密码等。对网络安全极具威胁性。从防护的角度而言,网络抓包技术从网络传输的最底层,把握整个传输数据的来龙去脉,这无疑给发现非法攻击者提供了诸多有价值的信息。并可以根据这些信息提早最好防护措施,从而避免产生灾难性的后果。我们通过对该软件对数据进行分析利用,维护网络的安全稳定,因此提出了以下需求:(1)能够捕获网络数据包,并能对所捕获的数据包进行分析。(2)能定制一定的过滤规则,过滤掉一部分不需要的数据,从而降低分析复杂度。(3)界面友好,操作简单。(4)程序健壮,不易崩溃。功能需求目前局域网监听抓包技术趋于多样化,本文实现的方式是将网卡设备置于混杂模式,这样网卡可以直接接受数据链路层的数据。为了实现用户所提出的各种需求,抓包工具必需达到以下功能:(1)运行于数据链路层,监视网络状态,对数据帧进行捕捉和统计,为优化网络性能、增强系统安全性提供充分有效的依据。此时的工作网卡处于混杂模式。(2)能够对网络中捕捉的数据包解码,用于故障分析。如数据包的编号、时间戳、数据包长度、协议类型、源IP地址、目的IP地址、源端口号、目的端口号源、MAC地址、目的MAC地址等相关信息。(3)友好的图形化界面,不需要复杂的命令,大部分功能通过鼠标点击就可达到,操作简单、方便。(4)用户能够自定义过滤规则,使数据包的捕获更加精准和具有灵活性,增强了软件功能以及与用户的交互能力。(5)程序带有流量统计和包流量统计功能,使得能够实时观测网络情况。性能需求为了保证良好的用户体验,程序界面的相应时间必须控制在一个低的范围内。程序执行效率必须要高,速度必须要快。由于该程序必须要做到在捕获数据的同时能与用户进行交互,因此需采用多线程程序设计。保证在捕获数据的同时不会造成界面假死,给用户造成程序卡死的错觉。除此之外,还提出以下要求:(1)数据精确性。捕获到的数据包并不仅仅是单纯的数据信息,而是包含有IP头、TCP头等信息头的最原始的数据信息,这些信息保留了它在网络传输时的原貌,为分析网络信息提供了重要资料。(2)适应范围。一般情况下,大多数的抓包工具至少能够分析下面的协议:标准以太网、TCP、UDP、ICMP、ARP、IGMP等。

系统设计开发环境本系统基于windows7操作系统,采用MicroSoftVisualStuido2008编译环境,并使用微软的基础类库MFC和WinPCap库进行开发。同时采用多线程程序设计,防止程序进行网络包捕获时造成界面假死。标准开发环境:(1)标准PC一台;(2)CPU:P41.8GHZ及其以上;(3)内存:256MB及其以上;(4)操作系统:WindowsXP/Vista/7/8;(5)处于局域网环境;(6)动态链接库和驱动程序:WinPCap4_1_2.exe;(7)集成开发环境:MicrosoftVisualStudio2008。系统结构结构描述本监听软件需要实现网卡初始化,数据包捕获,数据包分析,数据包过滤等基本功能。因此,按照所需功能,划分出4个相应功能模块。系统架构本系统主要分4个模块进行实现,分别是网卡初始化模块,过滤器模块,数据包捕获模块以及数据包分析模块,组成结构如下所示:图4-1系统架构图设计思路根据前面的网络抓包技术的原理以及利用WinPCap设计程序的一般步骤,本次设计抓包工具的思路如下:首先获取网络设备,在程序中显示设备名称;通过在过滤器对话栏的中输入过滤字符串来确定过滤器,默认情况不进行过滤;然后打开设备,并设置网卡处于混杂模式,启动捕获线程,不断地接收数据包和分析数据包;监听的结果显示于ListCtrl控件中,包括以下各项,编号,接收时间、数据包长度、源地址、目的地址、协议类型等;通过点击ListCtrl中捕获的包可以绘制出包的分析树以及显示出包得二进制文本数据;通过按钮来控制监听线程的开始和结束。基于WinPCap开发应用程序在Windows平台下使用WinPCap,很容易开发出基于原始数据包的各种网络应用软件。使用WinPCap时,可以调用包含在Pactet.dll中的低级函数,也可以调用由Wpcap.dll提供的高级函数。一般情况下,我们都用wpcap.dll提供的函数,因为它的功能更强,使用也更方便,且很容易移植到Unix系统下。图4-2是一个标准的基于WinPCap的应用程序流程。图4-2基于WinPCap应用的基础流程本程序使用WinPCap提供的API来实现,通过将网卡设置为混杂模式,从数据链路层获取经过网卡的数据包,在局域网环境中捕获整个网段的数据。程序流程根据上一节的程序设计思路,我们可以得出相应的程序流程图。通过程序的顺序,循环以及选择这3种控制流程,可以提高程序质量和编程效率,使程序具有良好的可读性、可靠性、可维护性以及良好的结构,有利于后面程序的编写。整个项目的运行流程如下图所示:图4-3程序流程图

系统实现本程序捕获数据的关键在于监听网络数据流,利用WinPCap库抓取网络数据包,并分析成能被用户所理解的信息。本章节主要讨论程序核心功能的实现,即如何利用WinPCap库捕获网络数据包,并将其分析成用户所需要的数据的过程。总体设计利用pcap_findalldevs_ex()函数,载入主机的网卡列表,得到网卡的基本信息,如网卡名等。在网卡列表中选择一个正常运行的网卡。设置过滤器,过滤器是通过pcap_compile()相pcap_setfilter()函数来实现的。按下开始监听按钮之后,开启一个捕获线程。该线程使用函数pcap_open()来打开一个网卡。打开一个网卡之后,判断是否需要设置一个过滤器。之后再使用pcap_next_ex()函数来获得缓冲区内的下一个数据包它包含一个网络适配器的描述符和两个可以初始化和返回给用户的指针(一个指向pcap_pkthdr结构体,另一个指向数据报数据的缓冲)。将捕获到的数据包写入到一个临时dump文件中,使用pcap_dump()函数实现。点击数据包列表里的数据包之后,会开启一个分析数据包线程。该线程通过定位数据包在列表里的编号,并利用该编号从临时dump中通过pcap_next_ex()函数获取该数据包的详细信息,并将其分析成数据树,是用户能直观的看到该数据包的内容组成部分。通过pcap_freealldevs()函数来释放所有网卡句柄。

模块设计网卡初始化网卡初始化过程定义在窗口OnInitDialog();方法中,随着窗口的初始化方法的执行,把所有网卡设备都写入窗口的下拉列表中,完成初始化,以供用户选择其中的网卡。实现如下:alldevs=myPcap.GetAllAdapter(); for(d=alldevs;d;d=d->next) { //往combobox插入网卡名 m_devComboBox.InsertString(m_devComboBox.GetCount(),CString(d->description)); } pcap_freealldevs(d);//释放所有网卡设备数据包捕获根据系统总体设计,利用WinPCap的数据捕获技术对数据链路层上的数据帧进行捕获。为了在Windows平台实现网络数据包的捕获功能,首先要把网卡设置成混杂模式,从而可以获取到整个局域网内传输的数据。利用WinPCap的相应函数,可以把网卡置于混杂模式,直接从数据链路层获取数据帧。具体实现如下:voidCSnifferDlg::OnBnClickedButton1()//开始监听按钮事件{ //TODO:Addyourcontrolnotificationhandlercodehere GetModuleFileName(0,FilePath,255); CapFilePath=FilePath; CapFilePath=CapFilePath.Left(CapFilePath.ReverseFind('\\')); CapFilePath+="\\tmpData.CAP";//文档存储设置 intdevnum=m_devComboBox.GetCurSel(); if(CB_ERR==devnum) { AfxMessageBox(_T("清先选择网络设备")); return; } //开始一个监听线程 hCapThread=AfxBeginThread(CapThread,(LPVOID)d); }UINTCapThread(LPVOIDlpParameter)//监听线程,参数为网卡句柄{ if((adhandle=pcap_open(devnow->name,//设备名 65536,//65536保证能捕获到不同数据链路层上的每个数据包的全部内容 PCAP_OPENFLAG_PROMISCUOUS,//混杂模式 1000,//读取超时时间 NULL,//远程机器验证 errbuf//错误缓冲池 ))==NULL) { errstring.Format(_T("Unabletoopentheadapter.%sisnotsupportedbyWinPcap"),CString(devnow->name)); AfxMessageBox(errstring); pcap_freealldevs(devnow); return-1; } if(devnow->addresses!=NULL) /*获取接口第一个地址的掩码*/ netmask=((structsockaddr_in*)(devnow->addresses->netmask))->sin_addr.S_un.S_addr; else /*如果这个接口没有地址,那么我们假设这个接口在C类网络中*/ netmask=0xffffff; if(pcap_compile(adhandle,&fcode,CStringA(filterstr.GetBuffer()),1,netmask)<0) { errstring=CString("Unabletocompilethepacketfilter.Checkthesyntax."); AfxMessageBox(errstring); /*释放设备列表*/ pcap_freealldevs(devnow); return-1; } if(pcap_setfilter(adhandle,&fcode)<0) { errstring=CString("Unabletosetthefilter.Pleaseensuretheexpressioniscorrect"); AfxMessageBox(errstring); pcap_freealldevs(devnow); return-1; } pcap_dumper_t*dumpfile; dumpfile=pcap_dump_open(adhandle,CStringA(CapFilePath.GetBuffer())); if(NULL==dumpfile) { AfxMessageBox(_T("Can'topenthedumpfile!")); return-1; } while((res=pcap_next_ex(adhandle,&header,&pkt_data))>=0) { if(res==0) continue; ++num; time_tlocal_tv_sec; structtm*ltime; chartimestr[16]; //时间戳转换 local_tv_sec=header->ts.tv_sec; ltime=localtime(&local_tv_sec); strftime(timestr,sizeoftimestr,"%H:%M:%S",ltime); chartemp[50]; _itoa(num,temp,10); /*处理以太网首部*/ ethernet_header*ethheader=(ethernet_header*)pkt_data; charprotocaltype[10]; CSnifferDlg::GetEthernetType(ethheader,protocaltype); TCHARsrcAddr[18]; TCHARdesAddr[18]; /*处理IPv4协议的类型*/ if(CString(protocaltype)==CString("IPv4")) { /*处理IP首部*/ ip_header*ipheader=(ip_header*)(pkt_data+14); swprintf_s(srcAddr,16,_T("%d.%d.%d.%d"),ipheader->saddr.byte1,ipheader->saddr.byte2,ipheader->saddr.byte3,ipheader->saddr.byte4); swprintf_s(desAddr,16,_T("%d.%d.%d.%d"),ipheader->daddr.byte1,ipheader->daddr.byte2,ipheader->daddr.byte3,ipheader->daddr.byte4); CSnifferDlg::GetIPv4Type(ipheader,protocaltype); } CMyPcap::SavePacket(header,pkt_data,dumpfile); } if(res==-1){ CStringerrstr; errstr.Format(_T("Errorreadingthepackets:%s\n"),CString(pcap_geterr(adhandle))); AfxMessageBox(errstr); return-1; } return0;}[赵辉,叶子青.VisualC++系统开发实例精粹[M]·北京:人民邮电出版社,2005]赵辉,叶子青.VisualC++系统开发实例精粹[M]·北京:人民邮电出版社,2005数据包分析利用WinPCap函数捕获到的数据包,除了包含用户数据外,还包含了时间戳,IP,TCP等报头信息,在捕获数据包之后,要对该数据包调用分析函数进行数据包分析。数据包分析的主要依据是网络协议中定义的各种包的类型和包的格式。本程序主要分析几种在局域网中常见的几种协议(IP,TCP,UDP等)。根据前面的设计思路,从数据链路层开始捕获数据包并分析。本系统只对几种协议进行了解码,先是分析链路层,然后分析网络层,再分析传输层,最后分析应用层。这是因为捕获到的网络数据包是一个数据帧,其中最外层的协议是链路层协议,然后分别是网络层,传输层和应用层。对于链路层本程序只分析了以太网协议,去掉以太网协议部分,就是IP协议头;再分析IP头,去掉IP头部分,剩下的是TCP或UDP协议头,再分析TCP或UDP传输层协议头,去掉传输层协议头,剩下的是应用层协议,最后分析应用层协议(应用层协议的分析未完全完成)。分析流程图如下所示:图5.1协议分析流程图具体实现如下:UINTReadTempDumpThread(LPVOIDlpParameter)//从临时文件中读取选择的数据进行分析{ CSnifferDlg*mDlg=((CSnifferDlg*)(AfxGetApp()->GetMainWnd())); if(NULL==(adhandle=pcap_open_offline(CStringA(CapFilePath.GetBuffer()),errbuff))) { CStringerrstr; errstr.Format(_T("Opendumpfileerror,errorcode:s%"),errbuff); AfxMessageBox(errstr); return-1; } for(inti=0;i<=packetFind;i++) { pcap_next_ex(adhandle,&header,&pkt_data); } data=CSnifferDlg::PackToEdit(header,pkt_data); /*处理以太网首部*/ ethernet_header*ethheader=(ethernet_header*)pkt_data; chartype[10];//以太网包类型 CSnifferDlg::GetEthernetType(ethheader,type); //获取MAC地址 //Frame sprintf_s(Frame,1024,"Frame%d:%ubytesonwire(%ubits)",(packetFind+1),header->len,(header->len)*8); HTREEITEMHFrame=mDlg->m_InfoTree.InsertItem(CString(Frame)); if((CString)type==CString("IPv4")) { ip_header*ipheader=(ip_header*)(pkt_data+14); u_shortipLen=ipheader->ihl*4; CSnifferDlg::ShowIPInfo(pkt_data,mDlg); CSnifferDlg::GetIPv4Type(ipheader,type); } if((CString)type==CString("ARP")) { arp_header*arpheader=(arp_header*)(pkt_data+14); CSnifferDlg::ShowArpInfo(arpheader,mDlg); } return0;}过滤器模块设计WinPcap拥有过滤数据包的引擎,它提供成熟的过滤方法去获取网络流量的某些数据包。本程序使用WinPcap库进行开发,继承了WinPcap库最强大的封包过滤功能。程序预设几种不同的过滤语法,对捕获的数据进行过滤。具体实现如下:voidCFilterDlg::OnLbnSelchangeList1(){ //TODO:Addyourcontrolnotificationhandlercodehere CStringstr[][2]={{_T("仅限TCP"),_T("tcp")},{_T("仅限UDP"),_T("udp")},{_T("仅限IP"),_T("ip")}, {_T("目标端口为"),_T("dstport80")}, {_T("过滤ARP"),_T("notarp")},

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论