计算机网络编程第三章.ppt
《计算机网络编程第三章.ppt》由会员分享,可在线阅读,更多相关《计算机网络编程第三章.ppt(59页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章网络安全编程基础内容提要n网络安全编程主要涉及的是操作系统编程,在Windows平台下,目前主要采用C/C+语言。n本章将介绍Windows操作系统的基本原理以及C语言的四个发展阶段,每一阶段都用典型的案例说明。n详细说明在网络安全领域如何使用C/C+语言实现Socket编程、注册表编程、定时器编程、驻留程序编程和多线程编程。网络安全编程概述n从理论上说,任何一门语言可以在任何一个操作系统上编程,C语言可以在Windows下编程,同样也可以在Linux下编程。n编程是一项比较综合的工作,除了熟练使用编程工具以外,还要了解系统本身的内部工作机理和编程语言。Windows内部机制nWindo
2、ws是一个“基于事件的,消息驱动的”操作系统。在Windows下执行一个程序,只要用户进行了影响窗口的动作(如改变窗口大小或移动、单击鼠标等)该动作就会触发一个相应的“事件”。n系统每次检测到一个事件时,就会给程序发送一个“消息”,从而使程序可以处理该事件。n每次检测到一个用户事件,程序就对该事件做出响应,处理完以后,再等待下一个事件的发生。八个基本概念n与Windows系统密切相关的八个基本概念分别是:n窗口、程序、进程、线程n消息、事件、句柄、API与SDK。1、窗口n窗口是Windows本身以及Windows环境下的应用程序的基本界面单位,但是很多人都误以为只有具有标题栏、状态栏、最大化
3、、最小化按钮这样标准的方框才叫窗口。n其实窗口的概念很广,例如按钮和对话框等也是窗口哦,只不过是一种特殊的窗口罢了。2、程序n通常说的程序都是指一个能让计算机识别的文件n接触得最多的是以exe或者com作为扩展名的文件。3、进程n进程进程就是应用程序应用程序的执行实例(或称一个执行程序),进程是程序动态的描述。n一个以exe作为扩展名的文件,在没有被执行的时候称之为应用程序,当用鼠标双击执行以后,就被操作系统作为一个进程执行了。n当关机或者在任务栏的图标上单击鼠标右键选“退出”时,进程便消亡,彻底结束了生命。n进程经历了由“创建”到“消亡”的生命期,而程序自始至终存在于你的硬盘上,不管计算机是
4、否启动。4、线程n线程是进程的一个执行单元,同一个进程中的各个线程对应于一组CPU指令、一组CPU寄存器以及一个堆栈。n进程本来就具有动态的含义,是通过线程来体现的。5、消息n消息消息是应用程序和计算机交互的途径,在计算机上几乎做每一个动作都会产生一个消息n鼠标被移动会产生WM_MOUSEMOVE消息,鼠标左键被按下会产生WM_LBUTTONDOWN的消息,鼠标右键按下便产生WM_RBUTTONDOWN消息等等。事件句柄:n6、事件n从字面意思就可以明白它的含义,如在程序运行的过程中改变窗口的大小或者移动窗口等,都会触发相应的“事件”,从而调用相关的事件处理函数。n7、句柄:n单单一个“柄”字
5、便可以解释它的意思了,句柄句柄是一个指针,通过句柄就可以控制该句柄指向的对象。编写程序总是要和各种句柄打交道的,句柄句柄是系统用来标识不同对象类型的工具,如窗口、菜单等,这些东西在系统中被视为不同类型的对象,用不同的句柄将他们区分开来。8、API与SDKnAPI是英文ApplicationProgrammingInterface的缩写,意思是“应用程序接口”,泛指系统为应用程序提供的一系列函数接口。n在编程的时候可以直接调用,而不必知道其内部实现的过程,只知道它的原型和返回值就可以了。nSDK是英文SoftwareDevelopmentKit的缩写,意思是“软件开发工具包”,微软提供了许多专门
6、的SDK开发包,比如DirectX开发包和语音识别开发包等等。学习Windows下编程n学习语言,选择语言和工具是第一步,而且是非常重要的一步工作,目前的编程语言那么多,有C、C+、C#、Java和汇编语言等等。n虽然有很多语言,只要精通一门就够了。从实用的角度来讲,C/C+是最好的选择,而微软公司的VisualC+和Insprise公司(原Borland公司)的C+Builder是其相应开发工具的两大主流。开发工具n在开发工具上,选择比较流行的VC+6.0,而且最好是英文版本,主界面如图3-2所示。学习编程需要经历三大步n学习编程需要经历三大步:一、读程序;二、写程序;三、积累功能代码段。1
7、、读程序n在没有阅读过一份完整的源代码之前,别指望能写出有多好的程序!读程序必须具备一定的语言基础知识,基础知识主要是指语法知识,最起码要能读懂程序的每一行意思。有没有程序的设计思想,在这个时期并不重要,只要具备一定的语法基础就可以了。n学一门语言并不需要刻意去记条条框框的语法,看代码的时候,遇到了不明白的地方再去查相关的资料,补充基础知识再配合源程序的思路,这时的理解才是最深刻的。学习编程需要经历三大步2、写程序n刚开始写程序,不要奢望一下子写出很出色的程序来,“万丈高楼平底起”,编程贵在动手,只要动手去写就可以了。此外,还要依照自身的能力循序渐进地写,开始的时候写一点功能简单的、篇幅短小的
8、代码,力求简洁、完整,然后在此基础上进行扩充,一点点的添加功能。3、积累功能代码n积累非常的重要,将平时自己写的和自己已经读通的程序分类保存起来,建一个属于自己的代码库,需要相关功能的时候,就到代码库中找相关的代码。这样既提高编码的效率又提高了正确率。选择编程工具n目前流行两大语法体系:Basic语系和C语系。同一个语系下语言的基本语法是一样。两大语系如图3-3所示。nC语系中,目前两大语言如日中天:C+和Java。C+适宜做系统软件的开发、Java更适宜做网络应用开发。n虽然VC+.NET已经面世很久了,但是C+的开发工具目前主流依然是VC+6.0和C+Builder6.0。nJava流行的
9、开发工具比较多,比如:IBM公司的VisualAge和WebsphereStudio,Insprise公司JBuilder等等。VC+6.0nVC+是基于C/C+的集成开发工具,目前最常用的版本是VC+6.0。VC+有一套集成开发工具,其中包括各种编辑器、编译工具、集成调试器等等。在编写程序的过程中,各种操作都可以通过单击相应的菜单完成。新建的是一个控制台程序n可以看到许多工程类型,这里新建的是一个控制台程序,选择“Win32ConsoleApplication”,选择工程存放的路径,然后输入工程名“proj3_1”,然后点击按钮“OK”。出现的界面如图3-5所示。在图3-5的界面下选择创建工
10、程的模板,选择空模板“Anemptyproject”,点击按钮“Finish”,出现工程总结窗口,如图3-6所示。编程工具的使用编程工具的使用n案例名称:编程工具的使用案例名称:编程工具的使用n程序名称:程序名称:proj3_1.cppnn#includenvoidmain()nncoutHelloC+endl;nn编程工具的使用编程工具的使用n程序proj3_1.cpp代码包括三行n第一行:“#include”意思是引入C+的基本输入输出函数库,在C语言中引入的是“stdio.h”库。在iostream.h文件中定义了cout的功能是输出,endl的功能是回车换行。n第二行:“voidmai
11、n()”,main()函数是C/C+的主函数,void表示该函数没有返回值。n第四行:“coutHelloC+endl;”,“cout”功能是向屏幕输出。C语言发展的四个阶段nC语言经过不断的发展,在编程体系中可以将其分成四个阶段。n1、面向过程的C语言。n2、面向对象的C+语言。n3、SDK编程。n4、MFC编程(MicrosoftFoundationClass:微软基类库)。一、面向过程的C语言nC语言功能非常强大,Linux/Unix操作系统就是用C语言写的,C语言直接调用操作系统提供的API函数可以编写非常前大的程序。nC和C+的最主要区别是:C语言中没有类的概念,C+在C的语法基础上
12、引入了类(Class),所以C+和C的语法是基本相同的。面向过程编程,最基本的程序用C语言编写如proj3_2.cpp所示。n案例名称:使用C语言编程n程序名称:proj3_2.cppn#includenmain()nnprintf(HelloDOSn);n案例3-1读取命令行参数nmain函数是程序的主函数,程序执行的时候先从main函数开始。n该函数可以带参数,第一个参数是int型的,第二个参数是字符指针,具体使用方法如proj3_3.cpp所示。n案例名称:读取命令行参数n程序名称:proj3_3.cppn#includenintmain(intargc,char*argv)ninti;
13、nfor(i=1;iargc;i+)nnprintf(%sn,argvi);nnreturn0;n二、面向对象的C+语言n面向对象程序设计语言可以将一些变量和函数变量和函数封装到类(类(Class)中,当变量变量被类封装后,称之为属性属性或者数据成员数据成员,当函数函数被类封装后,称之为方法方法或者成员函数成员函数。n定义好的一个类,然后定义一个类的实例类的实例,这个实例就叫做对象对象,在C+中可以用类定义对象,使用方法如程序proj3_4.cpp所示。在在C+中使用类中使用类n案例名称:在C+中使用类n程序名称:proj3_4.cppn#includenclasspersonnnpublic
14、:nintheart;nchar*name;nintrun()/定义成员函数run()nnheart=heart+20;nreturnheart;n;n在在C+中使用类中使用类nvoidmain()nnintiRunStop;npersonZhangSan;nZhangSan.name=张三;nZhangSan.heart=72;ncout姓名:ZhangSan.nameendl;ncout跑步前心跳ZhangSan.heartendl;n/run()为对象的方法niRunStop=ZhangSan.run();ncout跑步后心跳iRunStopendl;n三、SDK编程nC库提供了许多函数
15、,可以直接拿来使用。比如利用C库提供的DeleteFile函数来删除一个文件,如程序proj3_6.cpp所示。n案例名称:调用C库函数n程序名称:proj3_6.cppn#includen#includenintmain()nnDeleteFile(C:test.txt);nprintf(删除成功n);nreturn0;编写窗口应用程序n案例名称:编写对话框n程序名称:proj3_7.cppn#includenintWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow)nnMessa
16、geBox(NULL,TEXT(Hello,Windows!),nTEXT(HelloMsg),MB_OK);nreturn0;n编写窗口应用程序n参数一:hInstance是当前实例的句柄。句柄是windows编程极其重要的概念。它是一个整数,用于标识程序、窗口和资源等。在这里hInstance表示应用程序本身。n参数二:hPrevInstance总是为NULL,在Windows早期版本中,当多次同时运行同一个程序时,系统会创建该程序的多个“实例”,同一程序的所有实例共享代码和内存。程序需要检查hPrevInstance来判断自身的其他实例是否正在运行,以便从已经存在的实例中获取数据。在32
17、位版本中,统一程序运行方式改变了,不在需要了!n参数三:lpCmdLine是运行程序的命令行。用户可以单击”开始”菜单中的”运行“选项,然后输入命令来运行一个程序,并且可以指定运行程序所需的参数,这里的命令由lpCmdLine传入。n参数四:nCmdShow用于指定程序窗口最初的显示模式,可以正常显示,也可以在初始化就最大化或者最小化。利用SDK函数创建窗口n#includenWNDCLASSwc;nHWNDh_wnd;nMSGmsg;n/*消息处理函数wndProc的声明*/nlongWINAPIWindowProc(HWND,UINT,WPARAM,LPARAM);n/*winMain函数
18、的声明*/nintPASCALWinMain(HINSTANCEh_CurInstance,HINSTANCEh_PrevInstance,LPSTRp_CmdLine,intm_Show)nn/*初始化wndclass结构变量*/nwc.lpfnWndProc=WindowProc;nwc.hInstance=h_CurInstance;nwc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);nwc.lpszClassName=TheMainClass;nn/*注册WndClass结构变量*/nRegisterClass(&wc);nn/*
19、创建窗口*/nh_wnd=CreateWindow(TheMainClass,OurfirstWindow,nWS_OVERLAPPEDWINDOW,0,0,400,500,0,0,h_CurInstance,0);nn/*显示窗口*/nShowWindow(h_wnd,SW_SHOWMAXIMIZED);nn/*消息循环*/nwhile(GetMessage(&msg,NULL,0,0)nDispatchMessage(&msg);nreturn(msg.wParam);nnn/*定义消息处理函数*/nlongWINAPIWindowProc(HWNDh_wnd,UINTWinMsg,WPA
20、RAMw_param,LPARAMl_param)nnif(WinMsg=WM_DESTROY)nPostQuitMessage(0);nreturnDefWindowProc(h_wnd,WinMsg,w_param,l_param);n利用SDK函数创建窗口n#includenWNDCLASSwc;nHWNDh_wnd;nMSGmsg;n/*消息处理函数wndProc的声明*/nlongWINAPIWindowProc(HWND,UINT,WPARAM,LPARAM);n/*winMain函数的声明*/nintPASCALWinMain(HINSTANCEh_CurInstance,HIN
21、STANCEh_PrevInstance,LPSTRp_CmdLine,intm_Show)nn/*初始化wndclass结构变量*/nwc.lpfnWndProc=WindowProc;nwc.hInstance=h_CurInstance;nwc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);nwc.lpszClassName=TheMainClass;nn/*注册WndClass结构变量*/nRegisterClass(&wc);nn/*创建窗口*/nh_wnd=CreateWindow(TheMainClass,OurfirstWi
22、ndow,nWS_OVERLAPPEDWINDOW,0,0,400,500,0,0,h_CurInstance,0);nn/*显示窗口*/nShowWindow(h_wnd,SW_SHOWMAXIMIZED);nn/*消息循环*/nwhile(GetMessage(&msg,NULL,0,0)nDispatchMessage(&msg);nreturn(msg.wParam);nnn/*定义消息处理函数*/nlongWINAPIWindowProc(HWNDh_wnd,UINTWinMsg,WPARAMw_param,LPARAMl_param)nnif(WinMsg=WM_DESTROY)n
23、PostQuitMessage(0);nreturnDefWindowProc(h_wnd,WinMsg,w_param,l_param);n四、MFC编程nSDK的功能非常强大,需要记很多的函数,当面向对象编程成为主流的时候,微软将SDK的函数分类进行封装,这样就诞生了MFC(MicrosoftFoundationClass)。nMFC程序的最基本的程序骨架如proj3_9.cpp所示。MFC编程n#includenclasssample:publicCFrameWndnnpublic:nsample()/构造函数构造函数nnCreate(NULL,MyWindow);nMessageBox
24、(MyWindow,CFrameconstructor);nn;nnclassApp:publicCWinAppnnpublic:nBOOLInitInstance();nBOOLExitInstance();n;nn/InitInstance函数的定义函数的定义/nBOOLApp:InitInstance()nnMessageBox(0,MyWindow,InitInstance,nMB_OK|MB_ICONASTERISK);nsample*obj;nobj=newsample;nm_pMainWnd=obj;nobj-ShowWindow(SW_SHOWMAXIMIZED);nretur
25、nTRUE;nnn/ExitInstance函数定义函数定义nBOOLApp:ExitInstance()nnMessageBox(0,MyWindow,ExitInstance,MB_OK|MB_ICONHAND);nreturnTRUE;nn/创建应用程序对象创建应用程序对象nAppappobject;网络安全编程n网络安全基础编程技术主要包括6个方面:nSocket编程n注册表编程n文件系统编程n定时器编程n驻留程序编程n多线程编程。Socket编程n谈网络安全编程离开网络编程就会大失其味,凡是基于网络应用的程序都离不开Socket。nSocket的意思是套接字,是计算机与计算机之间通信
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 编程 第三
限制150内