书刊介绍
《网络扫描技术揭秘:原理、实践与扫描器的实现》内容简介
《网络扫描技术揭秘:原理、实践与扫描器的实现》系统地介绍网络扫描器的概念、原理与设计方法,饱含作者十几年来在网络技术应用实践中不断总结的经验与技巧。作者从网络协议这样的基本概念开始,细致深入地分析了网络扫描器的原理,并用自己制作的大量工程代码,揭示了网络扫描器的实现方法与最佳实践。
《网络扫描技术揭秘:原理、实践与扫描器的实现》首先介绍了网络扫描技术的概念、原理、算法等,以及网络协议的意义与编程概述,随后系统分析了各种扫描器的原理与设计方法,包括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错误返回码
参考文献
后记
光盘内容