第1章 计算机网络基础...... 1 1.1 网络的概念和网络的组成...... 1 1.2 计算机网络参考模型...... 2 1.2.1 协议层次...... 2 1.2.2 TCP/IP参考模型...... 2 1.2.3 应用层(Application Layer)..... 3 1.2.4 传输层(Transport Layer)...... 3 1.2.5 网络层(Network Layer)...... 3 1.2.6 链路层(Link Layer)...... 4 1.2.7 物理层(Physical Layer)...... 4 1.3 网络程序寻址方式...... 4 1.3.1 MAC地址...... 4 1.3.2 IP地址...... 5 1.3.3 子网寻址...... 6 1.3.4 端口号...... 8 1.3.5 网络地址转换(NAT)...... 8 1.4 网络应用程序设计基础...... 10 1.4.1 网络程序体系结构...... 10 1.4.2 网络程序通信实体...... 11 1.4.3 网络程序开发环境...... 12 第2章 Winsock编程接口...... 13 2.1 Winsock库...... 13 2.1.1 Winsock库的装入和释放...... 13 2.1.2 封装CInitSock类...... 14 2.2 Winsock的寻址方式和字节顺序...... 14 2.2.1 Winsock寻址...... 14 2.2.2 字节顺序...... 16 2.2.3 获取地址信息...... 17 2.3 Winsock编程详解...... 20 2.3.1 Winsock编程流程...... 20 2.3.2 典型过程图...... 23 2.3.3 TCP服务器和客户端程序 2.3.4 UDP编程...... 26 2.4 网络对时程序实例...... 28 2.4.1 时间协议(Time Protocol)..... 28 2.4.2 TCP/IP实现代码...... 29 第3章 Windows套接字I/O模型...... 31 3.1 套接字模式...... 31 3.1.1 阻塞模式...... 31 3.1.2 非阻塞模式...... 31 3.2 选择(select)模型...... 32 3.2.1 select函数...... 32 3.2.2 应用举例...... 33 3.3 WSAAsyncSelect模型...... 36 3.3.1 消息通知和 3.3.2 应用举例...... 37 3.4 WSAEventSelect模型...... 40 3.4.1 WSAEventSelect函数...... 40 3.4.2 应用举例...... 42 3.4.3 基于WSAEventSelect模型 3.5 重叠(Overlapped)I/O模型...... 53 3.5.1 重叠I/O函数...... 53 3.5.2 事件通知方式...... 56 3.5.3 基于重叠I/O模型的服务 第4章 IOCP与可伸缩网络程序...... 67 4.1 完成端口I/O模型...... 67 4.1.1 什么是完成端口 4.1.2 使用IOCP的方法...... 67 4.1.3 示例程序...... 69 4.1.4 恰当地关闭IOCP... 72 4.2 Microsoft扩展函数...... 72 4.2.1 GetAcceptExSockaddrs 4.2.2 TransmitFile函数...... 73 4.2.3 TransmitPackets函数...... 74 4.2.4 ConnectEx函数...... 75 4.2.5 DisconnectEx函数...... 76 4.3 可伸缩服务器设计注意事项...... 76 4.3.1 内存资源管理...... 76 4.3.2 接受连接的方法...... 77 4.3.3 恶意客户连接问题...... 77 4.3.4 包重新排序问题...... 78 4.4 可伸缩服务器系统设计实例...... 78 4.4.1 CIOCPServer类的总体 4.4.2 数据结构定义和内存池 4.4.3 自定义帮助函数...... 85 4.4.4 开启服务和停止服务...... 88 4.4.5 I/O处理线程...... 93 4.4.6 用户接口和测试程序...... 99 第5章 互联网广播和IP多播...... 100 5.1 套接字选项和I/O控制命令...... 100 5.1.1 套接字选项...... 100 5.1.2 I/O控制命令...... 102 5.2 广播通信...... 103 5.3 IP多播(Multicasting)...... 105 5.3.1 多播地址...... 105 5.3.2 组管理协议(IGMP)...... 105 5.3.3 使用IP多播...... 106 5.4 基于IP多播的组讨论会实例...... 110 5.4.1 定义组讨论会协议...... 110 5.4.2 线程通信机制...... 111 5.4.3 封装CGroupTalk类...... 111 5.4.4 程序界面...... 117 第6章 原始套接字...... 121 6.1 使用原始套接字...... 121 6.2 ICMP编程...... 121 6.2.1 ICMP与校验和的计算...... 121 6.2.2 Ping程序实例...... 124 6.2.3 路由跟踪...... 126 6.3 使用IP头包含选项...... 129 6.3.1 IP数据报格式...... 129 6.3.2 UDP数据报格式...... 131 6.3.3 原始UDP封包发送实例..... 133 6.4 网络嗅探器开发实例...... 134 6.4.1 嗅探器设计原理...... 135 6.4.2 网络嗅探器的具体实现...... 136 6.4.3 侦听局域网内的密码...... 138 6.5 TCP通信开发实例...... 140 6.5.1 创建一个原始套接字,并 6.5.2 构造IP头和TCP头...... 140 6.5.3 发送原始套接字数据报...... 142 6.5.4 接收数据...... 146 第7章 Winsock服务提供者接口(SPI)..... 147 7.1 SPI概述...... 147 7.2 Winsock协议目录...... 148 7.2.1 协议特性...... 149 7.2.2 使用Winsock API函数 7.2.3 使用Winsock SPI函数 7.3 分层服务提供者(LSP)...... 153 7.3.1 运行原理...... 153 7.3.2 安装LSP... 154 7.3.3 移除LSP... 158 7.3.4 编写LSP... 159 7.3.5 LSP实例...... 161 7.4 基于SPI的数据报过滤实例...... 165 7.5 基于Winsock的网络聊天室 7.5.1 服务端...... 171 7.5.2 客户端...... 171 7.5.3 聊天室程序的设计说明...... 172 7.5.4 核心代码分析...... 172 第8章 Windows网络驱动接口标准 8.1 核心层网络驱动...... 176 8.1.1 Windows 2000及其后产品 8.1.2 NDIS网络驱动程序...... 177 8.1.3 网络驱动开发环境...... 178 8.2 WDM驱动开发基础...... 181 8.2.1 UNICODE字符串...... 181 8.2.2 设备对象...... 181 8.2.3 驱动程序的基本结构...... 183 8.2.4 I/O请求包(I/O request 8.2.5 完整驱动程序示例...... 186 8.2.6 扩展派遣接口...... 188 8.2.7 应用举例(进程诊测 8.3 开发NDIS网络驱动预备知识...... 198 8.3.1 中断请求级别(Interrupt 8.3.2 旋转锁(Spin Lock)...... 198 8.3.3 双链表...... 199 8.3.4 封包结构...... 199 8.4 NDIS协议驱动...... 200 8.4.1 注册协议驱动...... 200 8.4.2 打开下层协议驱动的 8.4.3 协议驱动的封包管理...... 202 8.4.4 在协议驱动中接收数据...... 203 8.4.5 从协议驱动发送封包...... 204 8.5 NDIS协议驱动开发实例...... 204 8.5.1 总体设计...... 204 8.5.2 NDIS协议驱动的初始化、 8.5.3 下层NIC的绑定和解除 8.5.4 发送数据...... 217 8.5.5 接收数据...... 219 8.5.6 用户IOCTL处理...... 225 第9章 网络扫描与检测技术...... 233 9.1 网络扫描基础知识...... 233 9.1.1 以太网数据帧...... 233 9.1.2 ARP... 234 9.1.3 ARP格式...... 236 9.1.4 SendARP函数...... 237 9.2 原始以太封包的发送...... 238 9.2.1 安装协议驱动...... 238 9.2.2 协议驱动用户接口...... 238 9.2.3 发送以太封包的测试程序..... 244 9.3 局域网计算机扫描...... 245 9.3.1 管理原始ARP封包...... 246 9.3.2 ARP扫描示例...... 249 9.4 互联网计算机扫描...... 253 9.4.1 端口扫描原理...... 253 9.4.2 半开端口扫描实现...... 254 9.5 ARP欺骗原理与实现...... 259 9.5.1 IP欺骗的用途和实现 9.5.2 IP地址冲突...... 260 9.5.3 ARP欺骗示例...... 261 第10章 点对点(P2P)网络通信技术...... 264 10.1 P2P穿越概述...... 264 10.2 一般概念...... 265 10.2.1 NAT术语...... 265 10.2.2 中转...... 265 10.2.3 反向连接...... 266 10.3 UDP打洞...... 267 10.3.1 中心服务器...... 267 10.3.2 建立点对点会话...... 267 10.3.3 公共NAT后面的节点...... 267 10.3.4 不同NAT后面的节点...... 268 10.3.5 多级NAT后面的节点...... 269 10.3.6 UDP空闲超时...... 270 10.4 TCP打洞...... 271 10.4.1 套接字和TCP端口重用..... 271 10.4.2 打开点对点的TCP流...... 271 10.4.3 应用程序看到的行为...... 272 10.4.4 同步TCP打开...... 273 10.5 Internet点对点通信实例...... 273 10.5.1 总体设计...... 273 10.5.2 定义P2P通信协议...... 274 10.5.3 客户方程序...... 275 10.5.4 服务器方程序...... 287 10.5.5 测试程序...... 291 第11章 核心层网络封包截获技术...... 294 11.1 Windows网络数据和封包过滤 11.1.1 Windows网络系统体系 11.1.2 用户模式下的网络数据 11.1.3 内核模式下的网络数据 11.2 中间层网络驱动PassThru... 296 11.2.1 PassThru NDIS中间层 11.2.2 编译和安装PassThru 11.3 扩展PassThru NDIS IM驱动—— 11.3.1 扩展之后的PassThru驱动 11.3.2 添加基本的DeviceIoControl 11.3.3 添加绑定枚举功能...... 302 11.3.4 添加ADAPT结构的引用 11.3.5 适配器句柄的打开/关闭 11.3.6 句柄事件通知...... 315 11.3.7 查询和设置适配器的OID 11.4 扩展PassThru NDIS IM驱动—— 11.4.1 需要考虑的事项...... 323 11.4.2 过滤相关的数据结构...... 324 11.4.3 过滤列表...... 326 11.4.4 网络活动状态...... 327 11.4.5 IOCTL控制代码...... 328 11.4.6 过滤数据...... 331 11.5 核心层过滤实例...... 339 第12章 Windows网络防火墙开发技术...... 342 12.1 防火墙技术概述...... 342 12.2 金羽(Phoenix)个人防火墙 12.2.1 金羽(Phoenix)个人 12.2.2 金羽(Phoenix)个人 12.2.3 金羽(Phoenix)个人 12.3 开发前的准备...... 345 12.3.1 常量的定义...... 346 12.3.2 访问规则...... 348 12.3.3 会话结构...... 348 12.3.4 文件结构...... 349 12.3.5 UNICODE支持...... 355 12.4 应用层DLL模块...... 356 12.4.1 DLL工程框架...... 356 12.4.2 共享数据和IO控制...... 362 12.4.3 访问控制列表ACL 12.4.4 查找应用程序访问权限 12.4.5 类的接口——检查函数...... 370 12.5 核心层SYS模块...... 373 12.6 主模块工程...... 375 12.6.1 I/O控制类...... 375 12.6.2 主应用程序类...... 377 12.6.3 主对话框中的属性页...... 380 12.6.4 主窗口类...... 381 12.7 防火墙页面...... 383 12.7.1 网络访问监视页面...... 383 12.7.2 应用层过滤规则页面...... 387 12.7.3 核心层过滤规则页面...... 397 12.7.4 系统设置页面...... 403 第13章 IP帮助函数...... 406 13.1 IP配置信息...... 406 13.1.1 获取网络配置信息...... 406 13.1.2 管理网络接口...... 408 13.1.3 管理IP地址...... 412 13.2 获取网络状态信息...... 415 13.2.1 获取TCP连接表...... 415 13.2.2 获取UDP监听表...... 418 13.2.3 获取IP统计数据...... 420 13.3 路由管理...... 427 13.3.1 获取路由表...... 427 13.3.2 管理特定路由...... 431 13.3.3 修改默认网关的例子...... 432 13.4 ARP表管理...... 433 13.4.1 获取ARP表...... 433 13.4.2 添加ARP入口...... 434 13.4.3 删除ARP入口...... 434 13.4.4 打印ARP表的例子...... 434 13.5 进程网络活动监视实例...... 438 13.5.1 获取通信的进程终端...... 438 13.5.2 Netstate源程序代码...... 439 第14章 Email协议及其编程...... 444 14.1 概述...... 444 14.2 电子邮件介绍...... 445 14.2.1 电子邮件Internet的 14.2.2 Internet邮件系统...... 445 14.2.3 电子邮件信头的结构及 14.3 SMTP原理...... 448 14.3.1 SMTP原理分析...... 448 14.3.2 SMTP工作机制...... 449 14.3.3 SMTP命令码和工作 14.3.4 SMTP通信模型...... 450 14.3.5 SMTP的命令和应答...... 451 14.4 POP3协议原理...... 452 14.4.1 POP3协议简介...... 452 14.4.2 POP3工作原理...... 453 14.4.3 POP3命令原始码...... 454 14.4.4 POP3会话实例...... 459 14.5 实例分析与程序设计...... 460 14.5.1 总界面设计...... 460 14.5.2 SMTP客户端设计...... 461 14.5.3 POP3客户端设计...... 473
|