标题：网络扫描技术揭秘
基本信息
作者： 李瑞民    
出版社：机械工业出版社 
ISBN：9787111365327  [1]上架时间：2011-12-16
出版日期：2012 年1月
开本：16开
页码：1
版次：1-1
所属分类： 计算机
内容简介
《网络扫描技术揭秘：原理、实践与扫描器的实现》系统地介绍网络扫描器的概念、原理与设计方法，饱含作者十几年来在网络技术应用实践中不断总结的经验与技巧。作者从网络协议这样的基本概念开始，细致深入地分析了网络扫描器的原理，并用自己制作的大量工程代码，揭示了网络扫描器的实现方法与最佳实践。
《网络扫描技术揭秘：原理、实践与扫描器的实现》首先介绍了网络扫描技术的概念、原理、算法等，以及网络协议的意义与编程概述，随后系统分析了各种扫描器的原理与设计方法，包括tcp/udp端口、netbios、snmp、icmp、基于协议的服务、基于应用的服务、命名管道、服务发现、漏洞扫描器等。书中在介绍每一种扫描器的时候，都是先介绍相应协议，然后对扫描器中要使用的api函数进行详细说明，使读者知道该扫描器的各种技术细节；还介绍了windows中相关协议程序的安装、配置、测试和验证等，使读者有了演习场地；最后展示了扫描器的编程实例。这种循序渐进、逐步深入的方式，使读者不仅全面地了解扫描器的细节，而且在遇到新情况时，能举一反三，对代码进行修改或调整。随书光盘还包含了作者精心制作与调试好的工程代码，可帮助读者快速上手，设计出自己需要的扫描器。
《网络扫描技术揭秘：原理、实践与扫描器的实现》不仅是网管员和安全技术人员必备参考书，也适合于所有想深入理解计算机网络原理、全面了解网络扫描技术的学生、教师以及安全技术爱好者。
目录
《网络扫描技术揭秘：原理、实践与扫描器的实现》 
前 言 
第 1 章 绪论 / 1 
1.1 网络安全的概念 / 1 
1.2 网络扫描的概念 / 2 
1.2.1 服务和端口 / 2 
1.2.2 网络扫描 / 4 
1.3 网络扫描原理概述 / 5 
1.4 扫描编程与客户端编程的区别 / 5 
1.5 网络扫描的目的 / 5 
1.6 网络扫描算法 / 6 
1.6.1 非顺序扫描 / 6 
1.6.2 高速扫描 / 8 
1.6.3 分布式扫描 / 8 
1.6.4 服务扫描 / 8 
1.6.5 指纹识别算法 / 8 
1.6.6 漏洞扫描 / 9 
1.6.7 间接扫描 / 9 
1.6.8 秘密扫描 / 9 
1.6.9 认证扫描 / 10 
.1.6.10 代理扫描 / 10 
1.6.11 手工扫描 / 10 
1.6.12 被动扫描 / 10 
1.7 网络扫描器的分类 / 11 
1.8 网络扫描技术的发展史 / 12 
1.8.1 手工扫描阶段 / 12 
1.8.2 使用通用扫描器阶段 / 13 
1.8.3 设计专用扫描器阶段 / 14 
1.9 扫描器的限制 / 14 
1.10 当前网络常见的漏洞 / 14 
1.10.1 dos和ddos / 15 
1.10.2 缓冲区溢出 / 15 
1.10.3 注入式攻击 / 17 
1.10.4 明文传输 / 17 
1.10.5 简单密码 / 18 
第 2 章 网络协议和网络编程例程 / 19 
2.1 常用的网络编程 / 19 
2.1.1 tcp/ip协议编程 / 20 
2.1.2 netbios/netbeui协议编程 / 41 
2.1.3 win inet高层编程 / 47 
2.1.4 命名管道和邮槽高层编程 / 48 
2.2 扫描器中公用编程示例 / 49 
2.2.1 ctreectrl控件的应用 / 49 
2.2.2 clistctrl控件的应用 / 51 
2.2.3 ini文件的操作 / 53 
2.2.4 数据库ado的简单应用 / 56 
2.2.5 ip格式的互换 / 59 
2.2.6 windows操作系统类型的判断 / 62 
2.2.7 多线程的局限性和使用方式 / 63 
2.2.8 vc++下windows socket的使用 / 66 
2.2.9 网卡的混杂模式 / 69 
2.3 嵌入外部程序 / 71 
2.3.1 可执行外部程序的几个函数 / 71 
2.3.2 编程实例：使用重定向接收外部程序运行结果 / 76 
2.3.3 编程实例：使用管道接收外部程序运行结果 / 80 
第 3 章 tcp/udp端口扫描器的设计 / 85 
3.1 端口扫描的概念 / 85 
3.1.1 端口的概念 / 85 
3.1.2 端口扫描原理 / 87 
3.2 端口扫描技术 / 87 
3.2.1 网络通信实例分析 / 87 
3.2.2 tcp扫描 / 90 
3.2.3 udp扫描 / 92 
3.3 手工扫描 / 93 
3.3.1 检测单主机单端口开与否 / 93 
3.3.2 检测单主机单端口是否有相应服务 / 94 
3.3.3 检测多主机或多端口 / 95 
3.4 编程实例：tcp端口扫描器 / 98 
3.4.1 程序主界面 / 99 
3.4.2 程序代码 / 100 
3.5 编程实例：udp端口扫描器 / 112 
3.5.1 程序主界面 / 112 
3.5.2 程序代码 / 113 
第 4 章 netbios扫描器的设计 / 120 
4.1 netbios协议的使用 / 120 
4.1.1 查看和修改netbios配置 / 120 
4.1.2 查看netbios配置的命令 / 122 
4.2 ip和主机名的互换 / 127 
4.2.1 主机名转ip地址 / 127 
4.2.2 ip地址转主机名 / 127 
4.3 mac地址的读取 / 128 
4.4 本地域名、子网掩码、网卡类型的读取 / 129 
4.5 用户名、共享目录、组列表的读取 / 134 
4.5.1 unicode编程与ansi之间的互换 / 134 
4.5.2 用户名列表的读取 / 137 
4.5.3 共享目录的读取 / 150 
4.5.4 组列表的读取 / 156 
4.5.5 远端主机时间的读取 / 159 
4.5.6 远端服务支持类型的读取 / 161 
4.5.7 主机信息的读取 / 163 
4.6 netbios的安全性 / 166 
4.7 编程实例：反“ip欺骗”—mac地址扫描器的设计 / 169 
4.7.1 反“ip欺骗”的原理 / 169 
4.7.2 mac地址扫描器的主界面 / 170 
4.7.3 程序代码 / 170 
4.8 编程实例：netbios的通用扫描器 / 176 
4.8.1 程序主界面 / 176 
4.8.2 程序代码 / 177 
第 5 章 snmp扫描器的设计 / 186 
5.1 snmp协议 / 186 
5.1.1 管理信息结构 / 187 
5.1.2 管理信息库 / 187 
5.1.3 通信协议 / 191 
5.2 snmp的api / 193 
5.2.1 数据类型和常用结构 / 194 
5.2.2 管理程序api / 197 
5.3 snmp安装和验证 / 204 
5.4 编程实例：snmp通用读设工具 / 207 
5.4.1 程序主界面 / 208 
5.4.2 程序代码 / 209 
5.5 编程实例：基于snmp的主机扫描器 / 213 
5.5.1 程序主界面 / 214 
5.5.2 程序代码 / 214 
第 6 章 icmp扫描器的设计 / 221 
6.1 icmp协议简介 / 222 
6.2 ping与tracert命令简介 / 222 
6.2.1 ping程序使用 / 222 
6.2.2 tracert程序使用 / 224 
6.3 icmp通信实例分析 / 226 
6.4 icmp协议内容 / 227 
6.4.1 目的不可达消息 / 227 
6.4.2 超时消息 / 228 
6.4.3 参数问题消息 / 229 
6.4.4 源拥塞消息 / 229 
6.4.5 重定向消息 / 230 
6.4.6 回送请求或回送响应消息 / 231 
6.4.7 时间戳请求和时间戳响应消息 / 231 
6.4.8 信息请求或信息响应消息 / 232 
6.5 icmp扫描的安全性 / 233 
6.6 编程实例：快速多ip的icmp扫描器 / 234 
6.6.1 程序主界面 / 234 
6.6.2 程序原理 / 237 
6.6.3 程序代码 / 238 
第 7 章 基于协议的服务扫描器的设计 / 250 
7.1 www服务扫描 / 251 
7.1.1 www服务器架构 / 251 
7.1.2 协议消息格式 / 254 
7.1.3 www服务器的安装与配置 / 260 
7.2 编程实例：www服务扫描器 / 264 
7.2.1 扫描原理 / 265 
7.2.2 程序主界面 / 266 
7.2.3 程序代码 / 266 
7.3 ftp服务扫描 / 272 
7.3.1 ftp简介 / 272 
7.3.2 ftp服务器的安装与配置 / 274 
7.4 编程实例：ftp服务扫描器 / 278 
7.4.1 程序主界面 / 278 
7.4.2 程序代码 / 278 
7.5 telnet服务扫描 / 281 
7.5.1 telnet协议简介 / 281 
7.5.2 telnet的安装与配置 / 284 
7.6 编程实例：telnet服务扫描器 / 286 
7.6.1 程序主界面 / 287 
7.6.2 程序代码 / 287 
7.7 email服务扫描 / 291 
7.7.1 电子邮件协议简介 / 291 
7.7.2 电子邮件服务器的安装与配置 / 299 
7.8 编程实例：email服务扫描器 / 306 
7.8.1 程序主界面 / 306 
7.8.2 程序代码 / 307 
第 8 章 基于应用的服务扫描器的设计 / 314 
8.1 win inet编程接口 / 314 
8.1.1 cinternetsession类 / 315 
8.1.2 cinternetconnection类 / 322 
8.1.3 chttpconnection类 / 323 
8.1.4 cftpconnection类 / 324 
8.1.5 cinternetfile类 / 237 
8.1.6 cinternetexception类 / 329 
8.2 编程实例：基于应用的www服务扫描器 / 329 
8.3 编程实例：基于应用的ftp服务扫描器 / 330 
8.4 网络资源协议 / 332 
8.4.1 netresource结构 / 332 
8.4.2 wnetopenenum函数 / 333 
8.4.3 wnetenumresource函数 / 334 
8.4.4 wnetcloseenum函数 / 335 
8.5 编程实例：网络资源扫描器 / 336 
8.5.1 程序主界面 / 336 
8.5.2 程序代码 / 337 
第 9 章 命名管道扫描器的设计 / 341 
9.1 命名管道 / 341 
9.2 命名管道api / 342 
9.2.1 命名管道的unc格式 / 342 
9.2.2 命名管道编程的api / 342 
9.3 命名管道编程示例 / 349 
9.3.1 命名管道服务器端 / 349 
9.3.2 命名管道客户端 / 350 
9.4 邮槽 / 352 
9.4.1 邮槽的unc格式 / 352 
9.4.2 邮槽编程的api / 352 
9.5 邮槽编程示例 / 354 
9.5.1 邮槽服务器端编程 / 354 
9.5.2 邮槽客户端编程 / 355 
9.6 编程实例：sql server命名管道扫描器的设计 / 356 
9.6.1 microsoft sql server 
简介 / 356 
9.6.2 程序主界面 / 359 
9.6.3 程序代码 / 360 
第10章 服务发现扫描器的设计 / 364 
10.1 服务发现简介 / 364 
10.2 upnp协议 / 365 
10.2.1 寻址 / 367 
10.2.2 发现 / 367 
10.2.3 描述 / 368 
10.2.4 控制 / 369 
10.2.5 事件 / 369 
10.2.6 展示 / 370 
10.3 xml协议 / 371 
10.4 ssdp协议分析实例 / 373 
10.4.1 设备类型 / 374 
10.4.2 协议消息格式 / 377 
10.5 编程实例：服务发现扫描器 / 381 
10.5.1 程序主界面 / 382 
10.5.2 程序代码 / 383 
第11章 漏洞扫描器的设计 / 395 
11.1 注入式漏洞扫描器 / 395 
11.1.1 sql注入式攻击原理 / 396 
11.1.2 注入式攻击的局限性 / 398 
11.1.3 单机模式或c/s模式的攻击 / 398 
11.1.4 b/s模式下扫描程序设计 / 401 
11.2 主机弱密码扫描 / 412 
11.2.1 网络连接的api / 412 
11.2.2 密码穷举分析 / 416 
11.2.3 程序主界面 / 418 
11.2.4 程序代码 / 419 
11.3 dos/ddos攻击 / 425 
11.3.1 程序主界面 / 427 
11.3.2 程序代码 / 427 
11.4 明文密码嗅探 / 432 
11.4.1 程序主界面 / 433 
11.4.2 程序代码 / 434 
11.5 端口对照 / 443 
11.5.1 程序主界面 / 443 
11.5.2 程序代码 / 445 
第12章 扫描防范技术的研究 / 451 
12.1 更换端口 / 452 
12.2 预留陷阱技术 / 453 
12.3 基于哨兵的端口扫描监测 / 454 
12.3.1 程序主界面 / 455 
12.3.2 程序代码 / 456 
12.4 基于嗅探的端口扫描监测及ddos拒绝服务监测 / 460 
12.4.1 程序主界面 / 461 
12.4.2 程序代码 / 462 
12.5 实时监测本地所有tcp/udp连接及端口 / 467 
12.5.1 程序主界面 / 467 
12.5.2 结构与函数api / 468 
12.5.3 程序代码 / 471 
12.6 如何关闭端口 / 478 
12.6.1 ftp端口 / 478 
12.6.2 www端口 / 480 
12.6.3 telnet端口 / 480 
12.6.4 netbios端口 / 481 
附录a 本书容易混淆概念解析 / 482 
附录b windows socket错误返回码 / 486 
附录c win inet错误返回码 / 491 
附录d http错误返回码 / 493 
参考文献 / 498 
后记 / 499
前言
计算机网络的普及，使人们越来越关注网络的安全。而网络安全又取决于网络管理员和网络用户对网络的了解，这种了解不仅包括如何使用网络应用程序，还包括网络的配置甚至网络的技术细节。 
网络中，协议是任意两台主机之间进行通信的前提和始终贯彻的原则。因此本书首先在第1章中对网络扫描的概念、原理、目的、算法、历史进行了综述，然后在第2章着眼于现在网络，特别是互联网中网络协议的意义，以及如何通过协议进行编程，由浅入深，逐步分析了网络协议的各项技术细节。 
网络服务是一台主机对外开放的最终目的，而端口又是服务的对外窗口。因此以前很多人对网络扫描的理解就是端口扫描。端口直接与服务对应的关系，使得端口越来越成为人们关注的目标，打开一种服务就意味着打开了一个或几个端口，同时也打开了一扇“大门”，因此在第3章中，对端口扫描进行了全面详细的论述。 
协议不同，对端口的扫描也不同，因此在随后的第4、5、6章中，分别介绍了基于NetBIOS、SNMP、ICMP扫描的协议、原理、扫描器实现方法等细节。 
网络服务必然存在端口，但由于端口本身不具有强制性，所以即使扫描到端口，也不意味着必然对应某一服务，因此端口扫描只能作为初判，服务扫描才是真正判断对方是否提供某服务的最终方式。在第7章中，详细地介绍了完全基于服务的扫描方式，主要有WWW服务、FTP服务、Telnet服务、E-mail服务等应用层服务。这些服务极具扫描的普遍性，可以说，有了针对这些服务的扫描器设计框架和设计思路，任何一个新协议、新服务都可以用此方法做出相应的扫描器。在第8章中，介绍了另一种基于应用的扫描方式，在这里，除了WWW服务、FTP服务之外，还包括了对网络资源的扫描。这种扫描由于使用了应用层的API，所以程序简捷、透明性强，但对底层的控制不多。 
在第9、10两章中，介绍了几种特殊应用领域的扫描方式：命名管道扫描器和服务发现扫描器。这两种扫描器是较新的技术，并且可以使网络扫描从仅限于安全领域内的应用，转换到生活领域内的应用。 
第11章的漏洞扫描器则是对网络中存在的漏洞进行扫描，从而发现漏洞以及漏洞的位置。这种扫描方式具有很大的实用性，但这类漏洞扫描器的编制有一定的难度，且具有较强的时效性。 
第12章介绍扫描防范技术，通过这些技术，可以检测或防止别人对主机本身或网络进行扫描。 
为了统一形式，书中在介绍各扫描器时都先介绍协议，使读者对该协议有个初步的了解。然后对其API，特别是扫描器中要使用的API函数进行详细介绍，使读者知道该扫描器要实现的各种技术细节。再针对Windows中该协议程序的安装、配置、测试和验证进行详述，使读者有演习场地。最后是扫描器的编程实例。采用这种循序渐进、逐步深入的方式，读者不仅能深入全面地了解扫描器细节，也能在遇到新情况时举一反三，对代码进行修改或调整。 
在全书的组织上，虽然按技术人为地分了很多章，但实际上各章内容则是你中有我，我中有你，相互解释，相互引用，建议读者先读第1、2章，第3～10章则可以按需要酌情选读，最后再看第11、12章。 
纵观这些扫描器系统及扫描监测、防护系统，无论是“攻”，还是“防”，都不取决于程序的设计程度，而是取决于使用程序的人。对于黑客，会利用攻方系统刺探、入侵别人的系统，用防方系统保护自己不被发现或刺探；而对于网络普通用户或网络管理员，则要通过攻方系统扫描自身缺点，防患于未然，同时利用防方系统及时发现别人的扫描操作。再安全的系统，都有漏洞，再全面的技术，都有不足，真正的网络安全，需要丰富的安全常识和强烈的安全意识。 
全书中的说明和编程实例均以Microsoft Windows XP（SP3）作为默认的操作系统、以Microsoft Visual C++ 6.0（SP6）作为默认的开发环境。 
本书附带光盘，内容包括本书所有程序的源码工程文件，以及个别程序所需的必要支持文件。 
声明 
本书、光盘所有例程，其源码部分版权归本书作者。本书、光盘的源码、可执行文件（包括由例程编译生成的可执行文件）不得用于以下目的： 
>> 商业销售。 
>> 网站下载。 
>> 攻击任意对方未授权的网站。