作品简介

《网络扫描技术揭秘:原理、实践与扫描器的实现》系统地介绍网络扫描器的概念、原理与设计方法,饱含作者十几年来在网络技术应用实践中不断总结的经验与技巧。作者从网络协议这样的基本概念开始,细致深入地分析了网络扫描器的原理,并用自己制作的大量工程代码,揭示了网络扫描器的实现方法与最佳实践。

《网络扫描技术揭秘:原理、实践与扫描器的实现》首先介绍了网络扫描技术的概念、原理、算法等,以及网络协议的意义与编程概述,随后系统分析了各种扫描器的原理与设计方法,包括TCP/UDP端口、NetBIOS、SNMP、ICMP、基于协议的服务、基于应用的服务、命名管道、服务发现、漏洞扫描器等。书中在介绍每一种扫描器的时候,都是先介绍相应协议,然后对扫描器中要使用的API函数进行详细说明,使读者知道该扫描器的各种技术细节;还介绍了Windows中相关协议程序的安装、配置、测试和验证等,使读者有了演习场地;最后展示了扫描器的编程实例。这种循序渐进、逐步深入的方式,使读者不仅全面地了解扫描器的细节,而且在遇到新情况时,能举一反三,对代码进行修改或调整。随书光盘还包含了作者精心制作与调试好的工程代码,可帮助读者快速上手,设计出自己需要的扫描器。

《网络扫描技术揭秘:原理、实践与扫描器的实现》不仅是网管员和安全技术人员必备参考书,也适合于所有想深入理解计算机网络原理、全面了解网络扫描技术的学生、教师以及安全技术爱好者。

李瑞民 工学博士,资深网络安全专家兼高级系统架构师,多年来一直专注于计算机安全技术、网络设备与信号监控等领域的研究与应用。对网络扫描技术以及串口监控、网口监控等设备类监控技术有深刻的认识,并在实践中总结出了串口通信中的嗅探技术以及通用串口协议语法。曾参与多个网络应用软件项目的研发,涉及网络安全、广播电视、通信等多个行业。曾发表论文二十余篇,拥有专利和著作权六项。此外,还积极倡导和推动开源事业,将自己精心编写的扫描器代码全部开源,旨在推动我国软件事业的发展。

