第1篇 基础协议 2
第1章 Internet与网络通信模型概述 2
1.1 Internet概述 2
1.1.1 Internet的发展历史 2
1.1.2 Internet的管理机构 4
1.1.3 国内Internet网络建设的现状 5
1.2 网络通信模型和协议簇 6
1.2.1 OSI参考模型 6
1.2.2 TCP/IP协议簇体系结构 11
习题 13
第2章 TCP/IP协议簇及其应用 14
2.1 IP 14
2.1.1 IP基础 14
2.1.2 IP的关键机制 16
2.2 TCP和UDP 17
2.2.1 TCP的网络功能 17
2.2.2 TCP段结构 18
2.2.3 TCP的基本工作流程 20
2.2.4 UDP 22
2.3 其他常用协议 23
2.3.1 ARP 23
2.3.2 ICMP 26
2.3.3 Telnet 28
2.3.4 FTP 29
2.3.5 SMTP和POP3 30
习题 31
第3章 IP地址和子网规划 33
3.1 IP地址 33
3.1.1 IP地址的结构 33
3.1.2 IP地址的分类 34
3.1.3 特殊的IP地址 36
3.2 子网划分 37
3.2.1 子网 37
3.2.2 子网掩码 38
3.2.3 CIDR表示法 44
3.2.4 单播、组播和广播地址 45
习题 48
第2篇 网络编程 51
第4章 网络编程基础 51
4.1 网络编程相关的基本概念 51
4.1.1 网络编程与进程通信 51
4.1.2 Internet中网间进程的标识 53
4.1.3 网络协议的特征 57
4.1.4 高效的用户数据报协议 59
4.1.5 可靠的传输控制协议 60
4.2 三类网络编程 62
4.2.1 基于TCP/IP协议栈的网络编程 62
4.2.2 基于WWW应用的网络编程 62
4.2.3 基于.NET框架的Web Services网络编程 62
4.3 客户机/服务器交互模式 65
4.3.1 网络应用软件的地位和功能 65
4.3.2 客户机/服务器模式 66
4.3.3 客户机与服务器的特性 67
4.3.4 容易混淆的术语 68
4.3.5 客户机与服务器的通信过程 68
4.3.6 网络协议与C/S模式的关系 69
4.3.7 错综复杂的C/S交互 69
4.3.8 服务器如何同时为多个客户机服务 71
4.3.9 标识一个特定服务 72
4.4 P2P模式 73
4.4.1 P2P技术的兴起 73
4.4.2 P2P的定义和特征 73
4.4.3 P2P的发展 74
4.4.4 P2P的关键技术 74
4.4.5 P2P系统的应用与前景 75
习题 75
第5章 Socket编程基础 77
5.1 Socket网络编程接口的产生与发展 77
5.1.1 Socket编程接口起源于UNIX操作系统 77
5.1.2 Socket编程接口的发展 78
5.2 Socket的工作原理和基本概念 78
5.2.1 Socket协议的工作原理 78
5.2.2 什么是Socket 79
5.2.3 Socket的服务方式和类型 79
5.3 WinSock编程基础 80
5.3.1 构建WinSock应用程序框架 80
5.3.2 IP地址的表示形式 83
5.4 面向连接的Socket编程 85
5.4.1 面向连接的Socket通信流程 85
5.4.2 socket()函数 86
5.4.3 bind()函数 87
5.4.4 listen()函数 88
5.4.5 accept()函数 89
5.4.6 recv()函数 91
5.4.7 send()函数 92
5.4.8 closesocket()函数 94
5.4.9 shutdown()函数 94
5.4.10 connect()函数 95
5.4.11 TCP Socket服务器应用程序编程实例 96
5.4.12 TCP Socket客户端应用程序编程实例 101
5.5 面向非连接的Socket编程 105
5.5.1 面向非连接的Socket通信流程 105
5.5.2 sendto()函数 106
5.5.3 recvfrom()函数 107
5.6 Socket选项 108
5.6.1 调用getsockopt()函数获取Socket选项 108
5.6.2 调用setsockopt()函数设置Socket选项 111
习题 113
第6章 探测网络中的在线设备 115
6.1 获取本地计算机的网络信息 115
6.1.1 使用ipconfig命令获取本地网络信息 115
6.1.2 获取本地网络信息的开发接口IPHelper API 116
6.1.3 获取本地网络适配器信息 117
6.1.4 获取本地主机名、域名和DNS服务器信息 121
6.1.5 获取本地计算机网络接口的基本信息 125
6.1.6 获取本地计算机IP地址表 129
6.1.7 添加和删除IP地址 132
6.2 扫描子网中的地址 137
6.2.1 计算指定子网内包含的所有IP地址 137
6.2.2 实现ping的功能 141
6.2.3 扫描子网 148
习题 158
第7章 NetBIOS网络编程技术 159
7.1 NetBIOS协议及应用 159
7.1.1 NetBIOS协议 159
7.1.2 使用NBTSTAT命令 162
7.2 NetBIOS开发接口 163
7.2.1 NetBIOS操作 163
7.2.2 NCB结构体 164
7.2.3 其他常用NetBIOS结构体 168
7.2.4 Netbios()函数 170
7.2.5 获取LANA上的所有NetBIOS名字 171
7.2.6 获取网络适配器上的MAC地址 175
7.3 在程序中实现NBTSTAT命令的功能 177
7.3.1 本实例的工作原理 177
7.3.2 定义的结构体 177
7.3.3 为获取NetBIOS信息而定义的函数 178
7.3.4 实现NBTSTAT命令功能的主函数 182
习题 183
第8章 高级Socket编程技术 185
8.1 Socket编程模型概述 185
8.1.1 阻塞模式和非阻塞模式 185
8.1.25 种Socket编程模型 185
8.2 阻塞与非阻塞模式Socket编程 187
8.2.1 设置非阻塞模式Socket 187
8.2.2 非阻塞模式服务器应用程序编程实例 188
8.2.3 非阻塞模式客户端应用程序编程实例 192
8.2.4 基于非阻塞模式的多线程服务器应用程序编程实例 195
8.3 基于Select模型的Socket编程 197
8.3.1 select()函数 198
8.3.2 基于Select模型的服务器应用程序实例 199
8.4 基于W SAAsyncSelect模型的Socket编程 206
8.4.1 WSAAsyncSelect()函数 206
8.4.2 创建窗口 207
8.4.3 窗口例程 210
8.4.4 基于 WSAAsyncSelect模型的服务器编程 210
8.5 基于W SAEventSelect模型的Socket编程 215
8.5.1 WSAEventSelect()函数 215
8.5.2 创建和管理事件对象 217
8.5.3 WSAWaitForMultipleEvents()函数 217
8.5.4 WSAEnumNetworkEvents()函数 218
8.5.5 基于WSAEventSelect模型的服务器编程 219
8.6 基于重叠I/O模型的 Socket编程 223
8.6.1 WSASocket()函数 223
8.6.2 调用WSASend()函数发送数据 224
8.6.3 调用WSARecv()函数接收数据 225
8.6.4 GetOverlappedResult()函数 226
8.6.5 使用事件通知来管理重叠I/O操作 226
8.6.6 使用完成例程来管理重叠I/O操作 230
8.7 基于完成端口模型的Socket编程 233
8.7.1 完成端口模型的工作原理 233
8.7.2 创建完成端口对象 234
8.7.3 等待重叠I/O的操作结果 235
8.7.4 基于完成端口模型的服务器应用程序实例 236
习题 242
第9章 安全套接层协议 244
9.1 什么是SSL 244
9.1.1 SSL简介和相关概念 244
9.1.2 SSL的握手过程 247
9.2 数字证书 251
9.2.1 基本概念 251
9.2.2 数字证书的分类 252
9.2.3 数字证书的授权机构 253
9.2.4 部署基于数字证书的HTTPS网站 254
9.3 OpenSSL编程基础 264
9.3.1 OpenSSL概况 264
9.3.2 需要包含的头文件 265
9.3.3 需要引用的库文件 265
9.3.4 初始化OpenSSL 266
9.3.5 创建SSL会话连接所使用的协议 266
9.3.6 加载和使用证书 266
9.3.7 SSL套接字 268
9.3.8 OpenSSL握手 268
9.3.9 通信结束 269
9.4 OpenSSL编程实例 270
9.4.1 制作SSL证书 270
9.4.2 开发基于OpenSSL的服务器程序 272
9.4.3 开发基于OpenSSL的客户端程序 277
习题 281
第10章 基于WinPcap的网络数据包捕获、过滤和分析技术 282
10.1 WinPcap技术基础 282
10.1.1 WinPcap的体系结构 282
10.1.2 NIC驱动器和NDIS 283
10.1.3 网络组包过滤(NPF)模块 284
10.1.4 捕获数据包的原理和步骤 286
10.2 下载和安装WinPcap开发包 287
10.2.1 下载WinPcap 287
10.2.2 安装WinPcap 289
10.2.3 源代码的目录结构 289
10.3 在Visual C++中使用WinPcap技术 290
10.3.1 环境配置 290
10.3.2 获取与网络适配器绑定的设备列表 291
10.3.3 获取网络适配器的高级属性信息 294
10.3.4 打开网络适配器并实现抓包功能 297
10.3.5 不使用事件处理器进行抓包 301
10.3.6 过滤数据包 304
10.3.7 分析数据包 306
习题 310
第3篇 实例应用 313
第11章 设计局域网探测器 313
11.1 局域网探测器的主要功能 313
11.2 基础模块设计 313
11.2.1 基础函数 314
11.2.2 本地主机类CLocalhost 316
11.2.3 设备信息类CDevice 318
11.2.4 子网信息类CSubnet 319
11.3 系统主界面设计 329
11.3.1 系统主界面中包含的控件 329
11.3.2 设计菜单项 329
11.4 加载和退出主界面 330
11.4.1 加载主界面的代码实现 330
11.4.2 在文本编辑框中输出描述信息 335
11.4.3 自动调整控件的大小 335
11.4.4 退出系统并保存自定义子网 336
11.5 管理子网 337
11.5.1 添加和编辑子网 337
11.5.2 删除子网 341
11.6 扫描指定的子网 342
11.6.1 设计执行扫描子网操作的对话框 342
11.6.2 启动子网扫描 344
11.7 检测子网的状态 345
11.7.1 设计检测子网状态的对话框 346
11.7.2 启动状态检测 347
第12章 设计基于P2P技术的BT下载工具 349
12.1 P2P技术的工作原理和应用 349
12.1.1 P2P技术的工作原理 349
12.1.2 P2P网络模型 351
12.1.3 BT下载 352
12.1.4 FTKemelAPI兼容BT协议网络内核库 354
12.2 系统主界面设计 356
12.2.1 系统主界面中包含的控件 356
12.2.2 设计菜单项 357
12.2.3 设计工具栏 357
12.3 加载主窗口 359
12.3.1 加载主窗口的代码实现 360
12.3.2 在StartContext()函数中初始化FTKemelAPI环境 361
12.3.3 在InitNatTunnel()函数中初始化穿透内网的操作 365
12.4 实现BT下载 367
12.4.1 打开种文件 367
12.4.2 开始下载 376
12.4.3 停止下载 381
12.4.4 显示下载进度 382
12.4.5 删除文件 387
12.4.6 打开目录 388