您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第3课-网络安全基础编程-PowerPointPres
第三章网络安全编程基础*内容提要Windows的内部机制C语言的四个发展阶段实现Socket编程、注册表编程、定时器编程驻留程序编程和多线程编程。3.1网络安全编程概述C语言可以在Windows下编程,同样也可以在Linux下编程。编程是一项比较综合的工作,除了熟练使用编程工具以外,还要了解系统本身的内部工作机理和编程语言。3.1.1Windows内部机制Windows是一个“基于事件的,消息驱动的”操作系统。用户进行了影响窗口的动作触发“事件”系统检测到后发给应用程序“消息”处理*八个基本概念与Windows系统密切相关的八个基本概念分别是:窗口、程序、进程、线程消息、事件、句柄、API与SDK。*窗口窗口是Windows本身以及Windows环境下的应用程序的基本界面单位窗口是显示在屏幕上的一个矩形区域具有标题栏、状态栏、最大化、最小化按钮的标准方框叫窗口,按钮也是特殊窗口是用户与生成该窗口的应用程序间的直观接口窗口是受应用程序控制的一部分矩形屏幕区控制窗口的大小、风格、位置及内容用户角度应用程序角度*程序通常说的程序都是指一个能让计算机识别的文件接触得最多的是以exe或者com作为扩展名的文件。程序一组指令的集合例如:QQ程序,主要包括界面外观控制指令集socket网络通讯指令集数据信息存储指令集可以任何语言形式表现:高级语言、汇编语言、机器语言*进程进程就是应用程序的执行实例(或称一个执行程序),进程是程序动态的描述。一个以exe作为扩展名的文件,在没有被执行的时候称之为应用程序,当用鼠标双击执行以后,就被操作系统作为一个进程执行了。当关机或者在任务栏的图标上单击鼠标右键选“退出”时,进程便消亡,彻底结束了生命。进程经历了由“创建”到“消亡”的生命期,而程序自始至终存在于你的硬盘上,不管计算机是否启动。查看当前进程如下图*查看当前进程*线程线程是进程的一个执行单元,同一个进程中的各个线程对应于一组CPU指令、一组CPU寄存器以及一个堆栈。可以从下载工具看出来原来的下载工具是单进程单线程目前的下载工具是单进程多线程*消息消息是应用程序和计算机交互的途径,在计算机上几乎做每一个动作都会产生一个消息鼠标被移动会产生WM_MOUSEMOVE消息,鼠标左键被按下会产生WM_LBUTTONDOWN的消息鼠标右键按下便产生WM_RBUTTONDOWN消息*事件、句柄事件如在程序运行的过程中改变窗口的大小或者移动窗口等,都会触发相应的“事件”,从而调用相关的事件处理函数。例如:BUTTONCLICK事件,触发ONBUTTONCLICK()事件处理函数句柄句柄是一个指针,通过句柄就可以控制该句柄指向的对象。编写程序总是要和各种句柄打交道的句柄是系统用来标识不同对象类型的工具,如窗口、菜单等,这些东西在系统中被视为不同类型的对象,用不同的句柄将他们区分开来。例如:HWND、HDC、HBRUSH、HMENU、HPEN等等*API与SDKAPI是系统为应用程序提供的一系列函数接口。英文ApplicationProgrammingInterface的缩写,意思是“应用程序接口”,SDK是英文SoftwareDevelopmentKit的缩写,意思是“软件开发工具包”,微软提供了许多专门的SDK开发包,比如DirectX开发包和语音识别开发包等等。3.1.2学习Windows下编程学习语言,选择语言和工具是第一步目前的编程语言有C、C++、C#、Java和汇编语言等等。从实用的角度来讲,C/C++是最好的选择,微软公司的VisualC++是其相应开发工具*开发工具在开发工具上,选择比较流行的VC++6.0,而且最好是英文版本,主界面如图所示*学习编程需要经历三大步1、读程序在没有阅读过一份完整的源代码之前,别指望能写出有多好的程序!2、写程序“万丈高楼平底起”,编程贵在动手,只要动手去写就可以了。还要依照自身的能力循序渐进地写3、积累功能代码将平时自己写的和自己已经读通的程序分类保存起来,建一个属于自己的代码库3.1.3选择编程工具目前流行两大语法体系:Basic语系和C语系。同一个语系下语言的基本语法是一样。两大语系如图所示。C语系中,目前两大语言如日中天:C++和Java。C++适宜做系统软件的开发、Java更适宜做网络应用开发。虽然VC++.NET已经面世很久了,但是C++的开发工具目前主流依然是VC++6.0和C++Builder6.0。Java流行的开发工具比较多,比如:IBM公司的VisualAge和WebsphereStudio、Eclipse,Insprise公司JBuilder等等。C语系:C语言/C++语言/Java语言/Perl语言/C#/JavaScriptBasic语系:Basic语言/VB6.0/VB.NET/VBScript/VBA*VC++6.0目前最常用的版本是VC++6.0。VC++有一套集成开发工具,其中包括各种编辑器、编译工具、集成调试器等等下面通过一个程序来说明开发工具使用:File-New选择project,输入各项值,如图:新建的是一个控制台程序在左图的界面下选择创建工程的模板,选择空模板“Anemptyproject”,点击按钮“Finish”,出现工程总结窗口,如右图所示。为工程新加一个程序文件:File-New-FILES选择C++SourceFile,取名,后进入下面界面选择BUILD-Execute执行程序,出现结果*说明程序proj3_1.cpp代码包括三行第一行:“#includeiostream.h”意思是引入C++的基本输入输出函数库,在C语言中引入的是“stdio.h”库。在iostream.h文件中定义了cout的功能是输出,endl的功能是回车换行。第二行:“voidmain()”,main()函数是C/C++的主函数,void表示该函数没有返回值。第四行:“coutHelloC++endl;”,“cout”功能是向屏幕输出。3.2C语言发展的四个阶段C语言经过不断的发展,在编程体系中可以将其分成四个阶段。1、面向过程的C语言。2、面向对象的C++语言。3、SDK编程。4、MFC编程(MicrosoftFoundationClass:微软基类库)。3.2.1面向过程的C语言C语言功能非常强大Linux/Unix操作系统就是用C语言写的,C语言直接调用操作系统提供的API函数可以编写非常强大的程序。C和C++的最主要区别是:C语言中没有类的概念,C++在C的语法基础上引入了类(Class)。面向过程编程,最基本的程序用C语言编写如proj3_2.cpp所示。案例名称:使用C语言编程程序名称:proj3_2.cpp#includestdio.hmain(){printf(HelloDOS\n);}*案例3-1读取命令行参数案例名称:读取命令行参数程序名称:proj3_3.cpp#includestdio.hintmain(intargc,char*argv[]){inti;for(i=1;iargc;i++){printf(%s\n,argv[i]);}return0;}参数个数参数的值编译后在命令行下运行如下3.2.2面向对象的C++语言面向对象程序设计语言可以将一些变量和函数封装到类(Class)中当变量被类封装后,称之为属性或者数据成员当函数被类封装后,称之为方法或者成员函数定义好的一个类,然后定义一个类的实例,这个实例就叫做对象,在C++中可以用类定义对象,使用方法如程序proj3_4.cpp所示。类属性方法*在C++中定义类案例名称:在C++中使用类程序名称:proj3_4.cpp#includeiostream.hclassperson{public:intheart;char*name;intrun()//定义成员函数run(){heart=heart+20;returnheart;}};定义person类属性方法private、protected*在C++中使用类voidmain(){intiRunStop;personZhangSan;ZhangSan.name=张三;ZhangSan.heart=72;cout姓名:ZhangSan.nameendl;cout跑步前心跳ZhangSan.heartendl;//run()为对象的方法iRunStop=ZhangSan.run();cout跑步后心跳iRunStopendl;}编译运行输出结果如图*将类定义与实现分离类的定义放在.h文件中,实现放在.cpp文件中,具体如proj3_5所示在proj3_5.h中有classperson{public:intheart;char*name;intrun();};*将类定义与实现分离在proj3_5.cpp中有#includeiostream.h#include“proj3_5.h”intperson::run(){heart=heart+20;returnheart;}voidmain(){intiRunStop;personZhangSan;ZhangSan.name=张三;ZhangSan.heart=72;cout姓名:ZhangSan.nameendl;cout跑步前心跳ZhangSan.heartendl;iRunStop=ZhangSan.run();cout跑步后心跳iRunStopendl;}3.2.3SDK编程C库提供了许多函数,可以直接拿来使用。比如利用C库提供的DeleteFile函数来删除一个文件,如程序proj3_6.cpp所示。案例名称:调用C库函数程序名称:proj3_6.cpp#includestdio.h#includewindows.hintmain(){DeleteFile(C:\\test.txt);printf(删除成功\n);return0;}执行结果如右图C库函数提供*编写窗口应用程序编写对话框的语法如下面程序案例名称:编写对话框程序名称:proj3_7.cpp#includewindows.hintWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow){MessageBox(NULL,TEXT(Hello,Windows!),TEXT(HelloMsg),MB_OK);return0;}编译执行结果如图*编写窗口应用程序工程类型要改为WIN32Application,如图WIN32ConsoleApplication——主函数为main()WIN32Application——主函数为WinMain()*编写窗口应用程序WinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow)参数一:hInstance是当前实例的句柄。在这里hInstance表示应用程序本身。参数二:hPrevInstance总是为NULL,在Windows早期版本中使用,在32位版本中,统一程序运行方式改变了,不在需要了!参数三:szCmdLine是运行程序的命令行参数四:iCmdShow用于指定程序窗口最初的显示模式,可以正常显示,也可以在初始化就最大化或者最小化。案例3-2利用SDK函数创建窗口程序名称:proj3_8.cpp#includewindows.hWNDCLASSwc;HWNDh_wnd;MSGmsg;/*消息处理函数wndProc的声明*/longWINAPIWindowProc(HWND,UINT,WPARAM,LPARAM);窗口对象窗口句柄Windows消息对象案例3-2利用SDK函数创建窗口/*winMain
本文标题:第3课-网络安全基础编程-PowerPointPres
链接地址:https://www.777doc.com/doc-1267226 .html