作品目录

  • 网络扫描技术揭秘:原理、实践与扫描器的实现
  • 前言
  • 声明
  • 第1章 绪论
  • 1.1 网络安全的概念
  • 1.2 网络扫描的概念
  • 1.2.1 服务和端口
  • 1.2.2 网络扫描
  • 1.3 网络扫描原理概述
  • 1.4 扫描编程与客户端编程的区别
  • 1.5 网络扫描的目的
  • 1.6 网络扫描算法
  • 1.6.1 非顺序扫描
  • 1.6.2 高速扫描
  • 1.6.3 分布式扫描
  • 1.6.4 服务扫描
  • 1.6.5 指纹识别算法
  • 1.6.6 漏洞扫描
  • 1.6.7 间接扫描
  • 1.6.8 秘密扫描
  • 1.6.9 认证扫描
  • 1.6.10 代理扫描
  • 1.6.11 手工扫描
  • 1.6.12 被动扫描
  • 1.7 网络扫描器的分类
  • 1.8 网络扫描技术的发展史
  • 1.8.1 手工扫描阶段
  • 1.8.2 使用通用扫描器阶段
  • 1.8.3 设计专用扫描器阶段
  • 1.9 扫描器的限制
  • 1.10 当前网络常见的漏洞
  • 1.10.1 DOS和DDOS
  • 1.10.2 缓冲区溢出
  • 1.10.3 注入式攻击
  • 1.10.4 明文传输
  • 1.10.5 简单密码
  • 第2章 网络协议和网络编程例程
  • 2.1 常用的网络编程
  • 2.1.1 TCP/IP协议编程
  • 2.1.1.1 几个重要的概念
  • 2.1.1.2 Windows Socket结构
  • 2.1.1.3 Windows socket转换类函数
  • 2.1.1.4 Windows Socket通信类函数
  • 2.1.1.5 原始套接字
  • 2.1.2 NetBIOS/NetBEUI协议编程
  • 2.1.2.1 NetBIOS开发简介
  • 2.1.2.2 NetBIOS的调用
  • 2.1.3 Win Inet高层编程
  • 2.1.4 命名管道和邮槽高层编程
  • 2.2 扫描器中公用编程示例
  • 2.2.1 CTreeCtrl控件的应用
  • 2.2.2 CListCtrl控件的应用
  • 2.2.3 INI文件的操作
  • 2.2.4 数据库ADO的简单应用
  • 2.2.4.1 ADO初始化
  • 2.2.4.2 建立数据库连接
  • 2.2.4.3 进行数据读写
  • 2.2.5 IP格式的互换
  • 2.2.6 Windows操作系统类型的判断
  • 2.2.7 多线程的局限性和使用方式
  • 2.2.8 VC++下Windows Socket的使用
  • 2.2.8.1 CSocket的应用
  • 2.2.8.2 Socket2的应用
  • 2.2.8.3 CSocket和Socket2同时使用
  • 2.2.9 网卡的混杂模式
  • 2.2.9.1 混杂模式简介
  • 2.2.9.2 混杂模式的意义
  • 2.3 嵌入外部程序
  • 2.3.1 可执行外部程序的几个函数
  • 2.3.1.1 调用system函数
  • 2.3.1.2 调用WinExec函数
  • 2.3.1.3 调用ShellExecute函数和ShellExecuteEx函数
  • 2.3.1.4 调用CreateProcess函数
  • 2.3.2 编程实例:使用重定向接收外部程序运行结果
  • 2.3.2.1 重定向技术
  • 2.3.2.2 程序主界面
  • 2.3.2.3 程序原理
  • 2.3.2.4 程序代码
  • 2.3.3 编程实例:使用管道接收外部程序运行结果
  • 2.3.3.1 管道技术
  • 2.3.3.2 程序主界面
  • 2.3.3.3 程序代码
  • 第3章 TCP/UDP端口扫描器的设计
  • 3.1 端口扫描的概念
  • 3.1.1 端口的概念
  • 3.1.2 端口扫描原理
  • 3.2 端口扫描技术
  • 3.2.1 网络通信实例分析
  • 3.2.1.1 IP包头数据格式
  • 3.2.1.2 TCP包头数据格式及通信实例
  • 3.2.1.3 UDP包头数据格式及通信实例
  • 3.2.2 TCP扫描
  • 3.2.2.1 TCP connect扫描
  • 3.2.2.2 TCP SYN扫描
  • 3.2.2.3 TCP ACK扫描
  • 3.2.2.4 TCP NULL扫描
  • 3.2.2.5 TCP FIN+URG+PSH扫描
  • 3.2.2.6 TCP FIN扫描
  • 3.2.2.7 TCP反向Ident扫描
  • 3.2.3 UDP扫描
  • 3.2.3.1 普通UDP扫描
  • 3.2.3.2 UDP recvfrom和write扫描
  • 3.2.3.3 高级UDP扫描技术
  • 3.3 手工扫描
  • 3.3.1 检测单主机单端口开与否
  • 3.3.2 检测单主机单端口是否有相应服务
  • 3.3.2.1 端口21
  • 3.3.2.2 端口23
  • 3.3.2.3 端口80
  • 3.3.2.4 端口137、138、139、445
  • 3.3.3 检测多主机或多端口
  • 3.3.3.1 扫描本机正在使用的端口
  • 3.3.3.2 扫描一段主机的特定端口
  • 3.3.3.3 扫描某一指定主机的一段端口
  • 3.3.3.4 扫描一个网段的所有端口
  • 3.4 编程实例:TCP端口扫描器
  • 3.4.1 程序主界面
  • 3.4.2 程序代码
  • 3.4.2.1 CSocket的connect扫描
  • 3.4.2.2 Socket2的connect扫描
  • 3.4.2.3 TCP SYN扫描
  • 3.5 编程实例:UDP端口扫描器
  • 3.5.1 程序主界面
  • 3.5.2 程序代码
  • 第4章 NetBIOS扫描器的设计
  • 4.1 NetBIOS协议的使用
  • 4.1.1 查看和修改NetBIOS配置
  • 4.1.2 查看NetBIOS配置的命令
  • 4.2 IP和主机名的互换
  • 4.2.1 主机名转IP地址
  • 4.2.2 IP地址转主机名
  • 4.3 MAC地址的读取
  • 4.4 本地域名、子网掩码、网卡类型的读取
  • 4.5 用户名、共享目录、组列表的读取
  • 4.5.1 Unicode编程与ANSI之间的互换
  • 4.5.1.1 MultiByteToWideChar函数
  • 4.5.1.2 WideCharToMultiByte函数
  • 4.5.2 用户名列表的读取
  • 4.5.2.1 USER_INFO_0结构
  • 4.5.2.2 USER_INFO_1结构
  • 4.5.2.3 USER_INFO_2结构
  • 4.5.2.4 USER_INFO_3结构
  • 4.5.2.5 USER_INFO_10结构
  • 4.5.2.6 USER_INFO_11结构
  • 4.5.2.7 USER_INFO_20结构
  • 4.5.2.8 PBYTE结构与实际日期的换算公式
  • 4.5.2.9 NetUserEnum函数使用注意事项
  • 4.5.3 共享目录的读取
  • 4.5.3.1 SHARE_INFO_0结构
  • 4.5.3.2 SHARE_INFO_1结构
  • 4.5.3.3 SHARE_INFO_2结构
  • 4.5.3.4 SHARE_INFO_502结构
  • 4.5.3.5 share_info_1结构
  • 4.5.3.6 share_info_50结构
  • 4.5.4 组列表的读取
  • 4.5.4.1 GROUP_INFO_0结构
  • 4.5.4.2 GROUP_INFO_1结构
  • 4.5.4.3 GROUP_INFO_2结构
  • 4.5.5 远端主机时间的读取
  • 4.5.6 远端服务支持类型的读取
  • 4.5.7 主机信息的读取
  • 4.5.7.1 NET_DISPLAY_USER结构
  • 4.5.7.2 NET_DISPLAY_MACHINE结构
  • 4.5.7.3 NET_DISPLAY_GROUP结构
  • 4.6 NetBIOS的安全性
  • 4.7 编程实例:反“IP欺骗”——MAC地址扫描器的设计
  • 4.7.1 反“IP欺骗”的原理
  • 4.7.2 MAC地址扫描器的主界面
  • 4.7.3 程序代码
  • 4.8 编程实例:NetBIOS的通用扫描器
  • 4.8.1 程序主界面
  • 4.8.2 程序代码
  • 第5章 SNMP扫描器的设计
  • 5.1 SNMP协议
  • 5.1.1 管理信息结构
  • 5.1.2 管理信息库
  • 5.1.2.1 MIB树
  • 5.1.2.2 MIB对象
  • 5.1.2.3 OID值
  • 5.1.2.4 OID全局图
  • 5.1.3 通信协议
  • 5.1.3.1 命令
  • 5.1.3.2 共同体(community)
  • 5.1.3.3 SNMP版本
  • 5.2 SNMP的API
  • 5.2.1 数据类型和常用结构
  • 5.2.1.1 数据类型
  • 5.2.1.2 AsnAny结构
  • 5.2.1.3 RFC1157VarBind结构
  • 5.2.1.4 RFC1157VarBindList结构
  • 5.2.2 管理程序API
  • 5.2.2.1 SnmpMgrOpen函数
  • 5.2.2.2 SnmpMgrClose函数
  • 5.2.2.3 SnmpMgrRequest函数
  • 5.2.2.4 SnmpMgrStrToOid函数
  • 5.2.2.5 SnmpMgrOidToStr函数
  • 5.2.2.6 SnmpMgrTrapListen函数
  • 5.2.2.7 SnmpMgrGetTrap函数
  • 5.2.2.8 SnmpUtilOidCpy函数
  • 5.2.2.9 SnmpUtilOidAppend函数
  • 5.2.2.10 SnmpUtilOidNCmp函数
  • 5.2.2.11 SnmpUtilOidCmp函数
  • 5.2.2.12 SnmpUtilOidFree函数
  • 5.2.2.13 SnmpUtilVarBindListCpy函数
  • 5.2.2.14 SnmpUtilVarBindCpy函数
  • 5.2.2.15 SnmpUtilVarBindListFree函数
  • 5.2.2.16 SnmpUtilVarBindFree函数
  • 5.2.2.17 SnmpUtilPrintAsnAny函数
  • 5.3 SNMP安装和验证
  • 5.4 编程实例:SNMP通用读设工具
  • 5.4.1 程序主界面
  • 5.4.2 程序代码
  • 5.5 编程实例:基于SNMP的主机扫描器
  • 5.5.1 程序主界面
  • 5.5.2 程序代码
  • 第6章 ICMP扫描器的设计
  • 6.1 ICMP协议简介
  • 6.2 ping与tracert命令简介
  • 6.2.1 ping程序使用
  • 6.2.1.1 Windows下ping程序的用法
  • 6.2.1.2 通过TTL值判断对方操作系统的简易方法
  • 6.2.2 tracert程序使用
  • 6.3 ICMP通信实例分析
  • 6.4 ICMP协议内容
  • 6.4.1 目的不可达消息
  • 6.4.2 超时消息
  • 6.4.3 参数问题消息
  • 6.4.4 源拥塞消息
  • 6.4.5 重定向消息
  • 6.4.6 回送请求或回送响应消息
  • 6.4.7 时间戳请求和时间戳响应消息
  • 6.4.8 信息请求或信息响应消息
  • 6.5 ICMP扫描的安全性
  • 6.6 编程实例:快速多IP的ICMP扫描器
  • 6.6.1 程序主界面
  • 6.6.2 程序原理
  • 6.6.3 程序代码
  • 第7章 基于协议的服务扫描器的设计
  • 7.1 WWW服务扫描
  • 7.1.1 WWW服务器架构
  • 7.1.1.1 超文本格式和HTML
  • 7.1.1.2 发布方式
  • 7.1.1.3 HTTP协议
  • 7.1.2 协议消息格式
  • 7.1.2.1 起始行
  • 7.1.2.2 头域
  • 7.1.2.3 空行和实体
  • 7.1.2.4 通信实例
  • 7.1.3 WWW服务器的安装与配置
  • 7.2 编程实例:WWW服务扫描器
  • 7.2.1 扫描原理
  • 7.2.2 程序主界面
  • 7.2.3 程序代码
  • 7.3 FTP服务扫描
  • 7.3.1 FTP简介
  • 7.3.2 FTP服务器的安装与配置
  • 7.4 编程实例:FTP服务扫描器
  • 7.4.1 程序主界面
  • 7.4.2 程序代码
  • 7.5 Telnet服务扫描
  • 7.5.1 Telnet协议简介
  • 7.5.1.1 协议的命令
  • 7.5.1.2 客户端的命令
  • 7.5.2 Telnet的安装与配置
  • 7.6 编程实例:Telnet服务扫描器
  • 7.6.1 程序主界面
  • 7.6.2 程序代码
  • 7.7 Email服务扫描
  • 7.7.1 电子邮件协议简介
  • 7.7.1.1 SMTP协议
  • 7.7.1.2 POP协议
  • 7.7.1.3 IMAP协议
  • 7.7.2 电子邮件服务器的安装与配置
  • 7.8 编程实例:Email服务扫描器
  • 7.8.1 程序主界面
  • 7.8.2 程序代码
  • 第8章 基于应用的服务扫描器的设计
  • 8.1 Win Inet编程接口
  • 8.1.1 CInternetSession类
  • 8.1.1.1 CInternetSession构造函数
  • 8.1.1.2 AfxParseURL函数和AfxParseURLEx函数
  • 8.1.1.3 OpenURL方法
  • 8.1.1.4 GetConnection方法
  • 8.1.1.5 GetHttpConnection方法
  • 8.1.1.6 GetFtpConnection方法
  • 8.1.1.7 QueryOption方法
  • 8.1.1.8 SetOption方法
  • 8.1.1.9 GetCookie方法
  • 8.1.1.10 SetCookie方法
  • 8.1.1.11 Close方法
  • 8.1.2 CInternetConnection类
  • 8.1.2.1 GetSession方法
  • 8.1.2.2 GetServerName方法
  • 8.1.2.3 GetContext方法
  • 8.1.3 CHttpConnection类
  • 8.1.4 CFtpConnection类
  • 8.1.4.1 GetCurrentDirectory方法
  • 8.1.4.2 SetCurrentDirectory方法
  • 8.1.4.3 CreateDirectory方法
  • 8.1.4.4 RemoveDirectory方法
  • 8.1.4.5 Rename方法
  • 8.1.4.6 Remove方法
  • 8.1.4.7 GetFile方法
  • 8.1.4.8 PutFile方法
  • 8.1.4.9 OpenFile方法
  • 8.1.4.10 Close方法
  • 8.1.5 CInternetFile类
  • 8.1.5.1 Read方法
  • 8.1.5.2 Write方法
  • 8.1.5.3 ReadString方法
  • 8.1.5.4 WriteString方法
  • 8.1.5.5 Seek方法
  • 8.1.5.6 Flush方法
  • 8.1.5.7 Close方法
  • 8.1.6 CInternetException类
  • 8.2 编程实例:基于应用的WWW服务扫描器
  • 8.3 编程实例:基于应用的FTP服务扫描器
  • 8.4 网络资源协议
  • 8.4.1 NETRESOURCE结构
  • 8.4.2 WNetOpenEnum函数
  • 8.4.3 WNetEnumResource函数
  • 8.4.4 WNetCloseEnum函数
  • 8.5 编程实例:网络资源扫描器
  • 8.5.1 程序主界面
  • 8.5.2 程序代码
  • 第9章 命名管道扫描器的设计
  • 9.1 命名管道
  • 9.2 命名管道API
  • 9.2.1 命名管道的UNC格式
  • 9.2.2 命名管道编程的API
  • 9.2.2.1 CreateNamedPipe函数
  • 9.2.2.2 WaitNamedPipe函数
  • 9.2.2.3 ConnectNamedPipe函数
  • 9.2.2.4 DisconnectNamedPipe函数
  • 9.2.2.5 CreateFile函数
  • 9.2.2.6 OpenFile函数
  • 9.2.2.7 ReadFile函数
  • 9.2.2.8 WriteFile函数
  • 9.2.2.9 CloseHandle函数
  • 9.3 命名管道编程示例
  • 9.3.1 命名管道服务器端
  • 9.3.2 命名管道客户端
  • 9.4 邮槽
  • 9.4.1 邮槽的UNC格式
  • 9.4.2 邮槽编程的API
  • 9.4.2.1 CreateMailSlot函数
  • 9.4.2.2 GetMailSlotInfo函数
  • 9.4.2.3 SetMailSlotInfo函数
  • 9.5 邮槽编程示例
  • 9.5.1 邮槽服务器端编程
  • 9.5.2 邮槽客户端编程
  • 9.6 编程实例:SQL Server命名管道扫描器的设计
  • 9.6.1 Microsoft SQL Server简介
  • 9.6.2 程序主界面
  • 9.6.3 程序代码
  • 第10章 服务发现扫描器的设计
  • 10.1 服务发现简介
  • 10.2 UPnP协议
  • 10.2.1 寻址
  • 10.2.2 发现
  • 10.2.3 描述
  • 10.2.4 控制
  • 10.2.5 事件
  • 10.2.6 展示
  • 10.3 XML协议
  • 10.4 SSDP协议分析实例
  • 10.4.1 设备类型
  • 10.4.2 协议消息格式
  • 10.4.2.1 设备端:设备在线
  • 10.4.2.2 设备端:设备退出
  • 10.4.2.3 控制点端:发现请求
  • 10.4.2.4 设备端:发现回复
  • 10.5 编程实例:服务发现扫描器
  • 10.5.1 程序主界面
  • 10.5.2 程序代码
  • 第11章 漏洞扫描器的设计
  • 11.1 注入式漏洞扫描器
  • 11.1.1 SQL注入式攻击原理
  • 11.1.2 注入式攻击的局限性
  • 11.1.3 单机模式或C/S模式的攻击
  • 11.1.4 B/S模式下扫描程序设计
  • 11.2 主机弱密码扫描
  • 11.2.1 网络连接的API
  • 11.2.1.1 WNetAddConnection函数
  • 11.2.1.2 WNetCancelConnection函数
  • 11.2.1.3 WNetAddConnection2函数
  • 11.2.1.4 WNetCancelConnection2函数
  • 11.2.1.5 WNetAddConnection3函数
  • 11.2.2 密码穷举分析
  • 11.2.3 程序主界面
  • 11.2.4 程序代码
  • 11.3 DOS/DDOS攻击
  • 11.3.1 程序主界面
  • 11.3.2 程序代码
  • 11.4 明文密码嗅探
  • 11.4.1 程序主界面
  • 11.4.2 程序代码
  • 11.5 端口对照
  • 11.5.1 程序主界面
  • 11.5.2 程序代码
  • 第12章 扫描防范技术的研究
  • 12.1 更换端口
  • 12.2 预留陷阱技术
  • 12.3 基于哨兵的端口扫描监测
  • 12.3.1 程序主界面
  • 12.3.2 程序代码
  • 12.4 基于嗅探的端口扫描监测及DDOS拒绝服务监测
  • 12.4.1 程序主界面
  • 12.4.2 程序代码
  • 12.5 实时监测本地所有TCP/UDP连接及端口
  • 12.5.1 程序主界面
  • 12.5.2 结构与函数API
  • 12.5.2.1 GetTcpTable函数
  • 12.5.2.2 GetUdpTable函数
  • 12.5.2.3 GetTcpEntry函数
  • 12.5.3 程序代码
  • 12.6 如何关闭端口
  • 12.6.1 FTP端口
  • 12.6.2 WWW端口
  • 12.6.3 Telnet端口
  • 12.6.4 NetBIOS端口
  • 附录A 本书容易混淆概念解析
  • A.1 同名不同义概念
  • A.2 同义不同名概念
  • A.3 易混概念
  • 附录B Windows Socket错误返回码
  • 附录C Win Inet错误返回码
  • 附录D HTTP错误返回码
  • 参考文献
  • 后记
  • 光盘内容
展开全部