第一篇:关于2014年网络与信息安全重点工作的函
关于2014年网络与信息安全重点工作
公司各单位:
根据省公司2014年网络与信息安全总体工作部署,现将近期网络与信息安全重点工作分解如下:
一、“净网2014”专项整治工作:
1、主要执行部门:网络部、政企客户部
2、主要工作内容:
(1)网站备案工作:
为有效、主动防范使用我公司公网IP地址且未备案网站上线运行的情况发生,对于存量公网IP地址开放80、8080端口的集团客户政企客户部负责联系取得备案所需各项材料于5月30日前完成备案工作;现网络专业已限制未备案从外向内TCP 80、8080端口的访问权限,确认备案成功后开放相关端口访问权限。对于新增需开放80、8080端口的集团客户,需政企客户部提供备案成功信息后,网络专业开放端口。
为避免由于集团客户侧网络设备及用户自有服务器断电等情况造成端口开放情况统计不全的情况,网络专业将不定期对我公司使用的公网IP地址进行端口开放情况的扫描,核实开放80、-1-
8080端口的访问权限的公网IP地址是否备案,如未备案立即关停并第一时间通知业务部门进行备案工作。
二、垃圾短彩信治理专项提升工作:
1、主要执行部门:网络部、政企客户部、市场经营部
2、主要工作内容:
(1)建立健全垃圾短彩信自查与预警机制。从基础管理入手,建立各部门联动机制,将垃圾短彩信的治理工作落实到基层,落实到人。定期自查端口类和点对点垃圾短彩信存在的风险隐患,及时预警并制定有效解决方案。
(2)加强集团短彩信业务准入审核。合作协议是规范集团短彩信业务发展的前提,为从法律角度防范垃圾信息出现,对存量集团短彩信业务要求于5月20日前与客户按新的业务受理单及协议重新签订,5月30日前将扫描件上报省公司。
(3)严格执行企业签名要求。企业签名作为入网审核的重要内容,入网时即应审定。确保除党政军及涉密单位外,其他客户都必须添加企业签名,签名规范应符合业务管理办法要求。5月30日前完成对存量的集团短彩信客户的企业签名进行规范性、一致性核查及整改。
(4)做好客户分层分级管理。严格按照业务管理办法中客户分层分级管理的要求,对不同等级客户设定不同的白名单数量 2- -
上限和发送流量上限值。尽量缩小黑名单的使用范围,有效避免垃圾短信的产生。
(5)加强自用端口的管理,清理并关闭无必要的自用端口。严禁利用任何自用端口(含MAS、政企手机报、企信通)发送营销、宣传等信息,要求在5月30日前完成自用端口梳理及清理工作,对于除业务测试、内部应用管理外的其他自用端口进行关闭。
(6)严格执行资费底线要求。严格执行按省公司规定集团短彩信资费标准执行,同时加强促销优惠活动的管理,折扣后或促销后的短信实际价格不得低于0.05元/条,彩信实际价格不得低于0.15元/条。
三、客户信息安全管理工作:
1、主要执行部门:网络部、政企客户部、市场经营部
2、主要工作内容:
(1)电话实名制登记工作。根据省公司要求,严格落实“两个必须”和“一个严禁”要求,新增电话用户实名登记率达到100%;2014年底,总体客户实名制登记率提升达到85%以上。
(2)工号管理工作。切实落实营业工号管理,完善工号权限增减流程,严格执行工号开通、注销和赋权管理,严禁工号滥用;建立异常业务现象发现和核查工作机制。
-3-
(3)加强代理渠道的日常监督检查工作。
四、加强网络与信息安全教育
公司各部门加强员工岗前培训、日常业务培训,增加客户信息安全保护意识教育、保护方法辅导,杜绝出现客户信息泄露事件。
4- -
第二篇:网络与信息安全
《网络与信息安全》复习资料
信息安全特征:完整性、保密性、可用性、不可否认性、可控性。保密学是研究信息系统安全保密的科学。
网络信息安全体系结构框架:安全控制单元、安全服务层面、协议层次。公钥密码:由两个密码组成,每个用户拥有一对选择密钥:加密密钥与解密密钥。公钥密码特点:(1)加密密钥和解密密钥在本质上是不同的,即使知道一个密钥,也不存在可以轻易地推导出另一个密钥的有效算法。(2)不需要增加分发密钥的额外信道。公布公钥空间,不影响公钥系统的保密性,因为保密的仅是解密密钥。公钥密码系统应具备两个条件:(1)加密和解密交换必须满足在计算上是容易的。(2)密码分析必须满足在计算机上是困难的。协议:两个或两个以上的主体为完成某一特定任务共同发起的某种协约或采取的一系列步骤。协议的特征:(1)至始至终有序进行。(2)协议成立至少要有两个主体。(3)协议执行要通过实体操作来实现。数字签名与手写签名的区别:(1)签名实体对象不同。(2)认证方式不同。(3)拷贝形式不同。
签名算法的三个条件:(1)签名者事后不能否认自己的签名。(2)任何其他人都不能伪造签名,接收者能验证签名。(3)当签名双方发生争执时,可由公正的第三方通过验证辨别真伪。
不可否认数字签名:没有签名者的合作,接收者就无法验证签名,某种程度上保护了签名者的利益,从而可防止复制或散布签名文件的滥用。
不可否认数字签名方案由三部分组成:数字签名算法、验证协议、否认协议。
散列函数:一种将任意长度的消息压缩为某一固定长度的消息摘要的函数。消息认证码:满足某种安全性质带有密钥功能的单向散列函数。身份证明分两大娄:身份证实、身份识别。信息隐藏:把一个有含义的信息隐藏在另一个载体信息中得到隐密载体的一种新型加密方式。
信息隐藏的两种主要技术:信息隐秘术、数字水印术。数字水印技术:指用信号处理的方法在数字化的多媒体数据中嵌入隐藏标识的技术。
三种数字水印:(1)稳健的不可见的水印。(2)不稳健的不可见的水印。(3)可见的水印。
数字水印三个特征:(1)稳健性。(2)不可感知性。(3)安全可靠性。
数字水印三个部分:(1)水印生成。(2)水印嵌入。(3)水印提取(检测)。
密钥管理的基本原则:(1)脱离密码设备的密钥数据应绝对保密。(2)密码设备内部的密钥数据绝对不外泄。(3)密钥使命完成,应彻底销毁、更换。常用密钥种类:(1)工作密钥。(2)会话密钥。(3)密钥加密密钥。(4)主机主密钥。
公开密钥分发:(1)广播式密钥分发。(2)目录式密钥分发。(3)公开密钥机构分发。(4)公开密钥证书分发。密钥保护方法:(1)终端密钥保护。(2)主机密钥保护。(3)密钥分级保护管理。
秘密共享方案:将一个密钥K分成n个共享密钥K1、K2……Kn,并秘密分配给n个对象保管。密钥托管技术:为用户提供更好的安全通信方式,同时允许授权者为了国家等安全利益,监听某些通信和解密有关密文。密钥托管加密体制由三部分组成:用户安全分量、密钥托管分量、数据恢复分量。密钥管理:指对于网络中信息加密所需要的各种密钥在产生、分配、注入、存储、传送及使用过程中的技术和管理体制。
保密通信的基本要求:保密性、实时性、可用性、可控性。密码保护技术:密码校验、数字签名、公证消息。通信保密技术:(1)语音保密通信(模拟置乱技术、数字加密技术)。(2)数据保密通信。(3)图像保密通信(模拟置乱、数字化图象信号加密)。网络通信加密的形式:(1)链路加密。(2)端-端加密。(3)混合加密。网络通信访问基本控制方式:(1)连接访问控制。(2)网络数据访问控制。(3)访问控制转发。(4)自主访问控制与强制访问控制。接入控制功能:(1)阻止非法用户进入系统。(2)允许合法用户进入系统。(3)使合法用户按其权限进行活动。接入控制策略:(1)最小权限策略。(2)最小泄漏策略。(3)多级安全策略。接入控制技术方法:(1)用户标识与认证。(2)身份认证特征(口令认证方式、协议验证身份)。
PGP的五种功能:认证性、机密性、压缩、Email兼容性、分段与重组。IP层安全功能:鉴别服务、机密性、密钥管理。
安全套接层SSL提供的安全服务:信息保密、信息完整性、相互认证。
PPDR-A模型五要素:安全策略、安全监测、安全反应、安全防御、安全对抗。操作系统安全访问控制:测试程序访问控制、操作系统的访问权限控制、保护机制的访问控制、用户认证访问控制。
安全操作系统设计四环节:安全模型、安全设计、安全确认、正确实施。安全网络平台种类:Windows NT、UNIX、Linux。(Linux兼容性好、源代码开放、安全透明)。
数据库安全条件:数据独立性、数据安全性、数据完整性、数据使用性、备份与恢复。
VPN(虚拟专用网)核心技术:隧道技术、密码技术、管理技术。
政务网的特点:信息公众化、信息机关化、信息存储量大、保密程度高、访问密级多样化。
政务网建设的三个安全域:(1)涉密域。(2)非涉密域。(3)公共服务域。
黑客攻击:指黑客利用系统漏洞和非常规手段,进行非授权的访问行为和非法运行系统或非法操作数据。
防黑客攻击几种防范技术:安全性设计保护、先进的认证技术、扫描检测审计技术。
常规网络扫描工具:SATAN扫描工具、Nessus安全扫描器、nmap扫描器、strobe扫描器。网络监听工具:NetXRay、Sniffit。防火墙:在网络安全边界控制中,用来阻止从外网想进入给定网络的非法访问对象的安全设备。包括网络级包过滤防火墙和应用级代理防火墙。
密罐:用来观察黑客如何入侵计算机网络系统的一个软件“陷阱”,通常称为诱骗系统。
计算机病毒:指编制或者在计算机程序中插入的破坏计算机功能或者数据,影响计算机使用并且能够自我复制的一组计算机指令或者程序代码。病毒检测方法:比较法、搜索法、辨别法、分析法。
电子商务安全要求:可靠性、真实性、机密性、完整性、有效性、不可抵赖性、可控性。
电子商务安全服务:鉴别服务、访问控制服务、机密性服务、不可否认服务。电子商务基本密码协议:密钥安全协议、认证安全协议、认证的密钥安全协议。国际通用电子商务安全协议:SSL安全协议、SET安全协议、S-HTTP安全协议、STT安全协议。
电子商务实体要素:持卡人、发卡机构、商家、银行、支付网关、认证机构。
第三篇:网络与信息安全自查报告
网络与信息安全自查报告
(参考格式)
一、自查报告名称
×××(部门/单位名称)信息安全自查报告
二、自查报告组成
自查报告包括主报告和检查情况报告表两部分。
三、主报告内容要求
(一)信息安全自查工作组织开展情况
概述此次安全检查工作组织开展情况、所检查的重要网络与信息系统基本情况。
(二)信息安全工作情况
对照《检查通知》要求,逐项、详细描述本部门(单位)在安全管理、技术防护、应急处置与灾备等方面工作的检查结果。
(三)自查发现的主要问题和面临的威胁分析
1.发现的主要问题和薄弱环节
2.面临的安全威胁与风险
3.整体安全状况的基本判断
(四)改进措施与整改效果
1.改进措施
2.整改效果
(五)关于加强信息安全工作的意见和建议
四、信息安全检查情况报告表要求
检查情况报告表应如实填写,不要出现漏项、错项、前后不一致等情况。
第四篇:网络与信息安全自查报告
网络与信息安全自查报告
接供电局《开展网络信息安全生产专项检查》的通知,我公司深刻领会文件精神,积极组织落实,认真对照,对网络安全基础设施建设情况,网络与信息安全防范技术情况进行了自查,现将自查情况汇报如下:
一、自查工作组织开展情况:
此次自查工作由生产技术部牵头,安环部,热电分厂,电石分厂负责具体落实。对所属的分散控制系统(DCS),计算机监控系统,负荷控制系统进行检查,集体如下:热电所选用的控制系统为杭州和利时自动化有限公司的MACSV系统,完成对数据的采集,控制和监控。MACSV系统网络分为监控网络,系统网络和控制网络三个层次,三种网络以“站”的形式连接。包括数据站,工程师站,操作员站和现场控制站;涉及的版本号为MACSV5.2.4 中英文正式版,MACSV6.5.1和6.5.2 #3机炉和供热,操作系统版本WINXP+SP3;主从服务器系统版本为WIN SEVER2003;监控网络采用TCP/IP通讯协议,冗余高速工业以太网链接,系统网络采用HSIE通讯协议,冗余高速工业以太网链接,控制网络采用profibus-DP现场总线,位于现场控制站内部。
二、网络与信息安全工作情况:
1、硬件安全:包括防雷,防火和UPS电源链接等,运维人员每天坚持巡查,排除安全隐患,服务器,交换机,现场控制站等都有UPS电源保护,可以保证短时间断电情况下,设备运行正常,不会因突然断电导致设备无法运行或损坏。此外,局域网内所有计算机USB接口实行完全封闭,有效避免了因外接设备(如U盘,硬盘,其他移动设备)而引起中毒或泄密的发生。
2、网络安全:包括网络结构、密码管理、IP管理等;交换机、路由器、光纤收发器等都有备品备件,发生故障可以在第一时间更换,保证设备的稳定运行。
3、应急处置:我厂系统服务器运行安全,稳定,并配备了大型UPS电源,可以保证大面积断电情况下,服务器坚持运行半小时以上。虽然系统长期稳定,运行良好,但我厂依然定了应急处置预案,并定期进行事故应急演练。
总体来说,我厂对网络与信息完全工作非常重视,未发生过重大安全事故,各系统运转稳定。但自查中也发现了不足之处,如目前没有专门的技术人员,日常检查维护由热工人员担任,而且热工人员也没有经过专门的信息安全培训,安全力量有限。今后还需要加强信息技术人员的培养,更进一步提高信息安全技术水平,提高系统运行的安全性和工作效率。
4、技术防护:
1.1物理环境安全;程师站、算机房不断改造,均有门禁,防盗上锁;监视器防火防灾报警装置,供电和通信系统采用双线冗余;人员出入有出入登记制度;
1.2运维管理;根据内容要求,设备,系统的运维都有相应的日志记录和程序变更记录,以及强制单的管理和记录,并将工程师站和操作员站分离,有独自的登录账号和密码,并分别配有加密狗保证系统的运行安全。
三、网络安全存在以下几点不足:1、2、3、安全防范意识较为薄弱;
病毒监控能力有待高;
遇到恶意攻击,计算机病毒侵袭等突发事件处理不够及时。
四、整改办法与措施:
1、加强计算机操作技术水平,网络安全技术方面的培训;强化计算机操作人员对病毒,信息安全的防范意识。
2、加强计算机维护人员在计算机技术,网络技术方面的学习,不断提高计算机主管人员的技术水平。
意见建议:
建议按列支相关经费,组织相关人员进行培训,应急演练,改造等工作的开展。
热电分厂检修车间热工班
2016.6.14
第五篇:网络与信息安全实验报告
计算机科学与技术学院
网络与信息安全课程设计
学
号:
专
业:计算机科学与技术
学生姓名:
任课教师:***
2017年3月
FTP服务器的设计与实现
***
计算机科学与技术学院,哈尔滨工程大学
摘要:FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:“下载”(Download)和“上传”(Upload)。“下载”文件就是从远程主机拷贝文件至自己的计算机上;“上传”文件就是将文件从自己的计算机中拷贝至 远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。本文基于FTP协议搭建了一个FTP服务器,实现简单的上传下载功能。关键字:FTP,网络协议,服务器
一、FTP协议的工作原理
1.简介
FTP是因特网网络上历史最悠久的网络协议,凭借其独特的优势一直都是因特网中最重要、最广泛的服务之一。FTP是TCP/IP提供的标准机制,实现从一台主机向另一台主机传送文件的任务。目前FTP客户端软件很多,大致我们可以把它们分为三类:第一类是传统的FTP客户机;第二类是图形化用户界面的FTP软件;第三类是Web浏览器。
从根本上说,FTP就是在网络中各种不同的计算机之间按照TCP/IP协议来传输文件。FTP采用的是现在流行的Client/Server模式,由FTP客户端和FTP服务器端程序组成。通常服务器端是远程端点,用户可以通过Internet网络连接到远程的FTP服务器站点。服务器的功能是主要的。只有当FTP服务器支持各种协议和指令时,才能够开发相应的客户端程序。
开发任何基于FTP的客户端软件都必须遵循FTP的工作原理,FTP的独特的优势同时也是与其它客户服务器程序最大的不同点就在于它在两台通信的主机之间使用了两条TCP连接,一条是数据连接,用于数据传送;另一条是控制连接,用于传送控制信息(命令和响应),这种将命令和数据分开传送的思想大大提高了FTP的效率,而其它客户服务器应用程序一般只有一条TCP连接。图1给出了FTP的基本模型。客户有三个构件:用户接口、客户控制进程和客户数据传送进程。服务器有两个构件:服务器控制进程和服务器数据传送进程。在整个交互的FTP会话中,控制连接始终是处于连接状态的,数据连接则在每一次文件传送时先打开后关闭。用户接口 控制连接控制进程控制进程命令与应答数据连接数据传送进程数据传送进程文件传输图1 FTP的基本模型
FTP是TCP/IP的一种具体应用,它工作在OSI模型的第七层,TCP模型的第四层上,即应用层,使用TCP传输而不是UDP,这样FTP客户在和服务器建立连接前就要经过一个被广为熟知的“三次握手”的过程,它带来的意义在于客户与服务器之间的连接是可靠的,而且是面向连接,为数据的传输提供了可靠的保证。采用FTP协议可使 Internet用户高效地从网上的FTP服务器下载大信息量的数据文件,将远程主机上的文件拷贝到自己的计算机上。以达到资源共享和传递信息的目的。由于FTP的使用使得Internet上出现大量为用户提供的下载服务器。Internet成为了一个巨型的软件仓库。FTP在文件传输中还支持断点续传功能,可以大幅度地减小CPU和网络带宽的开销。
FTP需要2个端口,一个端口是控制连接端口,也即21端口,用于发送指令给服务器并等待服务器响应;另一个端口是数据传输端口,端口号为20(仅PORT模式),用于建立数据传输通道。
FTP的连接模式有2种:PORT和PASV。PORT模式是一个主动模式,PASV是被动模式,二者都是相对于服务器而言的。2.FTP运行原理
FTP的工作原理与其他许多网络实用程序一样,也是基于客户/服务器模式。互联网文件传输协议(File Transfer Protocol)标准是在FTC959说明的。该协议定义了一个在远程计算机系统和本地计算机系统之间传输文件的标准。一般来说,要传输文件的用户需先经过认证以后才能登录ftp服务器,访问在远程服务器的文件。大多数的FTP服务器往往提供一个guest的公共帐户来允许没有FTP服务器帐户的用户可以访问该FTP服务器。一个FTP会话通常包括五个软件元素的交互。就模型而言,从1973年以来并没有什么变化。如图2所示。
用户接口用户SPIUSERPI文件系统SDTPUDTP图2 FTP协议模型
文件系统
在一个FTP会话中,会存在两个独立的网络连接,一个是由两端的PI使用的,另一个是由两端的DTP使用的。PI之间的连接一般被称作控制连接(control connection),DTP之间的连接被称作数据连接(data connection)。通常情况下,ftp服务器监听端口号21来等待控制连接建立请求,当客户连接请求到达,会在客户和ftp服务器之间建立一个控制连接。而数据连接端口号的选择依赖于控制连接上的命令,通常是客户发送一个控制消息来指定客户需要建立一个数据连接来传输ftp数据(如下载/上载一个文件,显示当前目录的内容等等,都需要建立数据连接来传输数据),在该消息中,指定了客户监听并等待连接的端口号,而服务器从控制连接收到该命令,向客户端发起一个连接请求到消息中指定的端口号,客户端收到该请求以后就会建立一个数据连接。连接建立以后,服务器或客户就会主动通过该连接发送数据(可能是要传输的文件,也可能是用户在命令行上发出的IS命令的输出)。
二、系统设计与实现 功能要求
本系统是一个在局域网内实现的小型FTP文件传输服务器。主要实现的是FTP服务器端功能,包括:FTP服务日志,在线用户的管理,统计客户端信息还有客户端上传、下载、选择数据传输模式、改变目录等,并给出相应的提示。2 主界面 程序界面主要包括服务器日志、在线用户、统计信息、安全管理、菜单栏、工具栏、状态栏。如图5所示。
图5 服务器用户界面 主要功能与实现
用CSocket类编制的服务器端的程序,其过程如下,其过程主要是: 创建CSocket对象。创建底层套接字Socket。
调用Listen,开始监听从客户端发来的访问请求。
如果收到请求,调用CAsyncSocket::Accept()函数进行接收外理。建立CSocketFile对象,并且使该对象与CSocket对象具备一定的联系。
建立Carchive对象,以便实现卸装(接收)数据和存储(发送)数据的目的地址。当然,该Carchive对象应该与前面的CSocketFile对象建立联系。
使用Carchive对象在客户和服务器Socket之间传递数据,从而实现服务器Socket和客户机Socket之间的通信。值得注意的是,一个给定的Carchive对象只能在单一的方向上传递数据:或者接收,或者发送。一般情况下,可能需要两个Carchive对象来实现数据的双向传递。
3.1菜单栏功能模块
菜单拦包括:服务器,查看。
服务器菜单包括:开始,停止,用户账户向导,用户账户等功能。查看菜单包括:服务器日志,在线用户,配置,统计,安全等功能。各项功能实现如下: 服务器功能:
(1)帐户向导:当你 登录服务器时你需要一个有效的账户,用户帐户向导将引导您通过必要的步骤,创造一个新的用户帐户。并将其添加到用户帐户对话框,创建用户名,如图6所示。
图6 用户帐户向导窗口
通过这个窗口你可以创建自己的用户名以及密码用以登陆FTP服务器,该部分功能实现代码如下:
(2)用户帐户功能:这一功能主要是服务器端添加,修改和删除用户帐户,设置目录权限(使用添加按钮以添加一个新目录,其中选定的用户帐户已具有访问权限,每小组目录您可以设定不同的权限,例如你可以给所有权限到C:下载,但限制的权限为C :下载申请时,没有权限指定的目录,在这个目录中它会自动阻止用户要求上传任何子目录)。目录属性,当您添加的编辑目录的用户帐户,目录属性对话框将显示物理目录(物理目录是'真正'的路径文件夹的名称)。虚拟目录(虚拟目录是一个物理文件夹的别名,当用户连接到您的FTP服务器,它将看到这个目录名而不是真正的物理名称)。设制服务端允许客户端的权限,例如允许客户端可以下载,上传,重命名哪些服务器端的文件内容。例如用户123将: E:盘设为许可目录,客户端就可以随时下载,上传E:盘里面的内容,如图7所示。
图7 用户帐户窗口
3.2 查看功能模块
(1)服务器日志模块的功能:在此屏幕,记录客户端与服务器端的连接信息以及传输信息,当客户端登陆服务器时服务器日志会显示是否与服务器连接成功,当客户端要上传文件或是下载文件成功时会记录服务器和FTP客户端的详细资料,从而有助于您追踪服务器与客户端之间所有的通讯讯息,数目之间的方括号[ ]是线程ID,如图8所示。
图8 服务器日志窗口
(2)在线用户模块的功能:通过服务器来查看在线客户端的用户名,用户IP地址,用户登陆时间等信息,如图9所示。
图9 在线用户窗口
(3)配置模块的功能:配置FTP服务器所有的设置。默认服务器端口为21,可以同时连接最多用户数,客户端与服务器端连接时间(当客户端已闲置的具体时间,它会自动断开),欢迎信息(当客户端连接到服务器时将会显示该文本),再见讯息(文本将显示当一个客户端从服务器断开时)其他设置,FTP服务器在Windows下启动,启动最小化在系统盘,并在启动时自动激活服务器。用户还可以将用户各种信息都记录在服务器日志里,如图10所示。
图10 配置界面
三、实验结论
本次实验实现了一个基于FTP协议的服务器系统,基本完成了FTP服务器所需的大多数功能。用户能够选择相应的数据传输模式,对指定的文件进行上传下载。通过该程序的开发,涵盖了一个FTP服务器所应该具有的功能,能够解释一般的FTP命令,符合相应的规范。
四、参考文献
[1]蔡勇.FTP服务器技术研究及实现[D].电子科技大学,2005.[2]王占军,王伟,赵志刚.基于FTP协议的文件传输组件设计与实现[J].沈阳师范大学学报(自然科学版),2012,03:375-377.[3]吴珂,卢秉亮,张磊.基于FTP协议客户端软件的实现[J].沈阳航空工业学院学报,2006,04:39-42.五、源代码
// stdafx.cpp : source file that includes just the standard includes // FTPServer.pch will be the pre-compiled header // stdafx.obj will contain the pre-compiled type information
#include “stdafx.h” CString BrowseForFolder(HWND hWnd, LPCSTR lpszTitle, UINT nFlags){ // We're going to use the shell to display a
// “Choose Directory” dialog box for the user.CString strResult = “";
LPMALLOC lpMalloc;
if(::SHGetMalloc(&lpMalloc)!= NOERROR){
// failed to get allocator
return strResult;
}
char szBuffer[_MAX_PATH];char szDisplayName[_MAX_PATH];
BROWSEINFO browseInfo;browseInfo.hwndOwner = hWnd;// set root at Desktop browseInfo.pidlRoot = NULL;
browseInfo.pszDisplayName = szDisplayName;browseInfo.lpszTitle = lpszTitle;browseInfo.ulFlags = nFlags;browseInfo.lpfn = NULL;browseInfo.lParam = 0;
LPITEMIDLIST lpItemIDList;
if((lpItemIDList = ::SHBrowseForFolder(&browseInfo))!= NULL){
// Get the path of the selected folder from the item ID list.if(::SHGetPathFromIDList(lpItemIDList, szBuffer))
{
// At this point, szBuffer contains the path the user chose.if(szBuffer[0] == ' ')
{
// SHGetPathFromIDList failed, or SHBrowseForFolder failed.AfxMessageBox(”Failed to get directory“, MB_ICONSTOP|MB_OK);
return strResult;
}
// We have a path in szBuffer!
strResult = szBuffer;
return strResult;
}
else
{
// The thing referred to by lpItemIDList
// might not have been a file system object.// For whatever reason, SHGetPathFromIDList didn't work!
AfxMessageBox(”Failed to get directory“, MB_ICONSTOP|MB_OK);
return strResult;// strResult is empty
}
lpMalloc->Free(lpItemIDList);
lpMalloc->Release();
} return strResult;}
void DoEvents(){ MSG msg;
// window message
while(PeekMessage(&msg,NULL,NULL,NULL,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} void GetAppDir(CString& strAppDir){ TCHAR szFullPath[MAX_PATH];TCHAR szDir[_MAX_DIR];TCHAR szDrive[_MAX_DRIVE];
// Get application's full path.::GetModuleFileName(NULL, szFullPath, MAX_PATH);
// Break full path into seperate components._splitpath(szFullPath, szDrive, szDir, NULL, NULL);// Store application's drive and path strAppDir.Format(_T(”%s%s“), szDrive, szDir);} PFNSHGETFOLDERPATHA GetFuncPtr_SHGetFolderPathA(){ static HMODULE hMod = NULL;PFNSHGETFOLDERPATHA pSHGetFolderPath = NULL;// Load SHFolder.dll only once if(!hMod)
hMod = LoadLibrary(”SHFolder.dll“);
// Obtain a pointer to the SHGetFolderPathA function if(hMod)
pSHGetFolderPath =(PFNSHGETFOLDERPATHA)GetProcAddress(hMod, ”SHGetFolderPathA“);return pSHGetFolderPath;}
HRESULT CreateStartMenuShortcut(LPSTR lpszShortcutFile, LPSTR lpszDescription, LPTSTR lpszRelativeFolder){ HRESULT hr;PFNSHGETFOLDERPATHA pSHGetFolderPath = NULL;TCHAR lpszLink[MAX_PATH];BOOL bFound = FALSE;
pSHGetFolderPath = GetFuncPtr_SHGetFolderPathA();
// Find the current user's Start Menu Programs folder if(pSHGetFolderPath)
bFound = SUCCEEDED(pSHGetFolderPath(NULL, CSIDL_PROGRAMS, NULL, 0, lpszLink));
if(bFound){
// Proceed to create the shortcut
IShellLink *pIShellLink = NULL;
IPersistFile *ppf = NULL;
WCHAR pLinkUnicode[MAX_PATH];
CoInitialize(NULL);
// Get a pointer to the IShellLink interface.hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,IID_IShellLink,(void **)&pIShellLink);
if(SUCCEEDED(hr))
{
// Get a pointer to IPersistFile interface for saving shortcut
hr = pIShellLink->QueryInterface(IID_IPersistFile,(void **)&ppf);
if(SUCCEEDED(hr))
{
hr = pIShellLink->SetPath(lpszShortcutFile);
hr = pIShellLink->SetDescription(lpszDescription);
if(SUCCEEDED(hr))
{
// Add the target folder to the Start Menu Programs path
lstrcat(lpszLink, ”“);
lstrcat(lpszLink, lpszRelativeFolder);
lstrcat(lpszLink, ”“);
// Create the directory if it does not exist
CreateDirectory(lpszLink,NULL);
// Add the file name for the shortcut
lstrcat(lpszLink, lpszDescription);
lstrcat(lpszLink, ”.lnk“);
// Convert string to Unicode, and call IPersistFile::Save()
MultiByteToWideChar(CP_ACP, 0, lpszLink,-1, MAX_PATH);
hr = ppf->Save(pLinkUnicode, TRUE);
}
ppf->Release();
}
pIShellLink->Release();
}
CoUninitialize();
pLinkUnicode, } return hr;}
void RemoveStartMenuShortcut(LPSTR lpszDescription, LPTSTR lpszRelativeFolder){ PFNSHGETFOLDERPATHA pSHGetFolderPath = NULL;TCHAR lpszLink[MAX_PATH];BOOL bFound = FALSE;
pSHGetFolderPath = GetFuncPtr_SHGetFolderPathA();
// Find the current user's Start Menu Programs folder if(pSHGetFolderPath)
bFound = SUCCEEDED(pSHGetFolderPath(NULL, CSIDL_PROGRAMS, NULL, 0, lpszLink));if(bFound){
// Add the target folder to the Start Menu Programs path
lstrcat(lpszLink, ”“);
lstrcat(lpszLink, lpszRelativeFolder);
lstrcat(lpszLink, ”“);
// Add the file name for the shortcut
lstrcat(lpszLink, lpszDescription);
lstrcat(lpszLink, ”.lnk“);
DeleteFile(lpszLink);} }
CString GetShortcutTarget(LPCTSTR lpszFilename){ CoInitialize(0);
CString strResult;HRESULT hResult;IShellLink *psl;char szPath[MAX_PATH];WIN32_FIND_DATA findData;// Get a pointer to the IShellLink interface.hResult = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink,(void **)&psl);if(SUCCEEDED(hResult)){
IPersistFile *ppf;
// Get a pointer to the IPersistFile interface.hResult = psl->QueryInterface(IID_IPersistFile,(void **)&ppf);
if(SUCCEEDED(hResult))
{
WORD wsz [MAX_PATH];// buffer for Unicode string
// Ensure that the string consists of Unicode characters.MultiByteToWideChar(CP_ACP, 0, lpszFilename,-1, wsz, MAX_PATH);
// Load the shortcut.hResult = ppf->Load(wsz, STGM_READ);
if(SUCCEEDED(hResult))
{
// Resolve the shortcut.hResult = psl->Resolve(0, SLR_ANY_MATCH|SLR_NO_UI);
if(SUCCEEDED(hResult))
{
lstrcpy(szPath, lpszFilename);
// Get the path to the shortcut target.hResult = psl->GetPath(szPath, MAX_PATH,(WIN32_FIND_DATA *)&findData, 0);
strResult = szPath;
}
}
// Release the pointer to IPersistFile.ppf->Release();
}
// Release the pointer to IShellLink.psl->Release();} CoUninitialize();
if(SUCCEEDED(hResult))
return strResult;else
return ”“;} // Pump messages while waiting for event BOOL WaitWithMessageLoop(HANDLE hEvent, int nTimeout){
DWORD dwRet;while(1){
// wait for event or message, if it's a message, process it and return to waiting state
dwRet = MsgWaitForMultipleObjects(1, &hEvent, FALSE, nTimeout, QS_ALLINPUT);
if(dwRet == WAIT_OBJECT_0)
{
TRACE0(”WaitWithMessageLoop()event triggered.n");
return TRUE;
}
else
if(dwRet == WAIT_OBJECT_0 + 1)
{
// process window messages
AfxGetApp()->PumpMessage();
}
else
if(dwRet == WAIT_TIMEOUT)
{
// timed out!
return FALSE;
}
else
{
// WAIT_ABANDONED_0...return TRUE;
} } } void AutoSizeColumns(CListCtrl *pListCtrl){ // Call this after your the control is filled pListCtrl->SetRedraw(FALSE);int mincol = 0;
int maxcol = pListCtrl->GetHeaderCtrl()->GetItemCount()-1;
for(int col = mincol;col <= maxcol;col++)
{
pListCtrl->SetColumnWidth(col, LVSCW_AUTOSIZE);
int wc1 = pListCtrl->GetColumnWidth(col);
pListCtrl->SetColumnWidth(col, LVSCW_AUTOSIZE_USEHEADER);
int wc2 = pListCtrl->GetColumnWidth(col);
// 10 is minumim column width
int wc = max(10, max(wc1,wc2));
pListCtrl->SetColumnWidth(col,wc);
}
pListCtrl->SetRedraw(TRUE);}