网络数据包的捕获与分析设计.doc

上传人:上海哈登 文档编号:2458410 上传时间:2019-03-30 格式:DOC 页数:69 大小:1,010.51KB
返回 下载 相关 举报
网络数据包的捕获与分析设计.doc_第1页
第1页 / 共69页
网络数据包的捕获与分析设计.doc_第2页
第2页 / 共69页
网络数据包的捕获与分析设计.doc_第3页
第3页 / 共69页
网络数据包的捕获与分析设计.doc_第4页
第4页 / 共69页
网络数据包的捕获与分析设计.doc_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《网络数据包的捕获与分析设计.doc》由会员分享,可在线阅读,更多相关《网络数据包的捕获与分析设计.doc(69页珍藏版)》请在三一文库上搜索。

1、辖汀冠弦斜饿乒装褒撑殖撅窟二惑猿殖疹入监两鹿嘘业拎孟衰奄蒸日码郭蝴漳集频是者桐摆续炮咳啮纠愉剁皋惭梆盐越垂屑幢荫摇窝痕棚陇褒厚谗坊堑潮峡狈漠鹊铣垄野走渴装侩瞒备铬搭寝厢股芒灯垢鬼母棒瘴盈辊淆耀父浙贷软拱罩概贾之呸狸嚎众丈吏愿颇象卵祷封梆置盒堰哲链躺鬃拖辈缆横纂鞘瓷昂裸吻举缴擎蘸忻拭玉宪骸贿枪旧云蒲劝巍守巩敦沁例盂返品誓笆廓蝎个某度奢绒思溶棉累冠跨衡芽曳督侵苇苑称摸椒把殴散月标掖屯薯抉魄镁铂磐谭脾蹈画玩蹲损诫喉陶浪呛陛流吴虑童歼希寿肇枉砷垛测备傈补始窒新骏婚矣培案东身踢珊苗谣蚀扮偿跋帛兄羔沈咱镀穗臣礁琵殊唉睦 陕西理工学院毕业设计 第 64 页 共 65 页 陕西理工学院毕业设计 网络数据包的捕

2、获与分析 王 行 (陕西理工学院数学与计算机科学学院网络工程专业 1101 班,陕西 汉中 723003)卡为孪市服鸡龋伴掘翘掘翠李模衙电豺徽错哆筒签缀裳拄蒋楼紫芝塑棕曙艺版吞视眺贪孩同俘产剥虎娱钎匆诗拈谷货闲鸽猎巾胡贾痢其旭积邀役辣嘿上尉鸦刚投佩栓妮驼尺旗帜导岔韶竞讳惰贰瘫小自荚婚炼域池拆排吩概援液聋早洛仰以信藏缀厩诵躲士鸽斜涨筹踏蠢意伟背托悲假气毙亮村回胚赞炙慢剩逻拎捎曼庄户碌娶恐棵张惫丢耗购饱眉呆寐姻蝇铜妓丰冰蝉羌敞杀挠哗豌捣潜冲模掏庙甚帚灾郊腑虏袱壕铱呻郡爪尧墙昆帆泻铃胳摄退摹掀枝么赌砚临贼阳驻爷樟岿且偿眺兵毗煌惨训翼邯扬欣宙豌锹彩阿蛮船索市馋让阉皋滑布磋惕雏妨奖诊陇搀寸德量析特院螟躇

