第1章 揭开网络分析的神秘面纱 1
1.1 网络分析概述 1
1.2 网络分析的主要用途 3
1.3 黑客使用嗅探器的方法 4
1.4 被嗅探数据的真面目 6
1.4.1 使用嗅探器获得FTP的用户名和密码 6
1.4.2 使用嗅探器分析冲击波蠕虫(Blaster Worm) 7
1.5 常见的网络分析器 10
1.6 网络分析器的工作原理 11
1.6.1 以太网简介 11
1.6.2 理解开放系统互连(OSI)模型 11
1.6.3 了解CSMA/CD协议 15
1.6.4 IP、ICMP、TCP与UDP协议 16
1.6.5 硬件 17
1.6.6 欺骗交换机 19
1.7 嗅探器的检测 21
1.7.1 检测嗅探器的原理 21
1.7.2 防止网络嗅探可采取的安全措施 22
1.8 网络分析工具的主要功能组成 22
1.9 Wireshark的概述、安装与使用 24
1.9.1 Wireshark的概述 24
1.9.2 Wireshark的安装 24
1.9.3 Wireshark的使用 26
1.10 小结 30
第2章 初识网络分析基础库WinPcap 31
2.1 WinPcap概述 31
2.2 WinPcap的优点 31
2.3 WinPcap的使用者 32
2.4 WinPcap的体系架构 33
2.4.1 WinPcap的主要组成 33
2.4.2 数据包捕获的基本过程 34
2.4.3 WinPcap的驱动程序 35
2.4.4 WinPcap内核驱动的主要功能 36
2.5 用户空间库接口函数 39
2.5.1 wpcap.dll库中的重要函数 39
2.5.2 Packet.dll库中的重要函数 42
2.6 小结 44
第3章 网络分析工具的内核驱动基础知识 45
3.1 Windows驱动程序基础知识 45
3.1.1 驱动对象(DRIVER_OBJECT) 45
3.1.2 设备对象(DEVICE_OBJECT) 46
3.1.3 设备扩展(_DEVICE_EXTENSION) 48
3.1.4 IRP与派遣函数 49
3.1.5 同步处理 50
3.1.6 内核的内存操作 55
3.1.7 内存操作的运行时函数 56
3.1.8 内核的注册表操作 57
3.2 NDIS协议驱动程序 63
3.2.1 三种类型的网络驱动程序 63
3.2.2 协议驱动程序的特征结构体 64
3.3 小结 67
第4章 编译与使用WinPcap 68
4.1 源代码目录结构 68
4.2 构建驱动程序NPF 69
4.3 构建Packet.dll库 70
4.4 构建wpcap.dll库 72
4.5 安装NPF驱动程序与各库文件 73
4.6 使用WinPcap库进行程序开发的实例 73
4.7 小结 83
第5章 WinPcap驱动程序的初始化与清除 84
5.1 驱动程序中的初始化函数DriverEntry 84
5.1.1 DriverEntry函数的工作流程 84
5.1.2 DriverEntry函数的具体实现 86
5.2 驱动程序中的卸载函数DriverUnload 103
5.3 小结 105
第6章 获得与释放网络适配器设备列表 106
6.1 使用WinPcap选择合适的适配器 106
6.1.1 wpcap.dll库导出的相应函数 106
6.1.2 获得与释放网络适配器列表的实例 107
6.1.3 获取已安装设备高级信息的实例 109
6.2 获得网络适配器列表的幕后 109
6.2.1 wpcap.dll库中获得网络适配器列表的实现 109
6.2.2 Packet.dll库中获得网络适配器列表的实现 122
6.2.3 内核空间中获得网络适配器列表的实现 141
6.3 释放网络适配器列表的实现 143
6.4 小结 144
第7章 打开与关闭适配器 145
7.1 使用WinPcap打开与关闭适配器 145
7.1.1 wpcap.dll库导出的相应函数 145
7.1.2 关键数据结构pcap_t 146
7.1.3 打开与关闭网络适配器的实例 147
7.2 打开与关闭适配器的幕后 151
7.2.1 打开适配器的实现 151
7.2.2 关闭适配器的实现 200
7.3 小结 207
第8章 数据包的发送 208
8.1 使用WinPcap发送数据包 208
8.1.1 wpcap.dll库导出的相应函数 208
8.1.2 数据包发送实例 209
8.2 数据包发送的幕后 217
8.2.1 发送单个数据包的实现 219
8.2.2 单个数据包发送多次的实现 236
8.2.3 发送队列方式的实现 238
8.3 小结 254
第9章 数据包的内核过滤 255
9.1 基础知识 255
9.1.1 flex和bison简介 255
9.1.2 #line宏 262
9.1.3 以太网的典型帧结构 263
9.1.4 数据包过滤的原理简介 264
9.1.5 BPF虚拟机 265
9.1.6 Tcpdump与WinDump 268
9.1.7 BPF指令集实例 269
9.1.8 BPF过滤器的优化研究 270
9.1.9 BPF系统架构 273
9.2 WinPcap数据包过滤基础 274
9.2.1 数据包过滤过程 274
9.2.2 过滤表达式 274
9.2.3 编译过滤表达式生成过滤器的字节码 275
9.2.4 把过滤器字节码传递给内核 275
9.3 使用WinPcap过滤数据包 275
9.3.1 wpcap.dll库导出的相应函数 275
9.3.2 使用过滤器的实例 276
9.4 数据包过滤的幕后 279
9.4.1 wpcap.dll库中相应函数的实现 279
9.4.2 Packet.dll库对应的函数 287
9.4.3 驱动程序中对应的函数 288
9.4.4 NPF_tap函数的数据包过滤部分 297
9.5 小结 300
第10章 数据包的接收 301
10.1 使用WinPcap接收数据包 301
10.1.1 wpcap.dll库导出的相应函数 301
10.1.2 数据包接收的实例 302
10.2 数据接收的幕后 307
10.2.1 wpcap.dll库中相应函数的实现 308
10.2.2 Packet.dll库中相应函数的实现 314
10.2.3 内核空间部分的实现 316
10.3 小结 339
第11章 统计网络流量与网络状态 340
11.1 使用WinPcap进行网络统计的方法 340
11.1.1 wpcap.dll库导出的相应函数 340
11.1.2 统计实例 341
11.2 网络统计的幕后 346
11.2.1 工作模式 346
11.2.2 模式设置函数 347
11.2.3 网络流量统计的实现 350
11.2.4 网络状态统计的实现 354
11.3 小结 360
第12章 文件的存储与读取 361
12.1 libpcap文件存储格式 361
12.1.1 转储文件的头信息 361
12.1.2 每个数据包的头信息 363
12.2 使用WinPcap进行文件存储与读取 364
12.2.1 wpcap.dll导出的相应函数 364
12.2.2 文件存储与读取的实例 364
12.3 数据包文件存储的幕后 372
12.3.1 pcap_dump_open函数 373
12.3.2 pcap_dump函数 375
12.3.3 pcap_dump_flush函数 375
12.3.4 pcap_dump_close函数 376
12.4 数据包文件读取的幕后 376
12.5 内核文件转储的实现 382
12.5.1 wpcap.dll库中相应函数的实现 382
12.5.2 Packet.dll库中相应函数的实现 384
12.5.3 驱动程序中对应的函数 387
12.6 小结 389
第13章 修改源代码 390
13.1 给wpcap.dll增加设置重复发送次数的函数 390
13.1.1 修改步骤 390
13.1.2 测试结果 391
13.2 修改WinPcap的内核驱动代码 392
13.2.1 支持内核转储功能 392
13.2.2 测试内核统计与转储模式 406
13.2.3 支持大量数据包的转储 410
13.2.4 内核驱动程序修改后的源文件 411
13.3 小结 411
第14章 性能测试与分析 412
14.1 测试环境 412
14.2 测试实例 413
14.2.1 不同发送方式的比较 413
14.2.2 发送不同数据包长度的比较 420
14.2.3 不同接收方式的比较 423
14.3 小结 430
附录A 源语法规范 431
附录B 过滤表达式规范 433
附录C SYN洪泛攻击的详细资料 438
附录D ARP欺骗资料 442
参考文献 448