前 言
第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.4ip、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.9wireshark的概述、安装与使用/ 24
1.9.1wireshark的概述/ 24
1.9.2wireshark的安装/ 24
1.9.3wireshark的使用/ 26
1.10小结/ 30
第2章初识网络分析基础库winpcap/ 31
2.1winpcap概述/ 31
2.2winpcap的优点/ 31
2.3winpcap的使用者/ 32
2.4winpcap的体系架构/ 33
2.4.1winpcap的主要组成/ 33
2.4.2数据包捕获的基本过程/ 34
2.4.3winpcap的驱动程序/ 35
2.4.4winpcap内核驱动的主要功能/ 36
2.5用户空间库接口函数/ 39
2.5.1wpcap.dll库中的重要函数/ 39
2.5.2packet.dll库中的重要函数/ 42
2.6小结/ 44
第3章网络分析工具的内核驱动基础知识/ 45
3.1windows驱动程序基础知识/ 45
3.1.1驱动对象(driver_object)/ 45
3.1.2设备对象(device_object)/ 46
3.1.3设备扩展(_device_extension)/ 48
3.1.4irp与派遣函数/ 49
3.1.5同步处理/ 50
3.1.6内核的内存操作/ 55
3.1.7内存操作的运行时函数/ 56
3.1.8内核的注册表操作/ 57
3.2ndis协议驱动程序/ 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.1driverentry函数的工作流程/ 84
5.1.2driverentry函数的具体实现/ 86
5.2驱动程序中的卸载函数driverunload/ 103
5.3小结/ 105
第6章获得与释放网络适配器设备列表/ 106
6.1使用winpcap选择合适的适配器/ 106
6.1.1wpcap.dll库导出的相应函数/ 106
6.1.2获得与释放网络适配器列表的实例/ 107
6.1.3获取已安装设备高级信息的实例/ 109
6.2获得网络适配器列表的幕后/ 109
6.2.1wpcap.dll库中获得网络适配器列表的实现/ 109
6.2.2packet.dll库中获得网络适配器列表的实现/ 122
6.2.3内核空间中获得网络适配器列表的实现/ 141
6.3释放网络适配器列表的实现/ 143
6.4小结/ 144
第7章打开与关闭适配器/ 145
7.1使用winpcap打开与关闭适配器/ 145
7.1.1wpcap.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.1wpcap.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.1flex和bison简介/ 255
9.1.2#line宏/ 262
9.1.3以太网的典型帧结构/ 263
9.1.4数据包过滤的原理简介/ 264
9.1.5bpf虚拟机/ 265
9.1.6tcpdump与windump / 268
9.1.7bpf指令集实例/ 269
9.1.8bpf过滤器的优化研究/ 270
9.1.9bpf系统架构/ 273
9.2winpcap数据包过滤基础/ 274
9.2.1数据包过滤过程/ 274
9.2.2过滤表达式/ 274
9.2.3编译过滤表达式生成过滤器的字节码/ 275
9.2.4把过滤器字节码传递给内核/ 275
9.3使用winpcap过滤数据包/ 275
9.3.1wpcap.dll库导出的相应函数/ 275
9.3.2使用过滤器的实例/ 276
9.4数据包过滤的幕后/ 279
9.4.1wpcap.dll库中相应函数的实现/ 279
9.4.2packet.dll库对应的函数/ 287
9.4.3驱动程序中对应的函数/ 288
9.4.4npf_tap函数的数据包过滤部分/ 297
9.5小结/ 300
第10章数据包的接收/ 301
10.1使用winpcap接收数据包/ 301
10.1.1wpcap.dll库导出的相应函数/ 301
10.1.2数据包接收的实例/ 302
10.2数据接收的幕后/ 307
10.2.1wpcap.dll库中相应函数的实现/ 308
10.2.2packet.dll库中相应函数的实现/ 314
10.2.3内核空间部分的实现/ 316
10.3小结/ 339
第11章统计网络流量与网络状态/ 340
11.1使用winpcap进行网络统计的方法/ 340
11.1.1wpcap.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.1libpcap文件存储格式/ 361
12.1.1转储文件的头信息/ 361
12.1.2每个数据包的头信息/ 363
12.2使用winpcap进行文件存储与读取/ 364
12.2.1wpcap.dll导出的相应函数/ 364
12.2.2文件存储与读取的实例/ 364
12.3数据包文件存储的幕后/ 372
12.3.1pcap_dump_open函数/ 373
12.3.2pcap_dump函数/ 375
12.3.3pcap_dump_flush函数/ 375
12.3.4pcap_dump_close函数/ 376
12.4数据包文件读取的幕后/ 376
12.5内核文件转储的实现/ 382
12.5.1wpcap.dll库中相应函数的实现/ 382
12.5.2packet.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
附录csyn洪泛攻击的详细资料/ 438
附录darp欺骗资料/ 442
参考文献/ 448
1