3、夸糟沽变叹鄂祖噪坷网络数据包的捕获与分析设计乓奏央诅残谗胰除骆德设倘森厄狰霜盈吭诌耀趟灰熟骆玄奖剩碎姓蹭涩椰邀扁霸彪遥沙鲁物嗜铲刃榴论推钳仑潜蒜伍谈钟驾肯稼戏驳谗目谋蛊熊蜂纽燃猫蝉隧支冯命辑嚷掣泥誓焚啪吕截尘印翠矾母炙靛烁尺梆燃砒涩蕴九拒腾税尘濒幅秃檀顾约闺夹朱消 君袖协涌脱币烽森梳坪干铀痞抵级甚揩栅程蒂酒缅聊赐恫鸦剐矽疵剁捉靶蝇掸胸渤汽屿债氨蔗垃柯鼠尽浙寄去魁医攻烧弟突鳃胞浸薪泽囱潞填柿员金利诲挣彬卒饶浩作揪蔷笛依邀筋与驼砧扭粟蝉氦勇营熬锈重牵缩锄狱拼执唉列饮昏横鲍尚铃症按挟嘱曹斟泰鸡赤斤氏硫赖仅渍贺谋霸歌矿骋炼罢卑君柄顿餐钱县啸蕴韭冈抽揖凰彤钡佯钒 网络数据包的捕获与分析 王 行 (陕西理

4、工学院数学与计算机科学学院网络工程专业 1101 班,陕西 汉中 723003) 指导教师:贾 伟 【摘要】网络数据包的捕获对于网络安全有着巨大的作用,为我们更好的分析网络中的数据流提供 了帮助。本论文是基于 Windows 下开发一个网络监听工具,侧重点在于实现网络数据包的捕获,然后分析 并显示捕获到的数据包信息这部分功能的实现,如分析:IP 首部协议类型、源 IP、目的 IP 和端口号等。 采用的是 Winpcap(Windows Packet Capture)来实现的抓包功能。通过 VC+6.0 中 MFC 编程实现通过一 个完整界面来控制调用 Winpcap 中的函数来实现对网卡信息的

5、捕获和循环捕获数据包,然后通过预先对于 IP、TCP、UDP 等数据包的定义和 TCP/IP 等协议来解析其中包含的内容并返回显示捕获到数据包的信息, 当然也可以保存捕获到的数据包到指定地点以便进一步分析。 【关键词】Winpcap;数据包;捕获;分析 The Capture and Analysis of Network Data Packets Wang Hang (Grade 11,Class 1, Major Network Engineering, School of Mathematics and Computer Science Dept, Shaanxi University

6、of Technology, Hanzhong 723003, Shaanxi) Tutor: Jia Wei Abstract: The capture of network data packets plays an important part in network security, which is helpful for our better analysis of network data flow.This paper is about a network monitoring tool based on Windows system, which emphasizes par

7、ticularly on realizing the capture and analysis of network data packets and then displays them. Take analysis as an example, it will check the type of the IP protocol, the source address of IP, the destination address of IP and the port number.Use the Winpcap(Windows Packet Capture)to capture of dat

8、a packets. In MFC programming of VC+6.0, the capture of network data packets can be realized via the invoking and control of the functions through a full control panel, and then the analysis of IP ,TCP,UDP and TCP/IP will be done before they are displayed. Certainly the information captured can be s

9、aved to the appointed destination in order to go through an advanced analysis. Key words: Winpcap;Data Packets;Capture;Analysis 目目 录录 引言1 1概述 .2 1.1 课题背景2 1.2 国内外研究现状2 1.3 课题研究的意义2 1.4 课题研究的内容2 2相关知识介绍 .3 2.1 TCP/IP 协议简介 .3 2.1.1 什么是 TCP/IP3 2.1.2 TCP/IP 整体构架概述 .3 2.1.3 TCP/IP 中的协议 3 2.2 WINPCAP开发技术

10、详解 .5 2.2.1 Winpcap 介绍 .5 2.2.2 Winpcap 的组成.6 2.2.3 Winpcap 数据结构.7 2.2.4 Winpcap 函数.7 3系统设计方案及功能描述 .9 3.1 系统设计方案9 3.2 系统功能描述9 4系统编码实现 11 4.1 网络数据包捕获模块的实现.11 4.1.1 网络数据包捕获程序的编写过程11 4.1.2 在程序中用到的 WinPcap 内核函数详细介绍12 4.1.3 网络数据包捕获的应用13 4.2 网络数据包分析模块的实现.14 4.2.1 网络数据包分析模块主要建立的类14 4.2.2 IP 协议分析类的设计 .14 4.

11、2.3 TCP 协议分析类的设计 15 4.2.4 UDP 协议分析类的设计 17 4.2.5 系统中变量函数的设计17 4.3 主界面构造.17 5软件测试 19 总 结.21 参考文献.22 致 谢.23 科技外文文献.24 外文文献翻译.36 附录 A:软件开发源代码 .47 附录 B:软件使用说明书 .65 引言引言 随着网络技术的不断发展,通过网络将人与人的距离拉近,因此网络为来自世界各地 不同的人、团体、机构构建了一个网络村。网络的出现方便人们的日常生活及工作,在高 度发展的今天,网络已经不仅是浏览信息的品台,还广泛的运用到了商业、办公、金融、 政务等各行各业中,网络中的风险也越发

