《网络安全程序设计第一讲.ppt》由会员分享,可在线阅读,更多相关《网络安全程序设计第一讲.ppt(55页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、网络安全程序设计网络安全程序设计 第一讲第一讲 网络安全程序设计上海电力学院上海电力学院 计算机科学与技术学院计算机科学与技术学院网络安全程序设计网络安全程序设计 第一讲第一讲 本课程参考资料必读书籍必读书籍必会工具必会工具参考书参考书网络安全程序设计网络安全程序设计 第一讲第一讲 本课程对学生的要求课程目的:在理解网络安全基本技术和原理、标准密码算法的基础上,提升网络安全编程实践能力,能进行Socket编程,学会使用流行的网络安全包CryptoAPI和OpenSSL进行网络安全编程。课堂讲授+实验教学 课下实践(由于实验课时有限,需同学们课下花精力实践。)平时成绩:考勤+课堂实验。课程成绩:
2、平时成绩(30%)和期末大作业(70%)。网络安全程序设计网络安全程序设计 第一讲第一讲 本课程需具备的基础网络安全基础知识 网络基本知识,TCP/IP协议,安全威胁截获,篡改,抵赖,黑客攻击,病毒 安全需求-机密性,完整性,可用性,不可抵赖性。密码学基础 密码学基本概念,对称密码机制,公钥密码体制,密钥管理,消息鉴别与数字签名、数字证书与PKI的原理及应用。主要的网络安全技术 安全扫描技术,网络安全协议,防火墙技术,入侵检测 主流编程语言 C,C+网络安全程序设计网络安全程序设计 第一讲第一讲 第一章 概述-网络安全必要性1.技术层面 Internet已不再是计算机人员和军事部门进行科研的领
3、域,而是变成了一个开发和使用信息资源的覆盖全球的信息海洋,覆盖了社会生活的方方面面,构成了一个信息社会的缩影。安全性问题是困扰Internet用户发展的主要因素。计算机病毒、网络蠕虫的广泛传播,计算机网络黑客的恶意攻击,DDOS攻击的强大破坏力、网上窃密和犯罪的增多,使得网络安全性问题关系到未来网络应用的深入发展。随着云计算、新型通信网络出现,信息安全不断面临新挑战。网络安全程序设计网络安全程序设计 第一讲第一讲 2.社会层面 网络安全是一个关系到国家安全和社会稳定的重要问题。其重要性正随着全球信息化的步伐与日俱增。在我国,国家高度重视网络空间安全保障工作,网络信息安全上升至国家战略。2013
4、年11月12日 中国共产党中央国家安全委员会成立。2014年2月2日中央网络安全和信息化领导小组成立,习近平指出网络安全和信息化是事关国家安全和国家发展、事关广大人民群众工作生活的重大战略问题。网络安全程序设计网络安全程序设计 第一讲第一讲 2015年1月23日中共中央政治局召开会议,审议通过国家安全战略纲要,指出要做好各领域国家安全工作,大力推进国家安全各种保障能力建设,把法治贯穿于维护国家安全的全过程。2015年4月20日国家安全法(草案)二审稿增加了国家“建设国家网络与信息安全保障体系,提升网络与信息安全保护能力”、“维护国家网络空间主权”的规定。2015年7月1日,第十二届全国人民代表
5、大会常务委员会第十五次会议通过新的国家安全法。网络安全程序设计网络安全程序设计 第一讲第一讲 网络安全编程 网络安全本身理论性和实践性都很强,掌握了网络安全相关的基本概念、基本原理后可以运用到实际的工程中。在实际应用中,需要针对实际应用环境开发一些特定应用程序以提供相应的安全服务,而这时掌握一些实用的网络安全编程工具就显得尤为重要。网络安全程序设计网络安全程序设计 第一讲第一讲 几种常见网络安全开发包1.CryptoAPI2.OpenSSL3.Crypto+4.网络数据包捕获开发包Libpcap和WinPcap,WireShark5.网络入侵开发包 Libnids6.防火墙开发包 NetFil
6、eter 7.安全电子邮件开发包 Sendmail网络安全程序设计网络安全程序设计 第一讲第一讲 网络安全程序设计的主要内容 网络安全程序设计的基础知识,具体包括:网络协议,操作系统,Socket编程以及Visual C+编程的核心技术。根据密码学的经典算法,基于网络安全开发包Crypto,OpenSSL以及不使用网络安全开发包进行密码学编程。网络扫描器的设计、防火墙和入侵检测系统设计。应用系统安全编程,包括安全WEB程序设计和安全电子邮件编程。(根据课时可能进行调整。)网络安全程序设计网络安全程序设计 第一讲第一讲 网络安全程序设计基础(一)1.协议基础-OSI参考模型 网络安全程序设计网络
7、安全程序设计 第一讲第一讲 OSI 7层模型数据传输网络安全程序设计网络安全程序设计 第一讲第一讲 OSI 安全体系结构网络安全程序设计网络安全程序设计 第一讲第一讲 TCP/IP模型网络安全程序设计网络安全程序设计 第一讲第一讲 操作系统1.Linux操作系统2.Windows操作系统网络安全程序设计网络安全程序设计 第一讲第一讲 网络安全组成 客户端安全 在客户端部分主要涉及具体用户使用网络的安全完全问题。例如,个人数据的安全性。用户把计算机连入网络后,其就是一个客户端。要保证个人数据的安全,需要建立良好的使用网络的习惯。还有一些比较常用的软件,例如文字处理软件、媒体播放器软件、电子邮件接
8、收和阅读软件,也容易受到威胁。网络安全程序设计网络安全程序设计 第一讲第一讲 网络安全组成服务器安全 服务器方面的安全性也至关重要,很多重要的数据都放在服务器里面。对于重要数据的保护则需要更加强大的安全措施,例如使用专业的防火墙设备、入侵检测系统、安全扫描系统,针对特定服务器的保护系统。最常用的客户端和服务器系统是Web 浏览器和Web 服务器系统,它们的安全性在网络安群内容中占据重要的地位,针对Web浏览器和Web服务器的攻击数量庞大,种类繁多,危害性也很大。网络安全程序设计网络安全程序设计 第一讲第一讲 网络安全组成-网络设施安全 网络设施的安全保护重要的网络设备,例如路由器交换机等重要设
9、备,防止由于故障例如停电以及其他自然灾害造成系统瘫痪、电源故障会造成设备断电,导致操作系统引导失败或数据信息丢失等。网络安全程序设计网络安全程序设计 第一讲第一讲 套接字编程套接字概念 套接字(套接字(Socket)是用来实现主机和主机通信的一个接口,)是用来实现主机和主机通信的一个接口,通过它可以完成主机间的通信操作,它屏蔽了底层的协议,通过它可以完成主机间的通信操作,它屏蔽了底层的协议,让用户能够实现各种类型的通信操作。它的出现,为网络应让用户能够实现各种类型的通信操作。它的出现,为网络应用程序的编写提供了极大的方便。它是网络通信中应用程序用程序的编写提供了极大的方便。它是网络通信中应用程
10、序对应的进程和网络协议之间的接口。对应的进程和网络协议之间的接口。网络安全程序设计网络安全程序设计 第一讲第一讲 进程与套接字 网络安全程序设计网络安全程序设计 第一讲第一讲 套接字是一个双向通信设备,可用于同一台主机上不同进程之间的通信,也可用于沟通位于不同主机的进程。套接字是所有进程间通信方法中唯一允许跨主机通信的方式。Internet 程序,如Te l n e t、rlogin、FTP、talk 和万维网都是基于套接字的。网络安全程序设计网络安全程序设计 第一讲第一讲 套接字主要参数 端口:定义:一种抽象的软件结构,应用程序通过系统调用与某端口建立连接后,传输层给该端口的数据都被相应的进
11、程接收,相应的进程发给传输层的数据都通过该端口输出端口号:一个整形标示符,来表示端口,取值为065535,1024以下的端口保留给预定义的服务注意:TCP/IP传输层的两个协议TCP与UDP是完全独立的两个软件模块,因此各自端口独立,也就是说TCP/UDP可以拥有相同的端口号IP 地址:所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。按照TCP/IP协议规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节网络安全程序设计网络安全程序设计 第一讲第一讲 套接字分类(1)流套接字(SOCK_STREAM)流套接字用于提供面向连接、可靠的
12、数据传输服务。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。(2)数据报套接字(SOCK_DGRAM)数据报套接字提供了一种无连接的服务。数据报套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数据报套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。(3)原始套接字(SOCK_RAW)原始套接字(SOCKET_RAW)允许对较低层次的协议直接访问,比如IP、ICMP协议,它常用于检验新的协议实现,或者访问现有服务中
13、配置的新设备,网络安全程序设计网络安全程序设计 第一讲第一讲 连接过程网络安全程序设计网络安全程序设计 第一讲第一讲 客户机/服务器模式 在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model)。该模式的建立基于以下两点:1、非对等作用;2、通信完全是异步的。客户机/服务器模式在操作过程中采取的是主动请示方式:首先服务器方要先启动,并根据请示提供相应服务:(过程如下)(1)打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收客户请求。(2)等待客户请求到达该端口。(3)接收到重复服务请求,处理该请求并发送应答信号。(4)返回第二步,
14、等待另一客户请求(5)关闭服务器。网络安全程序设计网络安全程序设计 第一讲第一讲 客户方:(1)打开一通信通道,并连接到服务器所在主机的特定端口。(2)向服务器发送服务请求报文,等待并接收应答;继续提出请求(3)请求结束后关闭通信通道并终止。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。网络安全程序设计网络安全程序设计 第一讲第一讲 基本套接字1.创建套接字socket()2.指定本地地址bind()3.建立套接字连接connect()和accept()4.监听连接listen()5.数据传输send()与recv()6.
15、多路复用select()7.关闭套接字closesocket()网络安全程序设计网络安全程序设计 第一讲第一讲 WinSock编程相关函数 -Win32 API 相关套接字常用函数1.套接字版本协商函数原型int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);网络安全程序设计网络安全程序设计 第一讲第一讲 2.创建套接字 函数原型SOCKET socket(int af,int type,int protocol);网络安全程序设计网络安全程序设计 第一讲第一讲 3.绑定端口(服务器)函数原型int bind(SOCKET s,c
16、onst struct sockaddr FAR*name,int namelen);网络安全程序设计网络安全程序设计 第一讲第一讲 4.点分十进制转换成无符号长整形 函数原型unsigned long inet_addr(const char FAR*cp);参数说明:cp 一个点分十进制的IP地址形式的字符串返回值 一个对应cp点分十进制的unsigned long类型的数值网络安全程序设计网络安全程序设计 第一讲第一讲 5.无符号长整形转换成点分十进制 函数原型char FAR*inet_ntoa(struct in_addr in);参数说明in:一个点分十进制的unsigned lo
17、ng类型的数值返回值 一个对应in点分十进制的IP地址形式的字符串网络安全程序设计网络安全程序设计 第一讲第一讲 6.主机字节顺序转换为网络字节顺序16位数值函数原型u_short htons(u_short hostshort);参数说明:hostshort一个以主机字节顺序表示的16位数值返回值:把一个u_short类型的值从主机字节顺序转换为网络字节顺序32位数值函数原型u_long htonl(u_long hostlong);参数说明:hostlong:一个以主机字节顺序表示的32位数值返回值:把一个u_long类型的值从主机字节顺序转换为网络字节顺序网络安全程序设计网络安全程序设计
18、 第一讲第一讲 相关结构体及宏struct WSAData WORD wVersion;/打算使用的Winsock版本号WORD wHighVersion;/容纳的是现有的Winsock最高版本号,以高字节代表的是Winsock的副版本,低字节表示的是搞版本号char szDescriptionWSADESCRIPTION_LEN+1;char szSystemStatusWSASYSSTATUS_LEN+1;/以下两个参数一般不设置它unsigned short iMaxSockets;/同时最多可以打开多少套接字unsigned short iMaxUdpDg;/数据报的最大长度/同时最多
19、可以打开套接字数目很大程度上和可用物理内存的多少有关char FAR*lpVendorInfo;/这个参数Winsock实施方案有关的指定厂商信息预留的,任何一个Win32平台上都没有使用这个字段;网络安全程序设计网络安全程序设计 第一讲第一讲 主要数据结构地址结构struct sockaddr unsigned short sa_family;/指定地址家族,对于TCP/IP协议的套接字,必须设置为AF_INETchar sa_data14;/仅仅表示要求一块内存分配区,启到占位作用,该区域中指定与协议相关的具体地址信息,由于实际要求的只是内存区,所以对于不同的协议家族,用不同的协议家族,用
20、不同的结构来替换sockaddr;网络安全程序设计网络安全程序设计 第一讲第一讲 TCP/IP地址结构struct sockaddr_inshort sin_family;/指定地址家族,对于TCP/IP协议的套接字,必须设置为AF_INETunsigned short sin_port;/指定要分配给套接字的端口struct in_addr sin_addr;/套接字的主机的IP地址char sin_zero8;/一个填充占位符;/在TCP/IP编程中用这个结构体来替换sockaddr结构体地址表示struct in_addr union struct u_char s_b1,s_b2,s_
21、b3,s_b4;S_un_b;struct u_short s_w1,s_w2;S_un_w;u_long S_addr;S_un;网络安全程序设计网络安全程序设计 第一讲第一讲 (3)MAKEWORD宏MAKEWORD(x,y)作用:用于设置DWORD类型的版本号,x是高字节,y是低字节网络安全程序设计网络安全程序设计 第一讲第一讲 基于消息套接字编程相关相关函数1.获得系统中安装的网络协议的相关信息函数原型int WSAEnumProtocols(LPINT lpiProtocols,LPWSAPROTOCOL_INFO lpProtocolBuffer,ILPDWORD lpdwBuff
22、erLength)网络安全程序设计网络安全程序设计 第一讲第一讲 2.注册网络事件函数原型int WSAAsyncSelect(SOCKET s,HWND hWnd,unsigned int wMsg,long lEvent);网络安全程序设计网络安全程序设计 第一讲第一讲 3.创建套接字函数原型SOCKET WSASocket(int af,int type,int protocol,LPWSAPROTOCOL_INFO lpProtocolInfo,GROUP g,DWORD dwFlags);网络安全程序设计网络安全程序设计 第一讲第一讲 MFC常用函数初始化套接字 AfxSocketI
23、nit函数原型如下:BOOL AfxSocketInit(WSADATA*lpwsaData=NULL);作用:MFC提供的创建套接字库的函数网络安全程序设计网络安全程序设计 第一讲第一讲 TCP套接字相关函数1.监听请求(服务器)函数原型int listen(SOCKET s,int backlog);网络安全程序设计网络安全程序设计 第一讲第一讲 2.接收请求(服务器)函数原型SOCKET accept(SOCKET s,struct sockaddr FAR*addr,int FAR*addrlen);网络安全程序设计网络安全程序设计 第一讲第一讲 3.发送数据函数原型int send(
24、SOCKET s,const char FAR*buf,int len,int flags);网络安全程序设计网络安全程序设计 第一讲第一讲 4.接收数据函数原型int recv(SOCKET s,char FAR*buf,int len,int flags);网络安全程序设计网络安全程序设计 第一讲第一讲 5.建立连接(客服端)函数原型int connect(SOCKET s,const struct sockaddr FAR*name,int namelen);网络安全程序设计网络安全程序设计 第一讲第一讲 UDP套接字相关函数1.接收数据函数原型int recvfrom(SOCKET s
25、,char FAR*buf,int len,int flags,struct sockaddr FAR*from,int FAR*fromlen);网络安全程序设计网络安全程序设计 第一讲第一讲 2.发送数据函数原型int sendto(SOCKET s,const char FAR*buf,int len,int flags,const struct sockaddr FAR*to,int tolen);网络安全程序设计网络安全程序设计 第一讲第一讲 3.消息接收(基于消息机制)函数原型int WSARecvFrom(SOCKET s,LPWSABUF lpBuffers,DWORD dwB
26、ufferCount,LPDWORD lpNumberOfBytesRecvd,LPDWORD lpFlags,struct sockaddr FAR*lpFrom,LPINT lpFromlen,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);网络安全程序设计网络安全程序设计 第一讲第一讲 4.消息发送(基于消息机制)函数原型int WSASendTo(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNu
27、mberOfBytesSent,DWORD dwFlags,const struct sockaddr FAR*lpTo,int iToLen,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);网络安全程序设计网络安全程序设计 第一讲第一讲 编写基于 UDP 套接字通信网络安全程序设计网络安全程序设计 第一讲第一讲 编写基于 TCP 套接字通信网络安全程序设计网络安全程序设计 第一讲第一讲 编写基于消息机制的UDP 套接字通信网络安全程序设计网络安全程序设计 第一讲第一讲 L
28、inux Socket编程相关函数1.创建套接字 socket函数原型为:int socket(int domain,int type,int protocol);2.套接字地址 struct sockaddr struct sockaddr_in3.命名套接字 int bind(int sockfd,struct sockaddr*my_addr,int addrlen);网络安全程序设计网络安全程序设计 第一讲第一讲 4.创建套接字队列 int listen(int sockfd,int backlog);5.接受连接 accept()连接端口的服务请求。6.请求连接 int connect(int sockfd,struct sockaddr*serv_addr,int addrlen);7.数据传输 Send()和recv()数据传输8.关闭套接字 Close()和shutdown()结束数据传输