版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本科毕业论文 基于 winpcap 数据抓取系统 学 院: 计算机与信息工程学院 专 业: 计算机科学与技术 学 号: 071015559 姓 名: 刘博 指导教师: 白云莉 职 称: 副教授 论文提交日期:二 一一一一年六月 摘 要 winpcap 是 win32 平台下用于原始数据包捕获,向网络发送数据报文,搜集网 络通信过程中统计信息的重要工具。著名的网络封包分析软件 wireshark(前身是 ethereal)就是依靠 winpcap 提供的接口实现的数据包捕获。本文简要介绍了 winpcap 的历史和 winpcap 的体系结构及内部结构,然后讨论了 winpcap 对网络 数据包
2、过滤的机制及特性。 通过 vc+6.0 中 mfc 编程实现通过一个完整界面来控制调用 winpcap 中的函数 来实现对网卡信息的捕获和循环捕获数据包,然后通过预先对于 ip、tcp、udp 等数 据包结构的定义和 tcp/ip 等协议来解析其中包含的内容并返回显示捕获到的数据包 的信息,当然也可以保存捕获到的数据包到指定地点以便进一步分析。 关键词:winpcap 捕获 分析 tcp/ip 数据包 abstractabstract winpcap is an important tool for raw packet capture, sending packets to the netw
3、ork andcollecting network traffic statistic. the wellknown network analysis software wireshark(formerlyehtereal) is rely on winpcap to realize the function of capture. this introduces the history ofwinpcap open source project and the winpcap architecture and internal structure, and then given themet
4、hod of building a network protocol analysis development environment with winpcap and vc,focusing on the winpcap packet filtering mechanisms and characteristics, and analyze theshortcomings of packet filtering on winpcap and the errorprone areas of the preparation of winpcapfilter string. finally, so
5、lutions and solution were evaluated. by vc + +6.0 mfc programming in the full interface to control through a call to the function to achieve winpcap card information on the capture and recycling capture packets, and then advance the ip, tcp, udp and other data structure definitions and tcp /ip and o
6、ther protocols to resolve them and return the display contains the contents of the captured packets of information, of course, you can save the captured data packets to the designated location for further analysis. key words: winpcap capture analysis tcp / ip data packets 目 录 1 绪论.1 1.1 课题背景 .1 1.1.
7、1winpcap 介绍.1 1.1.2 winpcap 体系结构.1 1.1.3 winpcap 的内部结构.1 1.2 国内外研究现状 .1 1.2.1 网络安全的研究.1 1.2.2 现有的网络测试分析系统.2 1.3 课题研究的意义 .3 2 设计理论依据.5 2.1 osi 模型简介.5 2.2 tcp/ip 协议族及各数据包格式.5 2.2.1 tcp/ip 协议族.5 2.2.2 数据包的总体结构 .6 2.2.3 ip 数据段格式.7 2.2.4 tcp 数据段格式.7 2.2.5 udp 数据段格式.8 2.2.6 udp 数据段格式.8 2.3 网络数据捕获原理 .8 2.4
8、 网络数据捕获程序结构 .9 2.5 网卡的工作模式 .10 2.6 基于windows的数据包捕获方案.11 3 winpcap 研究 .12 3.1 winpcap简介 .12 3.2 winpcap功能和应用 .12 3.3 winpcap组成架构和相关功能 .13 3.3.1 winpcap 的组成图和结构图:.13 3.3.2 winpcap 的各功能模块.15 3.2.3 windows 下 bpf 与 ndis 依赖关系.16 3.3 winpcap数据结构和主要功能函数 .16 3.3.1 winpcap 的数据结构及自定义类型.16 4 软件系统实现过程.19 4.1 系统流
9、程图 .19 4.2 winpcap的安装和环境搭建 .20 4.3 功能描述 .20 4.3.1 获得本地网络设备列表及信息.20 4.3.2 打开网卡设备准备捕获数据包 .21 4.3.3 捕获数据包 .22 4.4 数据包的协议解析 .23 4.4.1 网络协议分析 .23 4.4.2 各协议帧的数据结构 .23 4.4.3 分析具体实现 .25 5 软件测试和结果显示.30 5.1 设备列表显示 .30 5.2 数据显示框 .30 5.3 数据帧分析框 .31 5.3 完整对话框 .32 6 总结.32 致 谢.33 1 绪论 1.1 课题背景 1.1.1winpcap 介绍 winp
10、cap(windows packet capture)是 windows 平台下一个免费,公共的网 络访问系统。winpcap 这个项目的目的在于为 win32 应用程序提供访问网络底层的 能力,通过它,应用程序可以绕过系统的协议栈,直接从网络捕获或向网络发送数 据包,收集网络统计信息等。1993 年初,s.mccanne 和 v.jacobson 等人推出了著 名的 bsd 包过滤器(bpf),它可以免费获得,目前已被许多版本的 unix 系统所采 用,在 windows 平台上也有一些捕获工具面世,如 netmonapi, pcausa 等,与 bpf 不同的是,这些产品是商业性质的。而
11、winpcap 则是 windows 平台上为数不多的功 能强大且可免费获得的包捕获接口软件之一,它是由意大利人 fulvio risso 和 loris degioanni 等人提出并实现的 2。 1.1.2 winpcap 体系结构 winpcap 由一个驱动和几个动态连接库组成,驱动扩展了操作系统,提供底层 的网络访问,动态库提供编程接口,方便应用程序调用,如图 1 所示。winpcap 提 供给用户两个不同级别的编程接口:一个基于 libpcap 的 wpcap.dll,另一个是较 底层的 packet.dll。对于一般的要与 unix 平台上 libpcap 兼容的开发来说,使用 w
12、pcap.dll 是当然的选择。图 1 winpcap 体系结构3fig.1 main components of winpcap3 1.1.3 winpcap 的内部结构 winpcap 是针对 win32 平台上的抓包和网络分析的一个架构。它包括一个核心 态的包过滤器,一个底层的动态链接库(packet.dll)和一个高层的不依赖于系统 的库(wpcap.dll)。内部结构如图 2 所示。图 2 winpcap 内部结构3fig.2 winpcap and npf3使用 winpcap 抓包依赖于两个主要组件:一个数据包过滤器, 它决定着是否接收进来的数据包并把数据包拷贝给监听程序。数据包
13、过滤器是一个 有布尔输出的函数。如果函数值是 true,抓包驱动拷贝数据包给应用程序;如果是 false,数据包将被丢弃。npf 数据包过滤器更复杂一些,因为它不仅决定数据包是 否应该被保存,而且还得决定要保存的字节数。被 npf 驱动采用的过滤系统来源于 bsd packet filter(bpf),一个虚拟处理器可以执行伪汇编书写的用户级过滤程 序。应用程序采用用户定义的过滤器并使用 wpcap.dll 将它们编译进 bpf 程序。然 后,应用程序使用 biocsetf ioctl 写入核心态的过滤器。这样,对于每一个到来 的数据包该程序都将被执行,而满足条件的数据包将被接收。与传统解决方
14、案不同, npf 不解释(interpret)过滤器,而是执行(execute)它。由于性能的原因,在 使用过滤器前,npf 提供一个 jit 编译器将它转化成本地的 80 x86 函数。当一个数 据包被捕获,npf 调用这个本地函数而不是调用过滤器解释器,这使得处理过程非 常快。一个循环缓冲区,用来保存数据包并且避免丢失。一个保存在缓冲区中的数 据包有一个头,它包含了一些主要的信息,例如时间戳和数据包的大小。此外,以 队列插入的方式来保存数据包可以提高数据的存储效率。可以以多个数据包一组的 方式将数据包从 npf 缓冲区拷贝到应用程序。这样就提高了性能,因为它降低了读 的次数。如果一个数据包
15、到来的时候缓冲区已经满了,那么该数据包将被丢弃,此 时发生丢包。 1.2 国内外研究现状 1.2.1 网络安全的研究 从广义的网络安全角度来讲,近来国内外的研究主要集中在密码理论与技术、 安全协议理论与技术、安全体系结构理论与技术等方面。 密码理论与技术是现代信息安全的核心问题,其基础是可信信息系统的构建与 评估主要包括两部分,即基于数学的密码理论与技术和非数学的密码理论与技术。 自从 1976 年公钥密码的思想提出以来,国际上己经提出了许多种公钥密码体制,近 年来又提出了许多新的密码体系,如基于数学的分组密码、序列密码、认证码、数 字签名、hash 函数、身份识别、密钥管理、pki 技术等和
16、基于非数学的信息隐形, 量子密码,基于生物特征的识别理论与技术等。 数据捕获和协议分析只是网络安全中协议部分的一个分支,而且由于还不能完 全抛开现有的正在广泛使用的不安全协议(如 tcp/ip 等),所以对于当今网络的协议 分析在一段时间内还是研究的课题。但是,现在已经部分使用和今后发展方向的是 采用安全的协议。 安全协议的研究主要包括两方面内容,即安全协议的安全性分析方法研究和各 种实用安全协议的设计与分析研究。安全协议的安全性分析方法主要有两类,一类 是攻击检验方法,一类是形式化分析方法,其中安全协议的形式化分析方法是安全 协议研究中最关键的研究问题之一,它的研究始于 80 年代初,目前正
17、处于百花齐放, 充满活力的状态之中。随着各种有效方法及思想的不断涌现,这一领域在理论上正 在走向成熟。 目前,已经提出了大量的实用安全协议,代表的有:电子商务协议,ipsec 协议, tls 协议,简单网络管理协议(snmp),pgp 协议,pem 协议,s-http 协议,s/mime 协议等。 1.2.2 现有的网络测试分析系统 基于网络数据捕获和协议分析技术,可以应用成为广义上的协议分析仪 (protocol analyzer),之所以这样定义是因为有一些纯软件的,目的更侧重于网络 数据捕获和侦听的协议分析系统又叫做嗅探器(sniffer),而基于硬件或软硬件结合 的网络数据捕获和分析系
18、统才叫协议分析仪。但在某些场合他们的分界是模糊的, 因为它们在功能上都能捕获并分析报文。实际上一些网管软件,和一些网络测试仪 都使用了嗅探器技术。 纯软件的嗅探器很多,有 tepdump、nmap、linuxsniffer、dsniff、ngep、snifferpro 加 etxray、甚至有专 用于捕获用户名和密码的 linsniffer、winsniffer。所以 sniffer 技术本身就是一 把双刃剑,它们同时被网络管理员和黑客在熟练地使用,既可以作为网络故障的诊 断工具,也可以作为黑客嗅探和监听的工具。 大多数的纯软件协议分析仪是可以使用普通的网卡来完成进行简单的数据采集 工作的,即
19、协议分析软件+pc 网卡。其典型的功能是数据包的捕捉、协议的解码、 统计分析和数据流量的产生。用协议分析仪可以捕捉网上的实际流量、提取流量的 特征,据此对网络系统的流量进行模型化和特征化。此外,网络协议分析仪还可以 主动地产生大量的数据包施加到网络上,分析网络的响应或对网络系统进行加重测 试。目前典型的协议分析仪有 hp 公司的 internet advisor(网络专家系统)、 fluke(福禄克公司)的 optiview-pe、wg 公司的 domino 系列协议分析仪,nai 公司 出品的 network associates sniffer portable 等。但这类协议分析软件无论
20、在协 议的解码能力、解码和数据分析的实时性以及数据流量的产生能力上与用专门硬件 实现的协议分析仪相比仍有差距。另一种就是采用专用的数据采集硬件的协议分析 仪,应用于复杂和高速的网络链路上,采用专用的数据采集箱有利于全线速地捕捉 或更有效地进行实时数据过滤。 还有一些比协议分析仪更高层次的网络性能测试工具,站在应用层的角度使用 一些基准流量对网络系统的性能进行分析,代表性的软件是 ganymede software 公 司的 chariot 软件。另外还有一类软件值得介绍,就是用于网络系统规划验证的网 络系统模拟环境,国外己有一些这样的软件能对用典型的网络技术或它们的组合构 建的较大型的网络系统
21、进行模拟,但往往价格十分昂贵。 从协议分析仪发展的角度来说,网络维护人员越来越需要使用功能强大并能将 多种网络测试手段集于一身的综合式测试分析手段,典型的协议分析仪上的功能延 展就是加入网管功能、自动网络信息搜集功能、智能的专家故障诊断功能,并且移 动性能要有效。这种综合的协议分析仪或者说是综合的网络分析仪成为了当今网络 维护和测试仪的主要发展趋势,像 fluke 的 optiview ina 手持式综合协议分析仪自 上市来在网络现场分析、故障诊断、网络维护方法得到了相当广泛的应用和发展。 随着网络维护规模的加大,网络技术的变化,网络关键数据的采集也越来越困 难。有时为了分析和采集数据,必须能
22、在异地同时地进行采集,于是将协议分析仪 的数据采集系统独立开来,能安置在网络的不同地方,由能控制多个采集器的协议 分析仪平台进行管理和数据处理,这种应用模式就诞生了分布式协议分析仪。 1.3 课题研究的意义 随着网络的飞速发展,internet 的迅速普及,网络已经深入到了我们的生活, 跟我们息息相关。伴随着网络带来的便利,网络安全问题也越来越受到人们的关注 和重视。有两类人对于流动在网络上的数据是非常感兴趣的:网络管理员和黑客, 他们都要对网络上的以包为单位的数据流进行监测。事实上,一个好的数据包监测 软件通常可以在网络管理和黑客技术的工具包中同时找到。黑客可以用数据包监测 软件监听互联网,
23、并且追踪一些敏感数据的交换如登录对话和财经交易;网络管理 员可以用数据包监测软件监视网络的状态、查找网络漏洞,检测网络性能和修复网 络的故障等。所以,研究网络数据的捕获和网络协议的分析不但能够有利于管理网 络和维护网络的健康运转,更重要的还可以得知黑客对网络攻击的机理,有针对地 进行入侵检测,进而避免黑客的攻击破坏和对资料的窃取。 该课题是 windows 下基于 winpcap 的网络数据包的捕获分析工具的开发和实现, 所以主要的研究方向和侧重点是在于最基本也是最核心的网络数据包的捕获和分析 等功能上。网络数据包的捕获在于网络安全领域有着无可代替的重要作用,不论是 防火墙技术,网络监听技术或
24、者是网络测试都离不开数据包的捕获,这是一切的基 础,其他的功能都要基于这个功能才能实现。 2 设计理论依据 2.1 osi 模型简介 osi(open system interconnect)七层模型即开放式系统互联参考模型,是一 种框架性的设计方法通过七个层次化的结构模型使不同的系统不同的网络之间实现 可靠的通讯,因此其最主要的功能使就是帮助不同类型的主机实现数据传输。虽然 目前没有完全按照这种模型实现的网络协议栈,但是这种模型对于理解网络协议内 部的架构很有帮助,为学习网络协议及功能提供了很好的参考模型。七层模型图如 图 1 所示。 应用层 表示层 会话层 应用层 传输层 表示层 网络层
25、传输层 网络层 数据链路层 会话层 数据链路层 物理层物理层 接口 接口 接口 接口 接口 接口 接口 apud ppud 报文 tpud spud 帧 比特 图 1 iso/osi 七层模型图 协 议 2.2 tcp/ip 协议族及各数据包格式 2.2.1 tcp/ip 协议族 tcp/ip(transmission control protocol/internet protocol,传输控制协议/ 网间网协议)是目前世界上应用最为广泛的协议,它的流行与 internet 的迅猛发展 密切相关tcp/ip 最初是为互联网的原型 arpanet 所设计的,目的是提供一整套方 便实用、能应用于
26、多种网络上的协议,事实证明 tcp/ip 做到了这一点,它使网络互 联变得容易起来,并且使越来越多的网络加入其中,成为 internet 的事实标准。 ip 协议(internet protocol)又称互联网协议,是支持网间互连的数据报协议, 它与 tcp 协议(传输控制协议)一起构成了 tcp/ip 协议族的核心。它提供网间连接 的完善功能,包括 ip 数据报规定互连网络范围内的 ip 地址格式。tcp/ip 四层参考 模型如图 2 所示。 数据包 ip 头 tcp 头(或其他信息头) 数 据 图 2 tcp/ip 四层模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 os
27、i七层参考模型 应用层 网络互联层 主机到网络 tcp/ip四层参考模型 传输层 tcp/ip 各层包含的协议图如下: 图 3 各协议关系图 应用层 网络互联层 主机到网络 传输层 telnet、ftp、http、p2p 以 太 网 令 牌 网 iparp snmp、tftp、nfs、p2p udptcp fddihdlcppp 802.2802.3 icmp 2.2.2 数据包的总体结构 图 4 数据包总体结构图 2.2.3 ip 数据段格式 ip 的数据段头的具体格式如图 5 所示。 16 位 16 位 标识 源地址 目的地址 生命期协议头校验和 版本ihl服务类型总长 标志分段偏移 选项
28、(0 或更多) 16 位 16 位 源端口 目的端口 顺序号 确认号 校验和 紧急指针 可选项(0 或更多的 32 位) 数据(可选项) t c p 头 长 ( 保 留) 7 位 u r c a c k p s h r s t s y n f i n窗口大小 16 位 16 位 源端口 目的端口 udp 长度 udp 校验码 图 5 ip 数据段头格式 2.2.4 tcp 数据段格式 tcp 的数据段头的具体格式如图 6 所示。 图 6 tcp 数据段格式 2.2.5 udp 数据段格式 tcp 的数据段头的具体格式如图 7 所示。 图 7 udp 数据段头格式 2.2.6 udp 数据段格式
29、 icmp 的数据段头的具体格式如图 8 所示。 类型(8) 代码(8) 校验和(16) 图 8 icmp 数据段格式 2.3 网络数据捕获原理 由于目前用的最多的局域网络形式是以太网,在以太网上,数据是以被称为帧 的数据结构为单位进行交换的,而帧(数据包)是用被称为带碰撞检测的载波侦听多 址访问即 csma/cd(carrier sense multiple access with collision detection) 的方式发送的,在这种方法中,发送到指定地址的帧实际上是发送到所有计算机的, 只是如果网卡检测到经过的数据不是发往自身的,简单忽略过去而已。正是这种基 于 csma/cd
30、的广播机制,这就给连接在网络上的计算机捕获来自于其他主机的数据 带来了可能,即通过对网络接口的设置可以使网卡能够接收到所有经过该机器的数 据,然后将这些数据做相应处理并实时分析这些数据的内容,进而分析网络当前状 态和整体布局。 从广义的角度上看,一个包捕获机制包含三个主要部分:首先是最底层针对特定 操作系统的包捕获机制,然后是最高层针对用户程序的接口,第三部分是包过滤机 制。不同的操作系统实现的底层包捕获机制可能是不一样的,但从形式上看大同小 异。数据包常规的传输路径依次为网卡、设备驱动层、数据链路层、ip 层、传输层、 最后到达应用程序。而包捕获机制是在数据链路层增加一个旁路处理,对发送和接
31、 收到的数据包做过滤/缓冲等相关处理,最后直接传递到应用程序。值得注意的是, 包捕获机制并不影响操作系统对数据包的网络栈处理。对用户程序而言,包捕获机 制提供了一个统一的接口,使用户程序只需要简单的调用若干函数就能获得所期望 的数据包。这样一来,针对特定操作系统的捕获机制对用户透明,使用户程序有比 较好的可移植性。包过滤机制是对所捕获到的数据包根据用户的要求进行筛选,最 终只把满足过滤条件的数据包传递给用户程序。 2.4 网络数据捕获程序结构 用户态 - 核心态 网络应用程序 vxd/wdm 协议驱动器 ndis 网卡驱动程序网卡驱动程序 网卡驱动程序 图 9 数据包捕获程序结构图 其中 nd
32、is(network deiver interface specification)是 microsoft 和 3com 公司联合制定的网络驱动规范,并提供了大量的操作函数。它为上层的协议驱动程 序提供服务,屏蔽了下层各种网卡的差别。ndis 向上支持多种网络协议(比如 tcp/ip、nwlinux ipx/spx、netbeui 等) ,向下支持不同厂家生产的多种网卡,还 支持多种工作模式,支持多处理器,并提供一个完备的 ndis 库。 ndis 驱动程序结构图如图 10 所示。 用户模式 - 内核模式 应用层 协议驱动程序 中间驱动程序 网卡驱动 网卡 sidn 图 10 ndis 驱动程
33、序的结构图 2.5 网卡的工作模式 以太网是一种总线型的网络,从逻辑上来看是由一条总线和多个连接在总线上 的节点所组成,各个节点采用上面提到的 csma/cd 协议进行信道的争用和共享。每 个节点通过网卡来实现这种功能。每一个在局域网(lan)节点上的主机都有其硬件地 址(mac 地址),这些地址唯一地表示了网络上的主机。当用户发送一个数据包时, 这些数据包就会发送到 lan 上所有可用的机器。网卡主要的工作是完成对于总线当 前状态的探测,确定是否进行数据的传送,判断每个物理数据帧目的地是否为本机 地址,如果不匹配,则说明不是发送到本机的而将它丢弃。如果是的话,接收该数 据帧,进行物理数据帧的
34、 crc 校验,然后将数据帧提交给 llc 子层。 网卡具有如下的几种工作模式: (1)广播模式(broadcastmodel):它的物理地址(mac)地址是以 0 xfffff 的帧为 广播帧,工作在广播模式的网卡接收广播帧。 (2)多播传送(multicastmodel):多播传送地址作为目的物理地址的帧可以被组 内的其它主机同时接收,而组外主机却接收不到。但是,如果将网卡设置为多播传 送模式,它可以接收所有的多播传送帧,而不论它是不是组内成员。 (3)直接模式(directmodel):工作在直接模式下的网卡只接收目地址是自己 mac 地址的帧。 (4)混杂模式(promiscuousm
35、odel):工作在混杂模式下的网卡接收所有的流过网 卡的帧,数据包捕获程序就是在这种模式下运行的。 2.6 基于 windows 的数据包捕获方案 l)使用原始套接字 (raw socket)机制。方法简单,但功能有限,只能捕获较高 层的数据包。在创建了原始套接字后,需要通过 setsockopt()函数来设置 ip 头操 作选项,然后再通过 bind()函数将原始套接字绑定到本地网卡。为了让原始套接字 能接受所有的数据,还需要通过 ioctlsocket()来进行设置,而且还可以指定是否 亲自处理 ip 头。至此,实际就可以开始对网络数据包进行监听了,对数据包的获取 仍象流式套接字或数据报套
36、接字那样通过 recv()函数来完成.但是与其他两种套接 字不同的是,原始套接字此时捕获到的数据包并不仅仅是单纯的数据信息,而是包 含有 ip 头、tcp 头等信息头的最原始的数据信息,这些信息保留了它在网络传输时 的原貌。通过对这些在低层传输的原始信息的分析可以得到有关网络的一些信息。 由于这些数据经过了网络层和传输层的打包,因此需要根据其附加的帧头对数据包 进行分析; 2)直接连接调用 ndis 库函数,这种方法功能非常强大,但是比较危险,很可能 导致系统崩溃和网络瘫痪; 3)使用或者自行编写中间层驱动程序,这是微软公司推荐使用的一种方法,微 软提供的 win2000 ddk 中也提供了几
37、个这样的驱动程序。在具体的实现方式上可分 为用户级和内核级两类。其中内核级主要是 tdi 捕获过滤驱动程序,ndis 中间层捕 获过滤驱动程序,ndis 捕获过滤钩子(hook)驱动程序等,它们都是利用网络驱动来 实现的。而用户级的包括 spi 接口,windows2000 包捕获过滤接口等; 4)使用第三方捕获组件或者库,比如 winpcap。此设计就是利用 winpcap 自带 的库函数实现网络数据的捕获,从而为数据包协议的分析打下基础。下面一章主要 来介绍 winpcap。 3 winpcap 研究 3.1 winpcap 简介 winpcap(windows packet captur
38、e)是 windows 平台下一个免费、公共的网络访 问软件系统,是 linux 下的 libpcap 移植到 windows 平台下实现数据包捕获而设计 的函数库,在设计 winpcap 时参照了 libpcap,使用方法也与 libpcap 相似,基于 libpcap 的程序可以很容易的移植到 windows 平台下。这个数据包捕获架构是由加 州大学和 lawrence berkeley 实验室及其投稿者联合开发的。大多数网络应用程序 访问网络是通过广泛使用的套接字。这种方法很容易实现网络数据传输,因为操作 系统负责底层的细节(比如协议栈,数据流组装等)以及提供了类似于文件读写的 函数接口
39、。 winpcap 是 bpf 模型和 libpcap 函数库在 windows 平台下捕获网络数据包和进 行网络状态分析的一种体系结构,是由一个核心的包过滤驱动程序、一个底层的动 态链接库 packet.dll 和一个高层的独立于系统的函数库 libpcap 组成。底层的包捕 获驱动程序实际上是一个协议网络驱动程序,通过对 ndis 中函数的调用提供捕获和 发送原始数据包的能力。packet.dll 是对这个 bpf 驱动程序访问的 api 接口,同时 有一套符合 libpcap 接口的函数库。 但是,winpcap 有它的不足之处,不依靠主机的诸如 tcp/ip 协议去收发数据包。 这意味
40、着它不能阻塞,不能处理同一台主机中各程序之间的通信数据。它只能“嗅 探”到物理线路上的数据报。因此它不适用于 traffic shapers,qos 调度,以及个 人防火墙。 3.2 winpcap 功能和应用 (1)开发 winpcap 这个项目的目的在于为 win32 应用程序提供访问网络底层的能 力。winpcap 为程序员提供了一套标准的网络数据包捕获接口,并且与 libpcap 兼 容,使得原来许多 linux 平台下的网络安全程序可以很快地移植到 windows 平台下: winpcap 的效率很高,它充分考虑了各种性能和效率的优化,在内核层次实现了数 据包的捕获和过滤。这是由 n
41、pf(netgroup packet filter)来实现的,npf 是 winpcape 的核心部分,它还实现了内核层次的统计功能,有利于设计网络流量的程 序。 winpcap 提供了以下的各项功能: 1)捕获原始数据包,包括在共享网络上各主机发送/接收的数据包以及相互之间 换的数据包; 2)在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉; 3)在网络上发送原始的数据报; 4)收集网络通信过程中的统计信息。 (2)winpcap 的应用非常广泛,很多不同的工具软件使用 winpcap 作为开发工具, 它特别适用于下面这几个经典领域: l) 网络与协议分析器 (networ
42、k and protocol analyzers); 2) 网络监视器 (network monitors); 3) 网络流量记录器 (traffic loggers); 4) 流量发生 (traffic generators); 5) 用户级网桥及路由 (user-level bridges and routers); 6) 网络入侵检测系统 (network intrusion detection systems (nids); 7) 网络扫描器 (network scanners); 8) 安全工具 (security tools)。 (3)特别地,大部分 windows 平台下有数据包
43、捕获功能的软件都使用了 winpcap 作为编程接口,比较著名的有:windump-网络协议分析软件;sniffit-windows 平 台下的嗅探器;arpsniffergui-国产的 windows 平台下交换网络的嗅探器; ethereal(2006 年后改称 wireshark)-是全球相当行流行的开放源代码的网络协议分 析软件。 3.3 winpcap 组成架构和相关功能 3.3.1 winpcap 的组成图和结构图: winpcap 的组成如图 1 所示。 应用程序 wpcap.dll packet.dll npf 装置 驱动程序 图 1 winpcap 组成 用 户 层 核 心
44、层 数据包 网络 winpcap 的结构如图 2 所示。 应用程序 直接调用 packet.dll 直接访问 npf 应用程序应用程序 用户缓冲区缓冲器 动态链接库 packet.dll 内核缓冲区 1 内核缓冲区 2 过滤器 1过滤器 2 其 他 协 议 栈 nic 驱动(ndis 3.0 或更高版本) 用户级 npf 过滤器 guolvqi 网络分流器 数据包 网络 内核级 网络 图 2 winpcap 结构图 3.3.2 winpcap 的各功能模块 winpcap 是由一个核心的包过滤驱动程序 npf 即网络数据包过滤器,一个底层 的动态连接库 packet.dll 和一个高层的独立于
45、系统的动态连接库 wpcap.dll 组成。 1)npf 模块,内核层的数据包过滤模块 npf(netgroup packet filter)是一个 虚拟设备驱动程序文件,它的功能是捕获和过滤数据包,同时还可以发送、存储数 据包以及对网络进行统计分析。并把这些数据包原封不动地传给用户态模块,这个 过程中包括了一些操作系统特有的代码。这个底层的包捕获驱动程序实际为一个协 议网络驱动程序。 捕获数据包是 npf 最重要的操作。在抓包的时候,网络接口驱动程序使用一个 网络接口监视着数据包,并将这些数据包完整无缺地投递给用户级应用程序。抓包 过程依赖于两个主要组件: (1)数据包过滤器,它决定着是否接
46、收进来的数据包并把数据包拷贝给监听程 序。数据包过滤器是一个有布尔输出的函数。如果函数值是 true,抓包驱动拷贝数 据包给应用程序;如果是 false,数据包将被丢弃。npf 数据包过滤器更复杂一些, 因为它不仅决定数据包是否应该被保存,而且还得决定要保存的字节数。npf 驱动 采用的过滤系统来源于 bsd packet filter(bpf)。 (2)虚拟处理器,可以执行伪汇编书写的用户级过滤程序,应用程序采用用户 定义的过滤器并使用 wpcap.dll 将它们编译进 bpf 程序。然后,应用程序使用 biocsetfioctl 写入核心态的过滤器。这样,对于每一个到来的数据包该程序都将
47、被执行,而满足条件的数据包将被接收。与传统解决方案不同,npf 不解释 (interpret)过滤器,而是执行(execute)它。由于性能的原因,在使用过滤器前, npf 提供一个 jit 编译器将它转化成本地的 80 x86 函数。当一个数据包被捕获,npf 调用这个本地函数而不是调用过滤器解释器,这使得处理过程相当快。 2)paeket.dll 动态链接库模块,为 win32 平台提供了一个较低层的编程接口, 使用它就可以调用 winpcap 函数。dll(dynamic linkable library)文件通常是一个 具有独立功能的程序模块,可以进行单独编译和测试。在运行时,只有当
48、exe 程序 确实要调用这些 dll 模块的情况下,系统才会将它们装载到内存空间中。这种方式 不仅减少了 exe 文件的大小和对内存空间的需求,而且使这些 dll 模块可以同时被 多个应用程序使用,只是增加 dll 的计数。当应用程序卸载 dll 时,计数则减少, 计数为 o 时 dll 就从内存被释放。packet.dll 也是对 bpf 驱动程序进行访问的 api 接口,同时它有一套符合 libpcap 接口的函数库。packet.dll 直接映射了内核的调 用,不同版本的 windows 系统都有自己的内核模块和用户层模块,packet.dll 用于 解决这些不同。调用 packet.d
49、ll 的程序可以运行在不同版本的 windows 平台上,而 无需重新编译。packet.dll 还包含了其他一些函数使它可以基于 winpcap 的网络数 据捕获和分析系统的研究和实现一些底层的操作,如:获取网络适配器名或动态的加 载驱动程序。packet.dll 还可以取得一些系统信息,如:主机的 mac 地址和一些硬 件计数(以太网上冲突次数等等)。paeket.dll 和 npf 都依赖于操作系统,并且由于 windows95/98 和 windowsnt/2000 之间结构的不同而在不同版本的操作系统上有所 不同。 3)wpcap.dll 动态链接库模块,也是一个动态链接库,较 pa
50、cket.dll 层次更 高,其调用是不依赖于操作系统的。它提供了更加高层、抽象的函数。它是基于 libpcap 设计的,其函数的调用和 libpcap 几乎一样,函数名称和参数的定义也一 样。但它包含了一些其它高层的函数,比如:过滤器生成器、用户定义的缓冲区和高 层特性(数据统计和构造数据包)。 实际上,程序员可以使用两类 api:一套是直接映射到内核调用的原始函数,包 含在 packet.dll 的调用中;另一套是 wpcap.dll 提供的高层函数,这些函数提供了 更加友好、功能更加强大的调用,用户也更容易掌握。一般 wpcap.dll 能自动调用 packet.dll。往往一个“高层“
51、调用会被译成几个 npf 系统调用。程序员一般使用 wpcap.dll,只有在为数不多的程序中才直接使用 packet.dll。 3.2.3 windows 下 bpf 与 ndis 依赖关系 win32 网络结构是基于 ndis 的。如前所述,捕获包进程的核心必须在内核中运 行,它必须能在协议栈处理这些包前获取这些包。 bsd 在所有协议之前执行了捕获 包系统:bpf 通过网卡驱动直接被调用,并且它需要 nic 设备驱动适应一些称为 “bpf 驱动规范”的程序。换句话说,它需要设备驱动明确的调用 bpf 网络捕获函 数,这个函数控制所有由网络接口接收发送的数据包,并复制一个满足过滤器的数 据
52、包。当创建一个 winpcap 捕获包的程序,这种解决方案是完全不可能的实现,这 是因为 windows 没有与 bpf 驱动规范相似的接口,而且 windows 也不允许对操作系 统和 nic 进行修改。所以,winpcap 将网络数据捕获设置为 ndis 结构上的协议驱动。 因为 ndis 没有将 npf 与底层完全隔离,所以它不自动支持不同类型媒体。因此必须 要创建这种方法来支持各种媒体。 3.3 winpcap 数据结构和主要功能函数 3.3.1 winpcap 的数据结构及自定义类型 由于 winpcap 的设计是基于 libpcap 的,所以它使用了与 libpcap 相同的数据
53、结构,这里介绍几个 winpcap 核心的数据结构。 (l)网络接口的地址 struct pcap_addr struct pacp_addr *next; /*指向下一个地址节点*/ struct sockaddr *addr; /*网络接口地址*/ struct sockaddr *netmask; /*掩码*/ struct sockaddr *broadaddr; /*广播地址*/ struct sockaddr *dstaddr; /*目标地址*/ (2)winpcap 存储文件类型 struct pcap_file_header bpf_u_int32 magic; /*文件类型*
54、/ u_short version_major; /*主版本号*/ u_short version_minor; /*次版本号*/ bpf_int32 thiszone; /*区域时间*/ bpf_int32 sigfigs; /*时间截*/ bpf_int32 snaplen; /*捕获长度*/ bpf_int32 linktype; /*链路层类型*/ (3)网络接口链表中的一个结点 struct pcap_if struct pacp_if *next; /*下一个网络接口节点*/ char *name; /*网络接口名称*/ char *description; /*描述信息*/ st
55、ruct pcap_addr *address; /*网络接口地址*/ bpf_u_int32 flags; /*标记*/ (4)捕获的数据包基本信息 struct pcap_pkthdr struct timevalts; /*时间截*/ bpf_u_int32 caplen; /*捕获长度*/ bpf_u_int32 len; /*数据包长度*/ (5)winpcap 的状态信息 struct pcap_stat u_int ps_recv; /*捕获到的数据包的个数*/ u_int ps_drop; /*丢失的数据包的个数*/ u_int ps_ifdrop; /*未用*/ #ifdef
56、 win32 u_int ba_capt; /*数据包到达应用层的个数*/ #endif (6)自定义类型 typedef int bpf_int32 /*32 位整数*/ typedef u_int bpf_u_int32 /*32 位无符号数*/ typedef pcap pcap_t /*一个已打开的捕捉实例的描述符*/ typedef pcap_if pcap_if_t /*接口列表的一项*/ typedef pcap_addr pcap_addr_t /*表示一个接口地址*/ 3.3.2 winpcap 主要函数 1)winpcap 的主要函数: (1)int pcap_findal
57、ldevs(); 构造一个可打开的网络设备列表 (2)int pcap_freealldevs(); 释放一个借口列表 (3)pcap_t* pcap_open_live(); 用于打开一个网络接口进行数据包捕获 (4)u_char * pcap_next(); 返回下一个可用的数据包 (5)char* pcap_lookupdev(); 功能是获得本机的网络接口 (6)int pcap_lookupnet(); 功能是获取的网络地址和掩码 (7)int pcap_dispatch()或 int pcap_loop(); 功能是(循环)获取网络数据 包 (8)void pcap_dump();
58、 用于将包内容输出到由 pcap_dump_open()打开的 文件中 (9)int pcap_datalink(); 功能是获取数据链路层类型,如 10m 以太网、 slip、ppp、fddi、atm、ieee802.3 等 (10)void pcap_close(); 功能是关闭 winpcap 关联文件操作并回收资源 4 软件系统实现过程 4.1 系统流程图 一个较为完整的基于 winpcap 的网络数据包捕获程序包括内核部分和用户分析 部分,其中内核部分负责从网络中捕获和过滤数据;用户分析部分负责界面、数据转 化与处理、格式化、协议分析等。 编程思想和流程图如图 1 所示。 打开网络设
59、备 pcap_open_live() 指定要监视 的网络设备 捕获并处理 while (pcap_next() 释放列表 pcap_freealldevs() 无指定设备 开始 结束 n y 获得设备列表 pcap_findalldevs() 图 1 系统流程图 4.2 winpcap 的安装和环境搭建 (1)下载 winpcap 及开发包 winpcap 下载地址: /install/default.htm winpcap 开发包: /devel.htm (2)安装 winpcap (3)解压 wpdpack
60、 开发包,将得到一个 wpdpack 目录,该目录中包含了 5 个子目 录:docs、examples-pcap、examples-remote、include 和 lib。 docs 中是 winpcap 的帮助文档,比较通俗易懂 examples 的是一些例子 include 和 lib 则分别为 c+项目的头文件和链接库 (4)配置 1)包含文件(include)、库文件(lib)目录路径设置 tools-options-directories,在show directories for:中选择 include files,单击下面的new图标,单击编辑框右侧进行浏览,选择 winpca
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市健身步道建设合同
- 知识管理顾问聘用合同范本
- 航空物流公司操作员聘用合同
- 城市道路改造终止施工合同
- 烟草制品采购延期付款协议
- 建筑工程工作室职员招聘协议
- 城市绿化带改造挖机租赁协议范本
- 酿酒厂散水施工合同
- 重庆市物流仓储租赁合同
- 水库建设打井工程合同
- 2024年全国青少年航天创新大赛航天知识竞赛试题
- 2024年12123交管学法减分考试题库及答案
- TSG R5002-2013 压力容器使用管理规则
- 信用卡中心委外催收 投标方案(技术方案)
- 《旅游财务管理》课件-2财务管理及其目标
- 基于ECharts的数据可视化应用
- 海洋学海上实践教学智慧树知到期末考试答案2024年
- JTJ034-2000 公路路面基层施工技术规范
- 2023年4月自考00243民事诉讼法学试题及答案
- 战场防护基本知识课件
- EPC工程总承包项目项目管理要点
评论
0/150
提交评论