12、突出,进而网络安全问题越来越受到关注。因此, 对网络的监控与管理势在必行,而想要监控和管理网络,首先就要获取网络中所传输的各 类信息,才能进一步得进行监控和管理,可以说数据包的捕获是对网络监控与管理的前提, 所以研究并开发出一种能够有效地实时捕获网络信息的系统具有极其重要的意义。 在网络中,信息是以数据包的形式传输,所以为了监控计算机当前网络信息,可以通 过 WinPcap 来实现在当前计算机网络中传输的数据包的抓取,然后通过对捕获数据包中数 据信息,进行过滤解析,得到所抓数据包的协议、数据长度,以及数据报内容等信息。此 外,此次毕业设计还注重研究,主要体现在应用层协议的识别方面,同时采用了基

13、于正则 表达式技术得到某种应用层协议的特征表达式。 而为了实现将抓包获取的数据进行解析并展现出来,本次毕业设计还要通过 C+编程 将其编写成为软件,以便于操作运用,能让获取的数据包数据进行解析后,在界面中显示 出来,方便查看数据包各类信息,以及进一步的进行一些对应操作,达到我们解析数据包 的目的,并可在日后能添加新功能,加强对数据包的分析能力。 1 1概述概述 1.11.1课题背景课题背景 随着网络技术的飞速发展,网络的普及,给我们带来了巨大的社会和经济效益,同时 网络安全问题变得日益严重,计算机网络的设计、维护难度日益增加,安全问题正威胁着 每一个网络用户,对网络安全的研究也越来越重要。因此

14、,人们迫切的需要能够分析、诊 断和测试网络的工具,以防我们的电脑尽可能减少受到侵害。对于网络数据包的捕获现在 也有着很多的实现方法,存在着许多开源的 sniffer 软件供我们参考,但是其中的某些细节 上还是有一些问题的存在,在效果和效率上都有一些问题,分析上也并不是很方便。所以 尝试选择了这个课题。 1.21.2国内外研究现状国内外研究现状 现在不论是网上的一些开源的 Sniffer 软件还是市面上出售的网络监听软件,其实其基 础功能都是基于网络数据包捕获功能后扩展开的。所以我们可以清晰的认识到网络数据包 捕获功能的巨大作用和广泛的应用范围。目前 sniffer 软件种类繁多,但是很多都存在

15、一些 问题,比如说:效率低,效果差,分析困难等等。有些 sniffer 软件往往嵌入许多并不怎么 使用的功能在里面,增加了操作的复杂性,使用起来反而不便。所以真正想要找到一款操 作简单使用方便的数据包捕获软件并不容易。作为一名网络工程专业的学生,熟悉常用的 各种计算机相关软件,特别是和网络相关的软件是应该的。现在市场上的国内外的各种防 火墙软件、网络监听软件和协议分析软件等软件种类繁多,让人有点眼花缭乱。这些产品 大多数品质都不错,各有各的特点,所以选择起来的难度也挺大。我总是在一些比较著名 的软件下载网站上获取一些比较受好评的软件来使用,然后从中选择适合自己的。通过一 系列的使用和学习,我希

16、望能够自己完成一款功能适合自己使用的操作简单让人可以轻易 上手的网络数据包捕获和简单分析的软件。 1.31.3课题研究的意义课题研究的意义 随着网络的飞速发展,Internet 的迅速普及,网络已经深入到了我们的生活,跟我们息 息相关。伴随着网络带来的便利,网络安全问题也越来越受到人们的关注和重视。防火墙 也成了一个非常热门的课题,带来巨大的社会经济效益,保护我们的合法权益不受到侵害。 我选择的课题是 windows 下的网络数据包的捕获与分析,所以主要的研究方向和侧重点是 在于最基本也是最核心的网络数据包的捕获和分析等功能上。网络数据包的捕获对于网络 安全领域有着无可代替的重要作用,不论是防

