网络分析技术揭秘
网络分析技术揭秘,winpcap原理前言写本书的缘由过去我一直在从事软件开发相关的工作,主要负责软件开发、软件测试及软件工程的研究。其中包括 Windows操作系统应用软件的开发, Linux操作系统应用软件与驱动程序的开发,并且还做过一些嵌入式软件开发。在这些工作中,我会协助其他开发人员、测试人员构建达到工业级标准的软件,或者帮助他们提高软件开发或测试的技术水平。期间,我们不断遇到各种各样的问题,有的可以轻松解决,有的却要绞尽脑汁才能解决。在这个过程中,我也一直在思考一个问题,那就是:软件开发人员与软件测试人员除了要对应用程序有清晰的理解外,是否还需要对支撑应胛软件运行的操作系统、共亨庠等有深入的理解?我想,可以以我亲身经历的两个案例为例来回答这个问题。案例1:嗅探软件掉包问题某自行开发的网络数据包噢探软件在对被测设备进行数据包分析时、发现有掉包现象,但被测设备运行正常。经过我们仔细分析,发现该嗅探软件的设计有如下问題:在软件架构的设计上,没有考虑在高速网络流量情况下应该釆取一定的措施来防止掉包现象。软件测试人员对该嗅探软件进行了各种优化,比如増加缓冲区的大小、降低显示的复杂度、分析代码性能瓶颈等,但效果都不明显。后来,通过对所调用的 Win Pcap庠的仟细分析,荻得以下解决方案:让 winPcap的内核驱动程序NPF实现协议过滤,而不是通过嗅探软件进行过滤,同时在内核中实现数据包的存储,而不是导入应用层后进行存储。这样可显著地降低内核空间与用户空间进行数据交互的时间耗费。该案例提醒我们,测试人员在开发测试工具时,需要对所使用的支撑软件有深入的理解,这样才能更妤地解决所遇到的实际问題。内核层的过滤与转储功能是 Win Pcap库NPF驱动程序提供的优化功能,可以缓解捕获高速网络流量的捭包问题案例2:A/转换器(模拟数字转换器)数据采集系统掉点问题某基于嵌入式Linuκ系统实现的A①转换器数据釆集系统,在对所釆集的数据进行存储时,出现掉点现象。经过仔綗调讽,我们发现采样率还不到所要求的一半时就开始岀现掉点现象了,且采样率越高掉点现象越严重由于项目组相关人员对 Linux驱动桯序的机制了解不够深入,应用层软件开发人员对软件进行的各种调优都收效甚微。相关人员曾一度怀疑这一现象是文件系统存储速度慢导致的即是硬件问題导致的,项目陷入困境。后来,在对AD转換器驱动程序进行仔鈿分析后,发现导致问题的原因是:内核缓冲机制不对,同时内核向用户层提交数据耗时。最终的解决方案是:釆用双缓冲机制,并直接在内核存储所禾集的数据。该案例提醒我们,开发人员开发软件时,需要对底层系统软件有深入的理解,这样才能有效地开发出高性能的软件。 Linux驱动程序所采用的实现机制对用户层软件性能的影响非常大。Liux针对不同的应用类型提供了多种不同的解决方案,我们需要学会选择。看了上述案例,再来回顾一下我前面提出的问题:软件开发人员与软件测试人员有必要对支撑应用软件运行的操作系统、共享库等有深入的理解吗?答案是肯定的,尤其对于从事软件系统架构设计与分析、软件故障问题定位与软件性能评测的高级开发人员与高级测试人员来说,这些都是一定要掌握的基础知识。在软件系统日益复杂的今天,浅尝辄止的人是不可能在技术上有所成就的。但是,如何进行这种有效的、深入的学习呢?尤其是对于软件行业中的“菜鸟”而言在 Linux平台下,我们可以查看几乎所有的源代码,从资源的角度来说,学习相关知识并无太大难度。但是在 Windows平台下,资源的不透明首先就阻止了你前进的脚步。计算机网络的迅速发展,使网络安全、网络性能、网络软件质量等相关问题也随之凸显。这些问题也越来越受人们的关注,并且逐渐成为网络应用所面临的严重问题。正是在这种形势下,网络分析逐渐成为一门独立的、专门的学科,而市面上目前还没有该学科的相关书籍。那么,如果把这两方面的问题进行有机的结合,这样可使读者既能深入地学习软件技能,又能全面了解网络分析专业各方面的技术,岂不是鱼肉熊掌可兼得?我经过长时间的探索发现,对 WinPcap开源库的源代码进行深入的、仔细的分析,并熟悉网络分析专业知识,可显若加快学习的步伐。本书十分重视实践性。除了使读者熟悉网络分析技术外,书中还以开源软件 WinPcap为基础具体演示了网络分析各项技术的使用方法和实现原理,方便读者学习。这样安排是希望读者跟着书本内容进行实践,能尽快将所学知识运用到实际的工作中去读者对象本书重点关注网络分析技术的使用和实现原理,并对其进行了透彻的分析,故可为想了解、使用甚至精通网络分析技术的人员提供全面的、详细的参考。本书深入地、全面地叙述了网络分析的核心技术,并以大量示例演示了相关概念,其中包括进行网络分析必要的各种软硬件基础知识,网络数据包的捕获、发送、分析、文件转储等方面的内容。因此本书适合各层次的网络分析人员使用,例如网络软件开发人员与网络软件测试人员从中可获得许多网络分析与软件设计的知识;网络安全工程师可以从中获得网络攻击者所使用技术的一些细节知识同时, WinPcap本身就是一个非常优异的开源库,对这个库的源代码的学习非常有益于提高软件设计与编码能力,所以本书也适合作为软件开发人员学习的参考用书。总而言之,如果您的工作与网络软件相关,无论是开发人员还是测试人员,我们都强烈建议您阅读本书,并希望大家都能够从本书中有所收获。所需技术基础为了更好地学习本书的内容,要求读者:口熟悉C语言。不要求能编写很棒的C代码,但是熟悉C语言的基础知识会对学习本书很有帮助。口有一些网络的基本知识。不要求熟悉网络的各个方面,但是对集线器、UDP等术语有一定的感性认识会对学习本书很有帮助。所需软、硬件环境写作本书所使用的软、硬件配置如表1与表2所示。表1所使用的软件配置软件说明Microsoft windows XP Professional sP2操作系统Microsoft visual studio2005简体中文版开发环境winPcap41.2版本的源代码本书中的所有示例Wireshark 1.0.2辅助工具表2所使用的硬件配置发送方的配置接收方的配置CPUIntel(R) Core(TM)2 Duo CPU E8400 (QIntel(R) Pentium(R)Dual CPU E2180 @2.00 GH:3.00 GHZ 2 99 GHZ2. 00 GHz内存2GBI GB〔续发送方的配置接收方的配置网卡Marvel Yukon 88E8056 PCI-E Gigabit Ethernet Realtek RTL8168/8111 PCI-E Gigabit Ethernet NICController工作方式100Mbs全双工工作方式100Mbp8全双工硬盘320GB320GB本书的组织结构为了帮助读者更好地使用本书,我对各章节的顺序进行了多次调整,以便能够让读者由浅入深地阅读。建议读者从第1章开始顺序阅读本书,当然,如果读者对某些内容已经了解,也可以根据个人情况有选择地阅读。本书涉及网络协议、 Windows内核驱动与网络协议驱动、网络分析、用户应用软件等诸多知识。为了防止大段大段的理论使读者望而却步,书中尽量从示例的演示开始讲解,只在必要的时候才插入必需的理论说明,以帮助读者理解本书的约定书中并未严格区分数据包、数据报、数据帧的定义,同时对网络分析与网络嗅探的定义也未做严格区分,读者可从上下文内容加以理解。代码及相关更新本书基于目前 WinPcap最新42版本的源代码进行分析,源代码可从官方网站hp!∥www.winpcap.org获取。本书示例代码下载地址:htp:/115com/ file/be3zm3eu,也可以发送邮件到 wInpcap@126com直接获取示例代码。本书所有示例的源代码,以及对 WinPcap源代码本身的修改仅仅是为了演示,作者并不对读者使用这些代码作任何限制,同时也不对读者使用这些代码所带来的问题与后果负任何责任其他网络分析其实包含了很广泛的内容,希望本书能起到抛砖引玉的作用。由于篇幅有限同时需要持续采用一个便于理解的主线来描述,再加上作者的知识、时间与经验有限,因此书中难免会有疏漏或者不妥之处,欢迎广大读者通过邮件进行交流,我们将尽量为您提供最满意的解答。本书专用服务邮箱是 winpcap@126com。目录前言第1章揭开网络分析的神秘面纱/11.1网络分析概述/112网络分析的主要用途/313黑客使用嗅探器的方法/414被嗅探数据的真面目/614.1使用咦探器获得FTP的用户名和密码/614.2使用咦探器分析冲击波蠕虫( Blaster Worn)/71.5常见的网络分析器/1016网络分析器的工作原理/11161以太网简介/111.6.2理解开放系统互连(OSI)樸型/1116.3了解 CSMA/CD协议/151.64P、ICMP、TCP与UDP协议/161.6.5硬件171.66欺骗交换机/197嗅探器的检测/211.71检测嗅探器的原理/211.7.2防止网络嗅探可釆取的安全措施/2218网络分析工具的主要功能组成/221.9 Wireshark的概述、安装与使用/241.9.1 Wireshark的概述/241.92 Wireshark的安装/241.93 Wireshark的使用/26VIII1.10小结/30第2章初识网络分析基础库 Win Pcap/3121 WinPcap概述/312,2 WinPcap的优点/3123 Win Pcap的使用者/3224 WinPcap的体系架构/3324.1 WinPcap的主要组成/33242数据包捕获的基本过程/3424.3 WinPcap的驱动程序/35244 Win Pcap内核驱动的主要功能/3625用户空间库接口函数/3925.1 wpcap.d库中的重要函数/39252 Packet.d库中的重要函数/422.6小结/44第3章网络分析工具的内核驱动甚础知识/4531 Windows驱动程序基础知识/453.1.1驱动对象( DRIVER OBJECT)/45312设备对象( DEVICE OBJECT)/463.13设备扩辰 C DEVICE EXTENSION)483.14IRP与派遣函数/493.1.5同步处理/5031.6内核的内存操作/55317内存操作的远行时函数/5631.8内核的注册表操作/5732NDIs协议驱动程序/63321三种类型的网络驱动程序/633.22协议驱动程序的特征结构体/643.3小结167IX第4章编译与使用 WinPcap/684.1源代码目录结构/684,2构建驱动程序NPF694.3构建 Packet d1库/7044构建 wpcap.d库/724.5安装NPF驱动程序与各库文件/734.6使用 WinPcap库进行程序开发的实例/734.7小结/83第5章 WinPcap驱动程序的初始化与清除/8451驱动程序中的初始化函数 DriverEntry/8451.1 Driver Entry函数的工作流程/845.1.2 DriverEntry函数的具体实现/8652驱动程序中的御载函数 Driverunload/10353小结/105第6章获得与释放网络适配器设备列表/10661使用 Win Pcap选择合适的适配器/10661.1 wpcap.dll库导出的相应函数/1066.12获得与释被网络适配器列表的实例/107613获取已安装设备高级信息的实例/10962获得网络适配器列表的幕后/10962.1 wpcap.dl库中获得网络适配器列表的实现/10962.2 Packet .d库中获得网络适配器列表的实现/122623内核空间中获得网络适配器列表的实现/14163释放网络适配器列表的实现/14364小结/144第7章打开与关闭适配器/14571使用 winPcap打开与关闭适配器/145711 wpcap.dl库导出的应函数/14571.2关键数据结构 pcap t/l46713打开与关闭网络适配器的实例/14772打开与关闭适配器的幕后/151721打开适配器的实现/1517.22关闭适配器的实现/20073小结/207第8章数据包的发送/20881使用 WinPcap发送数据包/20881.1 wpcap.dl库导出的桐应函数/2088.1.2数据包发送实例/2098.2数据包发送的幕后/217821发送单个数据包的实现/219822单个数据包发送多次的实现/236823发送队列方式的实现/23883小结/254第9章数据包的内核过滤/25591基础知识/2559.1.1fex和 bison简介/2559.1.2爿ine宏/2629.1.3以太网的典型帧结构/2639.14数据包过滤的原理简介/2649.1.5BPF虚拟机/2659.1.6 Tcpdump g Win Dump/26891.7BPF指令集实倒/2699.18BPF过滤器的优化研究/2709.1.9BPF系统架构/2739.2 WinPcap数据包过滤基础/2749.21数据包过滤过程/274922过滤表达式/274923蝙译过滤表达式生成过滤器的字节码/27592.4把过滤器字节码传递给内核/275
用户评论