lec1 Windows网络编程基础
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
18
网络应用程序的标识问题(续)
该怎样完整地表示网络中进行通信的 两个进程,或一个通信流? ( 协议,本地地址,本地端口号,远 地地址,远地端口号)
19
2 Windows编程基础
Windows编程的几个概念 进程
20
(1) Windows编程的几个基本概念
与Windows系统密切相关的五个基本 概念:
根据以太网头部中 的帧类型进行分用
SMTP 25
SNMP 161 UDP 17 1
TFTP 69 ICMP
根据 TCP或UDP 头部中的端口
号进行分用
根据 IP头部中的 协议值进行分用
以太网驱 动程序
以太网硬件
11
Application
Application
TCP/UDP
IP
使 用 下 层 提 供 的 服 务
当隐藏或显示窗口是发送此消息给这个窗口
WM_SETFONT WM_SETHOTKEY
WM_GETHOTKEY WM_QUERYDRAGICON WM_KEYDOWN WM_KEYUP
当绘制文本时程序发送此消息得到控件要用的颜色 应用程序发送此消息让一个窗口与一个热键相关连
应用程序发送此消息来判断热键与某个窗口是否有 关联 此消息发送给最小化窗口 按下一个键 释放一个键
窗口 句柄 消息、事件
API
21
窗口
窗口是Windows本身以及Windows 环境下的
应用程序的基本界面单位,但是很多人都误以
为只有具有标题栏、状态栏、最大化、最小化
按钮这样标准的方框才叫窗口。
其实窗口的概念很广,例如按钮和对话框等也
是窗口,只不过是一种特殊的窗口罢了。
22
句柄
安全编码 Windows系统安全编程
键盘监听 API HOOK
3
Baidu Nhomakorabea
参考书籍
1. 《Windows网络编程》,罗莉琴,人民 邮电出版社,2011 2.《Windows程序设计(第2版) 》,王艳平 等,人民邮电出版社,2008 (经典) 3.《Windows核心编程(第五版)》, Jeffrey ,清华大学出版社 ,2008 (经典) 4.《计算机网络应用软件编程技术》,吴英, 机械工业出版社,2010
每次检测到一个用户事件,程序就对该事件做 出响应,处理完以后,再等待下一个事件的发生 。
25
Windows应用程序、操作系统、计 算机硬件之间的相互关系
应用程序 ③ ④ 操作系统 ① ② 消息队列
输入输出设备
26
API 函数
应用程序如何通知OS做某些事情的呢?这 对应着箭头3 #include <stdio.h> API是英文 Application Programming <windows.h> Interface #include 的缩写,意思是“应用程序接口” int main() ,泛指系统为应用程序提供的一系列函数接口 { 在编程的时候可以直接调用,而不必知道其 DeleteFile("C:\\test.txt"); printf("删除成功\n"); 内部实现的过程,只知道它的原型和返回值就 return 0; 可以了。
30
Windows消息举例
Windows中用宏定义的方式预定义了系统消息。
消息名称 WM_CREATE WM_DESTROY WM_MOVE WM_SIZE WM_QUERYENDSESSION WM_QUIT
WM_SHOWWINDOW
消息含义 应用程序创建一个窗口 一个窗口被销毁 移动一个窗口 改变一个窗口的大小 当用户选择结束对话框或程序自己调用ExitWindows 函数 用来结束程序运行或当程序调用postquitmessage函数
网络安全编程技术
任德斌
rendebin@tom.com 四川大学电子信息学院
1
网络安全编程的背景
网站挂马 QQ盗号 网络流的监控 远程监控 肉鸡
2
课程主要内容
Windows网络编程基础 socket编程 高级socket编程 网络安全应用编程
主机和端口扫描 数据包的捕获
参见教材p204-207,p210,比较麻烦。
33
2)基于对话框的编程
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) { DialogBoxParam(//用对话框模版创建模态对话框 hInstance, // 实例句柄 (LPCTSTR)IDD_DIALOG, // 对话框资源ID号 NULL, // 父窗口句柄 DlgProc, // 消息处理函数 0); //初始值参数 return 0; }
各种应用程序:
应用层
Telnet、 FTP、 WWW、 SMTP… 负责处理特定的应用程序细节
运输层 (传输层) 网络层 (互联网层) 链路层 (数据连路层/网 络接口层)
TCP和 UDP 为两台主机上的应用程序提供 端到端的通信 IP、 ICMP和 IGMP 处理分组在网络中的活动
操作系统中的设备驱动程序、 计算机中对应的网络接口卡
28
Windows中的数据类型
WINAPI DWORD MultiThreadProc(LPVOID* lpParaw)
typedef unsigned long typedef int typedef unsigned char typedef unsigned short typedef void DWORD; BOOL; BYTE; WORD; *LPVOID;
实际上,大部分的Windows基本数据类型都是来自C语言数 据类型。 数据定义的头文件为windef.h。
29
Windows编程命名规则
使用前缀 c by n i x, y cx, cy b 或f w l dw fn s sz h p 数据型态 char或WCHAR或TCHAR BYTE (无正负号字符) short int int分别用作x坐标和y坐标 int分别用作x长度和y长度;C代表「计数器」 BOOL (int);f代表「旗标」 WORD (无正负号短整数) LONG (长整数) DWORD (无正负号长整数) function(函数) string(字符串) 以字节值0结尾的字符串 句柄 指标
处理与电缆的物理接口细节
8
TCP/IP协议族中不同层次的协议
用户进程 用户进程 用户进程 用户进程 应用层
TCP
UDP
传输层
ICMP
IP
IGMP
网络层
ARP
硬件接口
RARP
网络接口层
媒体
9
数据进入协议栈时的封装过程
用户数据
应用程序 Appl 首部
用户数据
TCP
TCP首部
应用数据
TCP段 IP 以太网 驱动程序
13
1.2 UDP概述
UDP 只在 IP 的数据报服务之上增加了很少 一点的功能,即端口的功能和可选的差错 检测的功能。 虽然 UDP 用户数据报只能提供不可靠的交 付,但 UDP 在某些方面有其特殊的优点。
发送数据之前不需要建立连接 UDP 的主机不需要维持复杂的连接状态表。 UDP 用户数据报只有8个字节的首部开销。 网络出现的拥塞不会使源主机的发送速率降低。 这对某些实时应用是很重要的。
4
考核方式
出勤率:15% 课程设计,要求进行软件开发,实现一定 的功能,并给出相关的文档,在课程后期 要做10分钟左右的报告:35% 期末考试:50%
5
Windows编程
学习编程,选择语言和工具是第一步 ,而且是非常重要的一步,目前的编程 语言很多,有C、C++、C#、Java和 Python等等。
IP首部 TCP首部
应用数据
IP数据报
目的地址 源地址类型 IP首部 TCP首部
6 6
以太网首部
应用数据
CRC
4
以太网
以太网
2
20
20 以太网帧 46~1500字节
尾部
10
以太网数据帧的分用过程
Telnet 23 FTP 21 TCP 6 IP RARP 0835H 0800H 0806H ARP
改变窗口大小
应用程序 在Windows中应用程序是没有权利直接知道硬件发生了什 么变化,只有通过OS来通知。消息是应用程序和计算机交 互的途径,在计算机上每做一个动作都会产生一个或多个 消息 程序建立的每个窗口都有一个相应的窗口消息处理函数
24
Windows的内部机制
Windows是一个“基于事件的,消息驱动的” 操作系统。在Windows下执行一个程序,只要用 户进行了影响窗口的动作(如改变窗口大小或移 动、单击鼠标等)该动作就会触发一个相应的“ 事件”。 系统每次检测到一个事件时,就会给程序发送 一个“消息”,从而使程序可以处理该事件。
31
Windows 消 息 机 制
Event
App3 Message Queue
App1
Send Message
Message Loop Window Procedure
App2 Message Queue
App1 Message Queue
Post Message
Default Window Procedure
TCP/UDP 提 供 上 层 一 些 服 务
IP
Network Access
Network Access
12
无连接通信
不同物理网络之间存在差异
通信能力、分组长度、延时
允许IP报文从不同路径达到目的地 路由器为每个IP报文独立选路 IP通信不保证可靠性,但灵活性增加
多种网络都能满足的通信方式 允许多种选路策略(如可靠性、容量、延 时) 结合应用考虑实际通信策略
1. 可靠性 2. 面向连接 3. 每次发送数据时,是否都需要指定目的IP 和端口? 4. 能否一次接收半个或者多个包? 5. 是否支持广播或多播? 6. 安全性
17
2.4 网络应用程序的标识问题
同一系统中不同进程间进行通信时,通过系统 分配的进程号(Process ID)就可以惟一标识一个进 程。也就是说,要通信的进程只要知道对方的进 程号就可以进行通信。 而网络情况下进程间的通信问题就要复杂得多, 不能只简单地用进程号来标识不同的进程,因为 各主机都独立地分配其进程号。 为了惟一地标识网络中通信的一个进程( 即通 信的某一方),就要使用一个如下的三元组: (协议,本地IP地址,本地端口号)
Windows是当今主流的操作系统,也是网 络游戏主要的开发平台。不论是网络游戏客 户端开发还是服务器端开发,都有很多成功 的网络游戏作品运行于Windows操作系统上
了解操作系统的特性
6
第一讲:Windows网络编程基础
主要内容:
TCP/IP协议基础 Windows编程基础
7
1. TCP/IP协议族分层
32
WinMain函数
WinMain主函数是基于窗口的应用程序 的入口。
int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE, LPTSTR lpCmdLine,int nCmdShow) {
......//注册窗口类
...... //创建主窗口 ...... //显示并更新主窗口 ...... // 进入消息循环 ...... //程序退出 }
}
27
关于消息及消息队列
操作系统是怎样将感知到的事件传递给应用程序的呢?这是通 过消息机制 (Message)来实现的。操作系统将每个事件都包装成 消息的结构体MSG来传递给应用程序,MSG结构定义如下: typedef struct tagMSG { HWND hWnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG; // 目标窗口句柄 // 消息标识 // 消息参数1(附加信息,16位) // 消息参数2(附加信息,32位) // 消息发送时间 // 消息发送时鼠标的屏幕坐标
Windows是面向对象的 句柄像一个指针,通过句柄就可以控制 该句柄指向的对象。 句柄是系统用来标识不同对象类型的工 具。
如窗口、菜单等,这些东西在系统中被 视为不同类型的对象,用不同的句柄将 他们区分开来。
23
“消息” 的概念
Message: 窗口使用 消息 来通信
OS message
14
1.3 TCP概述
高层的许多应用需要
传输大量的数据 可靠的通信服务 无法容忍IP 或 UDP提供的无可靠性保证的 服务 各种应用无法保证完全一致的可靠性方法 面向连接的 可靠的 字节流方式 FTP、SMTP、Telnet
TCP
15
TCP建立连接过程——三次握手
UDP和TCP的比较(程序员角度)
网络应用程序的标识问题(续)
该怎样完整地表示网络中进行通信的 两个进程,或一个通信流? ( 协议,本地地址,本地端口号,远 地地址,远地端口号)
19
2 Windows编程基础
Windows编程的几个概念 进程
20
(1) Windows编程的几个基本概念
与Windows系统密切相关的五个基本 概念:
根据以太网头部中 的帧类型进行分用
SMTP 25
SNMP 161 UDP 17 1
TFTP 69 ICMP
根据 TCP或UDP 头部中的端口
号进行分用
根据 IP头部中的 协议值进行分用
以太网驱 动程序
以太网硬件
11
Application
Application
TCP/UDP
IP
使 用 下 层 提 供 的 服 务
当隐藏或显示窗口是发送此消息给这个窗口
WM_SETFONT WM_SETHOTKEY
WM_GETHOTKEY WM_QUERYDRAGICON WM_KEYDOWN WM_KEYUP
当绘制文本时程序发送此消息得到控件要用的颜色 应用程序发送此消息让一个窗口与一个热键相关连
应用程序发送此消息来判断热键与某个窗口是否有 关联 此消息发送给最小化窗口 按下一个键 释放一个键
窗口 句柄 消息、事件
API
21
窗口
窗口是Windows本身以及Windows 环境下的
应用程序的基本界面单位,但是很多人都误以
为只有具有标题栏、状态栏、最大化、最小化
按钮这样标准的方框才叫窗口。
其实窗口的概念很广,例如按钮和对话框等也
是窗口,只不过是一种特殊的窗口罢了。
22
句柄
安全编码 Windows系统安全编程
键盘监听 API HOOK
3
Baidu Nhomakorabea
参考书籍
1. 《Windows网络编程》,罗莉琴,人民 邮电出版社,2011 2.《Windows程序设计(第2版) 》,王艳平 等,人民邮电出版社,2008 (经典) 3.《Windows核心编程(第五版)》, Jeffrey ,清华大学出版社 ,2008 (经典) 4.《计算机网络应用软件编程技术》,吴英, 机械工业出版社,2010
每次检测到一个用户事件,程序就对该事件做 出响应,处理完以后,再等待下一个事件的发生 。
25
Windows应用程序、操作系统、计 算机硬件之间的相互关系
应用程序 ③ ④ 操作系统 ① ② 消息队列
输入输出设备
26
API 函数
应用程序如何通知OS做某些事情的呢?这 对应着箭头3 #include <stdio.h> API是英文 Application Programming <windows.h> Interface #include 的缩写,意思是“应用程序接口” int main() ,泛指系统为应用程序提供的一系列函数接口 { 在编程的时候可以直接调用,而不必知道其 DeleteFile("C:\\test.txt"); printf("删除成功\n"); 内部实现的过程,只知道它的原型和返回值就 return 0; 可以了。
30
Windows消息举例
Windows中用宏定义的方式预定义了系统消息。
消息名称 WM_CREATE WM_DESTROY WM_MOVE WM_SIZE WM_QUERYENDSESSION WM_QUIT
WM_SHOWWINDOW
消息含义 应用程序创建一个窗口 一个窗口被销毁 移动一个窗口 改变一个窗口的大小 当用户选择结束对话框或程序自己调用ExitWindows 函数 用来结束程序运行或当程序调用postquitmessage函数
网络安全编程技术
任德斌
rendebin@tom.com 四川大学电子信息学院
1
网络安全编程的背景
网站挂马 QQ盗号 网络流的监控 远程监控 肉鸡
2
课程主要内容
Windows网络编程基础 socket编程 高级socket编程 网络安全应用编程
主机和端口扫描 数据包的捕获
参见教材p204-207,p210,比较麻烦。
33
2)基于对话框的编程
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) { DialogBoxParam(//用对话框模版创建模态对话框 hInstance, // 实例句柄 (LPCTSTR)IDD_DIALOG, // 对话框资源ID号 NULL, // 父窗口句柄 DlgProc, // 消息处理函数 0); //初始值参数 return 0; }
各种应用程序:
应用层
Telnet、 FTP、 WWW、 SMTP… 负责处理特定的应用程序细节
运输层 (传输层) 网络层 (互联网层) 链路层 (数据连路层/网 络接口层)
TCP和 UDP 为两台主机上的应用程序提供 端到端的通信 IP、 ICMP和 IGMP 处理分组在网络中的活动
操作系统中的设备驱动程序、 计算机中对应的网络接口卡
28
Windows中的数据类型
WINAPI DWORD MultiThreadProc(LPVOID* lpParaw)
typedef unsigned long typedef int typedef unsigned char typedef unsigned short typedef void DWORD; BOOL; BYTE; WORD; *LPVOID;
实际上,大部分的Windows基本数据类型都是来自C语言数 据类型。 数据定义的头文件为windef.h。
29
Windows编程命名规则
使用前缀 c by n i x, y cx, cy b 或f w l dw fn s sz h p 数据型态 char或WCHAR或TCHAR BYTE (无正负号字符) short int int分别用作x坐标和y坐标 int分别用作x长度和y长度;C代表「计数器」 BOOL (int);f代表「旗标」 WORD (无正负号短整数) LONG (长整数) DWORD (无正负号长整数) function(函数) string(字符串) 以字节值0结尾的字符串 句柄 指标
处理与电缆的物理接口细节
8
TCP/IP协议族中不同层次的协议
用户进程 用户进程 用户进程 用户进程 应用层
TCP
UDP
传输层
ICMP
IP
IGMP
网络层
ARP
硬件接口
RARP
网络接口层
媒体
9
数据进入协议栈时的封装过程
用户数据
应用程序 Appl 首部
用户数据
TCP
TCP首部
应用数据
TCP段 IP 以太网 驱动程序
13
1.2 UDP概述
UDP 只在 IP 的数据报服务之上增加了很少 一点的功能,即端口的功能和可选的差错 检测的功能。 虽然 UDP 用户数据报只能提供不可靠的交 付,但 UDP 在某些方面有其特殊的优点。
发送数据之前不需要建立连接 UDP 的主机不需要维持复杂的连接状态表。 UDP 用户数据报只有8个字节的首部开销。 网络出现的拥塞不会使源主机的发送速率降低。 这对某些实时应用是很重要的。
4
考核方式
出勤率:15% 课程设计,要求进行软件开发,实现一定 的功能,并给出相关的文档,在课程后期 要做10分钟左右的报告:35% 期末考试:50%
5
Windows编程
学习编程,选择语言和工具是第一步 ,而且是非常重要的一步,目前的编程 语言很多,有C、C++、C#、Java和 Python等等。
IP首部 TCP首部
应用数据
IP数据报
目的地址 源地址类型 IP首部 TCP首部
6 6
以太网首部
应用数据
CRC
4
以太网
以太网
2
20
20 以太网帧 46~1500字节
尾部
10
以太网数据帧的分用过程
Telnet 23 FTP 21 TCP 6 IP RARP 0835H 0800H 0806H ARP
改变窗口大小
应用程序 在Windows中应用程序是没有权利直接知道硬件发生了什 么变化,只有通过OS来通知。消息是应用程序和计算机交 互的途径,在计算机上每做一个动作都会产生一个或多个 消息 程序建立的每个窗口都有一个相应的窗口消息处理函数
24
Windows的内部机制
Windows是一个“基于事件的,消息驱动的” 操作系统。在Windows下执行一个程序,只要用 户进行了影响窗口的动作(如改变窗口大小或移 动、单击鼠标等)该动作就会触发一个相应的“ 事件”。 系统每次检测到一个事件时,就会给程序发送 一个“消息”,从而使程序可以处理该事件。
31
Windows 消 息 机 制
Event
App3 Message Queue
App1
Send Message
Message Loop Window Procedure
App2 Message Queue
App1 Message Queue
Post Message
Default Window Procedure
TCP/UDP 提 供 上 层 一 些 服 务
IP
Network Access
Network Access
12
无连接通信
不同物理网络之间存在差异
通信能力、分组长度、延时
允许IP报文从不同路径达到目的地 路由器为每个IP报文独立选路 IP通信不保证可靠性,但灵活性增加
多种网络都能满足的通信方式 允许多种选路策略(如可靠性、容量、延 时) 结合应用考虑实际通信策略
1. 可靠性 2. 面向连接 3. 每次发送数据时,是否都需要指定目的IP 和端口? 4. 能否一次接收半个或者多个包? 5. 是否支持广播或多播? 6. 安全性
17
2.4 网络应用程序的标识问题
同一系统中不同进程间进行通信时,通过系统 分配的进程号(Process ID)就可以惟一标识一个进 程。也就是说,要通信的进程只要知道对方的进 程号就可以进行通信。 而网络情况下进程间的通信问题就要复杂得多, 不能只简单地用进程号来标识不同的进程,因为 各主机都独立地分配其进程号。 为了惟一地标识网络中通信的一个进程( 即通 信的某一方),就要使用一个如下的三元组: (协议,本地IP地址,本地端口号)
Windows是当今主流的操作系统,也是网 络游戏主要的开发平台。不论是网络游戏客 户端开发还是服务器端开发,都有很多成功 的网络游戏作品运行于Windows操作系统上
了解操作系统的特性
6
第一讲:Windows网络编程基础
主要内容:
TCP/IP协议基础 Windows编程基础
7
1. TCP/IP协议族分层
32
WinMain函数
WinMain主函数是基于窗口的应用程序 的入口。
int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE, LPTSTR lpCmdLine,int nCmdShow) {
......//注册窗口类
...... //创建主窗口 ...... //显示并更新主窗口 ...... // 进入消息循环 ...... //程序退出 }
}
27
关于消息及消息队列
操作系统是怎样将感知到的事件传递给应用程序的呢?这是通 过消息机制 (Message)来实现的。操作系统将每个事件都包装成 消息的结构体MSG来传递给应用程序,MSG结构定义如下: typedef struct tagMSG { HWND hWnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG; // 目标窗口句柄 // 消息标识 // 消息参数1(附加信息,16位) // 消息参数2(附加信息,32位) // 消息发送时间 // 消息发送时鼠标的屏幕坐标
Windows是面向对象的 句柄像一个指针,通过句柄就可以控制 该句柄指向的对象。 句柄是系统用来标识不同对象类型的工 具。
如窗口、菜单等,这些东西在系统中被 视为不同类型的对象,用不同的句柄将 他们区分开来。
23
“消息” 的概念
Message: 窗口使用 消息 来通信
OS message
14
1.3 TCP概述
高层的许多应用需要
传输大量的数据 可靠的通信服务 无法容忍IP 或 UDP提供的无可靠性保证的 服务 各种应用无法保证完全一致的可靠性方法 面向连接的 可靠的 字节流方式 FTP、SMTP、Telnet
TCP
15
TCP建立连接过程——三次握手
UDP和TCP的比较(程序员角度)