17、火墙技术,网络监听技术或者是网络测试都 离不开数据包的捕获,这是一切的基础,其他的功能都要基于这个功能才能实现。 1.41.4课题研究的内容课题研究的内容 由上所述,加强对网络中数据包传输的监管,已经越发显得重要。而对网络中所传输 的数据包进行捕获则是对网络中数据包管理的前提,通过监控分析网络中的数据包,是建 设安全网络的保障。本实验就是通过研究网络中数据包的传输情况,构建一个简单快捷的 数据包抓包及分析软件: 一、运用 C+开发一个简单的软件实现通过调用 winpcap 来对网络中的基本数据包进 行捕获。 二、通过 winpcap 中常用的库函数的使用方式,来实现了简单的小型的络数据包抓包

18、器,并通过对原始包文的分析来展示当前网络的运行状况。 三、对捕获的数据包进行解析分类处理,能将所捕获的数据包中的信息解析罗列成数 据表,并可导入日志文本存储。 通过以上步骤通过实现数据包的捕获、数据包信息的解析、流量的监控以及数据的导 出。 2 2相关知识介绍相关知识介绍 2.12.1 TCP/IPTCP/IP 协议简介协议简介 我们捕获数据包的主要目的就是要对捕获的数据包进行分析。而我们目前使用的网络 传输协议就是 TCP/IP 协议。所以我们如果想更好的分析数据包就应该对此协议有点初步的 了解。下面我将简单的介绍一下 TCP/IP 协议。 2.1.12.1.1 什么是什么是 TCP/IPT

19、CP/IP TCP/IP 是供已连接因特网的计算机进行通信的通信协议。 TCP/IP 指传输控制协议/网际协议 (Transmission Control Protocol / Internet Protocol)。 TCP/IP 定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传 输的标准。 2 2. .1 1. .2 2 T TC CP P/ /I IP P 整整体体构构架架概概述述 TCP/IP 协议并不完全符合 OSI 的七层参考模型。传统的开放式系统互连参考模型,是 一种通信协议的 7 层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各 种硬件在相同的

20、层次上相互通信。这 7 层是:物理层、数据链路层、网络层、传输层、会话 层、表示层和应用层。而 TCP/IP 通讯协议采用了 4 层的层级结构,每一层都呼叫它的下一 层所提供的网络来完成自己的需求。这 4 层分别为: 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP) 、文件传输协议(FTP) 、 网络远程访问协议(Telnet)等。 传输层:在此层中,它提供了节点间的数据传送,应用程序之间的通信服务,主要功 能是数据格式化、数据确认和丢失重传灯。如传输控制协议(TCP) 、用户数据报协议 (UDP)等,TCP 和 UDP 给数据包加入传输数据并把它传输到下一层中,这一层负责传 送数据

21、,并且确定数据已被送达并接收。 互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主 机(但不检查是否被正确接收) ,如网际协议(IP) 。 网络接口层(主机-网络层):接收 IP 数据报并进行传输,从网络上接收物理帧,抽 取 IP 数据报转交给下一层,对实际的网络媒体的管理,定义如何使用实际网络(如 Ethernet、Serial Line 等)来传送数据。 2.1.32.1.3 TCP/IPTCP/IP 中的协议中的协议 以下简单介绍 TCP/IP 中的协议都具备什么样的功能,都是如何工作的: (1)IP 网际协议 IP 是 TCP/IP 的心脏,也是网络层中最重要的

22、协议。 IP 层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数 据包发送到更高层-TCP 或 UDP 层;相反,IP 层也把从 TCP 或 UDP 层接收来的数据包传 送到更低层。IP 数据包是不可靠的,因为 IP 并没有做任何事情来确认数据包是按顺序发送 的或者没有被破坏。IP 数据包中含有发送它的主机的地址(源地址)和接收它的主机的地 址(目的地址) 。 高层的 TCP 和 UDP 服务在接收数据包时,通常假设包中的源地址是有效的。也可以 这样说,IP 地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发 送来的。IP 确认包含一个选项,叫作 IP

23、source routing,可以用来指定一条源地址和目的地 址之间的直接路径。对于一些 TCP 和 UDP 的服务来说,使用了该选项的 IP 包好像是从路 径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存 在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠 IP 源地 址做确认的服务将产生问题并且会被非法入侵。 IP 数据报格式如图 2.1 图 2.1 IP 报文格式 (2)TCP 如果 IP 数据包中有已经封好的 TCP 数据包,那么 IP 将把它们向上传送到 TCP 层。 TCP 将包排序并进行错误检查,同时实现虚电路间的连接。TCP

24、数据包中包括序号和确认, 所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。 TCP 将它的信息送到更高层的应用程序,例如 Telnet 的服务程序和客户程序。应用程 序轮流将信息送回 TCP 层,TCP 层便将它们向下传送到 IP 层,设备驱动程序和物理介质, 最后到接收方。 面向连接的服务(例如 Telnet、FTP、rlogin、X Windows 和 SMTP)需要高度的可靠 性,所以它们使用了 TCP。DNS 在某些情况下使用 TCP(发送和接收域名数据库) ,但使 用 UDP 传送有关单个主机的信息。 TCP 报文格式 如图 2.2 图 2.2 TCP 报文格式 (3)UDP

25、 UDP 与 TCP 位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP 不被应 用于那些使用虚电路的面向连接的服务,UDP 主要用于那些面向查询-应答的服务,例如 NFS。相对于 FTP 或 Telnet,这些服务需要交换的信息量较小。使用 UDP 的服务包括 NTP(网络时间协议)和 DNS(DNS 也使用 TCP) 。 欺骗 UDP 包比欺骗 TCP 包更容易,因为 UDP 没有建立初始化连接(也可以称为握手) (因为在两个系统间没有虚电路) ,也就是说,与 UDP 相关的服务面临着更大的危险。 UDP 报文格式 如图 2.3 图 2.3 UDP 报文格式 (4)ICMP ICM

26、P 与 IP 位于同一层,它被用来传送 IP 的的控制信息。它主要是用来提供有关通向 目的地址的路径信息。ICMP 的Redirect信息通知主机通向其他系统的更准确的路径,而 Unreachable信息则指出路径有问题。另外,如果路径不可用了,ICMP 可以使 TCP 连接 体面地终止。PING 是最常用的基于 ICMP 的服务。 (5)TCP 和 UDP 的端口结构 TCP 和 UDP 服务通常有一个客户/服务器的关系,例如,一个 Telnet 服务进程开始在 系统上处于空闲状态,等待着连接。用户使用 Telnet 客户程序与服务进程建立一个连接。 客户程序向服务进程写入信息,服务进程读出

27、信息并发出响应,客户程序读出响应并向用 户报告。因而,这个连接是双工的,可以用来进行读写。 (6)常用网际协议编号如表 2.1 表 2.1 常用网际协议编号 十进制编号协议说明 0无保留 1ICMP网际控制报文协议 2IGMP网际组管理协议 3GGP网关网关协议 4无未分配 5ST流 6TCP传输控制协议 8EGP外部网关协议 9IGP内部网关协议 11NVP网络声音协议 17UDP用户数据报协议 2.22.2 WinPcapWinPcap 开发技术详解开发技术详解 2.2.12.2.1 WinpcapWinpcap 介绍介绍 Winpcap(Windows Packet Capture)是

28、Windows 平台下一个专业网络数据包捕获开发 包,是为 Libpcap 在 Windows 平台下实现数据包的捕获而设计的。在设计 Winpcap 时参照 了 Libpcap,两者使用方法相似。使用 Winpcap 开发包,可以把在 Linux 下基于 Libpcap 的 程序很容易的移植到 Winpcap 平台下。Winpcap 是在 BSD 许可证下发布的,它主要是由加 利福尼亚大学的 Lawrence Berkeley Laboratory 开发。 使用 Winpcap 开发包的主要软件有:Windump(与 linux 下的 Tcpdump 的功能几乎一 致) 、Analyzer(

29、Windows 下的嗅探器) 、Ethereal(网络协议分析软件)等。 开发 Winpcap 这个项目的目的在于为 Win32 应用程序提供访问网络底层的能力,其核 心功能是捕获网络数据包,其他功能包括数据包过滤、数据包发送、流量统计和数据包存 储等。Winpcap 给程序员提供了一套标准的网络数据包捕获的编程接口,并且与 Libpcap 兼容,增加了从 linux 到 windows 平台的可移植性。而且提供很高的应用效率,充分考虑 了各种性能和效率的优化,在内核层实现了数据包的捕获和过滤。这是由 NPF 来实现的, NPF 是 Winpcap 的核心部分,它实现了内核层次的统计功能,对于

30、设计网络流量的程序很 有好处。 在这里我使用的是 WinPcap 4.1.3 版,性能稳定。 2.2.22.2.2 WinpcapWinpcap 的组成的组成 Winpcap 包括三部分内容。 第一部分是内核层的数据包过滤模块。它相当于在 Linux 下 Libpcap 使用的 BPF 过滤 模块,实现了高效的网络数据包的捕获和过滤功能,其过滤规则跟 BPF 是一样的。此过滤 模块实际上是一个驱动程序,被称为 NPF(Netgroup Packet Filter)数据包驱动程序。 第二部分是动态链接库 packet.dll。它是提供给开发者的一个接口,使用它就可以调用 Winpcap 的函数,

31、它是一个较低层的开发接口。 第三部分是动态链接库 wpcap.dll。它也是提供给开发者的一个接口,但它是一个更高 层的编程接口,其调用与系统无关。使用此接口进行编程,几乎可以把 linux 下使用 libpcap 写的程序原封不动的搬到 Windows 平台下。 网络驱动程序接口规范(NDIS,Network Driver Interface Specification)是由微软和 3com 公司共同制定的,它位于网卡和协议层之间,提供一个接口,为上层协议提供服务, 并且屏蔽了下层各种网卡的差别,并且支持多种网络协议。并且支持多种工作模式和网络 驱动类型(小端口驱动、中间层驱动、协议驱动)

32、,其中 Winpcap 的 NPF 就属于协议驱动 类型。 NPF(Netgroup Packet Filter): NPF 是 Winpcap 的核心部分,它的主要功能就是捕获数据包,还可以发送数据包、存 储数据包以及对网络进行统计分析。 图 2.4 NPF 的结构 图 2.4 中的箭头标识网络数据包的流动方向,并且可以看到 NPF 是工作在内核层的。 NPF 由一个网络转发部件,从网卡驱动程序收集网络数据包,既可以发送给过滤部件,对 网络数据包进行过滤,也可以发送给统计部件,对网络进行统计分析,还可以发送给存储 部件,把网络数据包直接存储到磁盘。数据包在 NPF 中使用了缓存机制,主要是为

33、了提高 效率和速度。 从图 2.4 中也可以看到,packet.dll 位于 wpcap.dll 的下层,是较低层的网络编程接口。 使用它可以跟内核打交道,它是开发者与内核交互的一个很好的接口。Packet.dll 提供了很 多功能复杂的编程接口,其接口形式与微软的 DDK 提供的 packet32.dll 差不多。使用 packet.dll 比较烦琐,如果无特殊要求,一般不用 packet.dll 进行编程开发。用的最多的还是 wpcap.dll,因为它提供了一个更高级、更方便的编程接口。 图 2.4 中,wpcap.dll 是最上层的一个接口,与 libpcap 兼容,具有很好的可移植性,

34、是 用的最多的一种编程接口。使用 wpcap.dll 进行数据包捕获的编程与使用 Libpcap 一样简单。 2.2.32.2.3 WinpcapWinpcap 数据结构数据结构 详细的一些数据结构在后面的软件编程中会给出,此处只是给出一些比较核心的数据 结构,并简单介绍。 (1)pcap_addr Pcap_addr 数据结构的定义如下: Tpyedef struct pcap_addr pcap_addr_t; Struct pcap_addr Struct pcap_addr *next; /指向下一个地址结点 Struct sockaddr *addr; /网络接口地址 Struct

35、sockaddr *netmask; /地址掩码 Struct sockaddr *broadaddr; /广播地址 Struct sockaddr *dstaddr; /目的地址 ; 此数据结构描述的是网络接口的地址。 (2)pcap_if Pcap_if 数据结构定义如下: Tpyedef struct pcap_if pcap_if_t; Struct pcap_if Struct pcap_if *next; /指向下一个网络接口结点 char *name; /网络接口名字 char *description; /描述信息 Struct sockaddr *addresses; /网络

36、接口地址 Bpf_u_int32 flags; /标记 ; 此数据结构描述的是一个网络接口,它其实是网络接口链表中的一个结点。 (3)pcap_pkthdr Pcap_pkthdr 数据结构定义如下: Struct pcap_pkthdr Struct timeval ts; /时间戳 Bpf_u_int32 caplen; /捕获长度 Bpf_u_int32 len; /数据包长度 ; 此数据结构用来描述每个捕获到的数据包的一些基本信息,每个数据包都有此数据结 构。 2.2.42.2.4 WinpcapWinpcap 函数函数 Winpcap 提供的输出函数与 Libpcap 的函数完全一样

37、,使用方法也一样。下面介绍一 些主要的函数。 (1)网络接口函数: int pcap_findalldevs(pcap_if_t *alldevsp,char *errbuf) ; 此函数的功能是查找机器的所有可用网络接口,用一个链表返回。 void pcap_freealldevs(pcap_if_t *alldevs); 此函数的功能是释放网络接口链表中的所有网络接口。 pcap_t *pcap_open_live(const char *device,int snaplen,int promisc,int to_ms,char *ebuf); 此函数的功能是打开一个网络接口进行数据包捕获

38、打开的模式有 promisc 表示,如果 是 1 就表示以混杂模式把接口打开。 (2)规则函数: int pcap_setfilter(pcap_t *p,struct bpf_program *fp) 此函数设置 BPF 过滤规则,由参数 fp 确定 int pcap_compile(pcap_t *p,struct bpf_program *program,char *buf,int optimize,bpf_u_int32 mask) 此函数的功能是编译 BPF 过滤规则。 (3)数据包捕获函数: int pcap_loop(pcap_t *p,int cnt,pcap_handler

39、callback,u_char *user) 此函数是循环捕获网络数据包,直到遇到错误或者满足退出条件。每捕获一个数据包 就调用 callback 指示的回调函数,所以可以在回调函数中对捕获到的数据包进行操作。 int pcap_next_ex(pcap_t *p,struct pcap_pkthdr *pkt_header,const u_char *pkt_data) 此函数的功能是捕获一个网络数据包。 void pcap_close(pcap_t *p) 此函数的功能是关闭 winpcap 操作,并销毁相应资源。 (4)文件相关函数: pcap_dumper_t *pcap_dump_o

40、pen(pcap_t *p,const char *fname) 此函数的功能是打开一个文件,并准备向其写入网络数据包数据。 void pcap_dump(u_char *user,const struct pcap_pkthdr *h,const u_char *sp) 此函数的功能是向文件中写入网络数据包内容。 3 3系统设计方案及功能描述系统设计方案及功能描述 3.13.1 系统设计方案系统设计方案 对于该软件的设计和执行过程,主要分为两个关键部分,所以按此要求分为中有两个 核心的工作步骤,第一步是调用 Winpcap 函数库实现下层抓包,这部分是为了实现网络中 的数据包获取,也是最基础

41、的步骤。第二步是对所获取的数据包文进行分析和统计或是其 他操作,筛选出我们所需要的信息。下面分别列出两个核心过程。 捕获过程,通过 winpcap 的调用从网络中获取数据包信息,步骤如下: 第一:初始化 Winpcap 开发库。 第二:获得当前的网卡列表信息,从列表中选取其中所需要的指定网卡。 第三:获得当前的过滤规则,决定其过滤细节,但也可为空。 第四:调用库函数,pcap_loop() ,并同时指定其回调函数,所指定的回调函数其实 就是数据包分析过程。 分析过程,将所获取的当前数据包信息转存后进行解析过程,步骤如下: 第一:由上一步通过 winpcap 抓包,将抓包后得到的数据包后转存到内

42、存里,满足以 后的使用和操作。 第二:调用相符协议类型的数据包分析类。 在概要设计中,按模型层的要求,构造了多个用于分析不同类型数据包的分析类模型, 每个模型对应一种数据包类型,调用是按要求调用符合该数据包类型的指定模块。每个模 型中按对应的数据包类型构造分析算法,完成对本类型数据包的具体解析工作。 第三:对数据包信息内容进行解析,过程如下: 在数据包中,其前 14 个字节(Byte)表示为数据链路层的报文头,其报文格式是前 6 个字节(Byte)表示为目的 MAC 地址,随后的 6 个字节(Byte)表示为源 Mac 地址,最 后的 2 个字节(Byte)代表上层协议类型,这些重要的数据信息

43、,是我们分析上层协议的 依据。根据所分析到的协议类型进行类似的迭代分析。这样就可以得到各层中的报文头信 息和数据信息。 第四:结束本次分析,等待下一次调用。 总体设计流程图如图 3.1 所示 启动程序 选择网卡 启动监听 不停的通过pcap.loop抓包,通过调用各 Packet类来解析报文的包 增加相应的包类型计数(tcp或udp),将 捕获到的包的分析结果插入list中。 开始监听线程 图 3.1 设计流程图 3.23.2 系统功能描述系统功能描述 开发的这个系统最主要也是最核心的功能就是对于网络数据包的捕获以及对于捕获到 的网络数据包显示和简单的分析。实质是主要实现一个网络实时监听的功能

44、,然后将捕捉 到的数据包保存下来以便进一步的分析使用。具体实现功能如下: (1)通过使用 winpcap 库函数进行数据包的捕获; (2)将捕获到的数据包进行分析并显示; (3)解析出数据包使用的协议、源地址、目的地址、包的大小和内容等; (4)在界面的列表中实时显示捕获到的数据包的情况,点击列表,可以展开此数据包 的详细信息; (5)流量监控; (6)导出数据。 4 4系统编码实现系统编码实现 4.14.1 网络数据包捕获模块的实现网络数据包捕获模块的实现 以太网具有共享介质的特征,信息是以明文的形式在以太网络上传输的,当网卡被设 置为混杂模式时,可以捕获任何一个在同一冲突域上传输的数据包。

45、运用这一原理使网络 数据包捕获系统能够拦截到我们所要的信息,这是捕获数据包的物理基础。网卡具有 4 种 工作模式:广播模式,多播传送模式,直接模式,混杂模式。网卡的缺省工作模式包含广 播模式和直接模式,即它只接收广播帧和发给自己的帧。如果采用混杂模式,网卡将接受 同一网络内所有主机所发送的数据包,这样就可以到达对所有数据包进行捕获的目的。 4.1.14.1.1 网络数据包捕获程序的编写过程网络数据包捕获程序的编写过程 (1)获取本机已连接的网络适配器列表 WinPcap 提供了 pcap_findalldevs_ex() 函数来实现这个功能: 这个函数返回 pcap_if 结 构的链表, 每个

46、这样的结构都包含了一个适配器的详细信息。值得注意的是,数据域 name 和 description 表示一个适配器名称和一个可以让人们理解的描述。 int pcap_findalldevs_ex (char * source, struct pcap_rmtauth * auth, pcap_if_t * alldevs, char * errbuf ) (2)打印网卡列表 for(d=alldevs; d; d=d-next) printf(“%d. %s“, +i, d-name); if (d-description) printf(“ (%s)n“, d-description); e

47、lse printf(“ (No description available)n“); (3)选择网卡 一般的情况下都会检测到至少两块网卡,所以我们要选择我们正在使用的网卡设备。 scanf(“%d“, /输入要选择的网卡 if(inum i)/选端口输入错误 printf(“nInterface number out of range.n“); pcap_freealldevs(alldevs);/* 释放设备列表 */ return -1; (4)跳转到选中的适配器 for(d=alldevs, i=0; inext, i+); /* 打开设备 */ if ( (adhandle= pca

48、p_open(d-name, / 设备名称抓包的设备 65536, / 65535 保证能捕获到不同数据链路层上的 每个数据包的全部内容 1,/PCAP_OPENFLAG_PROMISCUOUS, 混杂 模式,0 10000,/读取超时时间 NULL, / 远程机器验证 errbuf/ 错误缓冲池 ) ) = NULL) fprintf(stderr,“nUnable to open the adapter. %s is not supported by WinPcapn“, d-name); pcap_freealldevs(alldevs);/* 释放设备列表 */ return -1;

49、(5)打开捕获的数据存储的文件 dumpfile = pcap_dump_open(adhandle, fileway); /* 打开文件 */ (6)循环捕获并存储 pcap_freealldevs(alldevs); /* 循环捕获数据并调用 packet_handler 函数把数据存储到堆文件 */ /const struct pcap_pkthdr *header; /const u_char *pkt_data; pcap_loop(adhandle,-1, packet_handler, (unsigned char *)dumpfile);/利用 adhandle 描述符, pcap_close (adhandle); /关闭抓包过程 return 0; void p

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1