信息安全课设
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息安全课程设计报告
系别:计算机科学与工程学院
专业:信息安全
姓名:某某
学号: 08003602··
指导教师:xxx
2011年9月8日
目录
第1步漏洞现状及应用安全管理软件扫描的分析 (4)
1.1 漏洞介绍与应用现状 (4)
1.2 安全管理软件扫描的分析 (5)
1.2.1 安全管理软件扫描的可行性 (5)
1.2.2 使用管理软件的意义 (6)
第2步安全管理软件的设计与实现 (7)
2.1 需求分析与总体设计 (7)
2.1.1 功能分析 (7)
2.1.2 工程方案选择 (8)
2.2 各部分的设计与开发 (10)
2.2.1 实现扫描的C#核心类库 (10)
3.2 测试数据与分析改进 (14)
3.2.1 扫描生成测试 (15)
3.2.2 输入数据测试 (16)
3.2.3 安全数据分析 (16)
第3步总结与体会 (17)
致谢 (17)
第4步参考文献 (17)
前言
漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。
具体举例来说,比如在Intel Pentium芯片中存在的逻辑错误,在Sendmail早期版本中的编程错误,在NFS协议中认证方式上的弱点,在Unix系统管理员设置匿名Ftp服务时配置不当的问题都可能被攻击者使用,威胁到系统的安全。
因而这些都可以认为是系统中存在的安全漏洞。
漏洞问题是与时间紧密相关的。
一个系统从发布的那一天起,随着用户的深入使用,系统中存在的漏洞会被不断暴露出来,这些早先被发现的漏洞也会不断被系统供应商发布的补丁软件修补,或在以后发布的新版系统中得以纠正。
而在新版系统纠正了旧版本中具有漏洞的同时,也会引入一些新的漏洞和错误。
因而随着时间的推移,旧的漏洞会不断消失,新的漏洞会不断出现。
漏洞问题也会长期存在。
因而脱离具体的
时间和具体的系统环境来讨论漏洞问题是毫无意义的。
只能针对目标系统的作系统版本、其上运行的软件版本以及服务运行设置等实际环境来具体谈论其中可能存在的漏洞及其可行的解决办法。
同时应该看到,对漏洞问题的研究必须要跟踪当前最新的计算机系统及其安全问题的最新发展动态。
这一点如同对计算机病毒发展问题的研究相似。
如果在工作中不能保持对新技术的跟踪,就没有谈论系统安全漏洞问题的发言权,即使是以前所作的工作也会逐渐失去价值。
系统安全漏洞是在系统具体实现和具体使用中产生的错误,但并不是系统中存在的错误都是安全漏洞。
只有能威胁到系统安全的错误才是漏洞。
许多错误在通常情况下并不会对系统安全造成危害,只有被人在某些条件下故意使用时才会影响系统安全。
漏洞虽然可能最初就存在于系统当中,但一个漏洞并不是自己出现的,必须要有人发现。
在实际使用中,用户会发现系统中存在错误,而入侵者会有意利用其中的某些错误并使其成为威胁系统安全的工具,这时人们会认识到这个错误是一个系统安全漏洞。
系统供应商会尽快发布针对这个漏洞的补丁程序,纠正这个错误。
这就是系统安全漏洞从被发现到被纠正的一般过程。
系统攻击者往往是安全漏洞的发现者和使用者,要对于一个系统进行攻击,如果不能发现和使用系统中存在的安全漏洞是不可能成功的。
对于安全级别较高的系统尤其如此。
系统安全漏洞与系统攻击活动之间有紧密的关系。
因而不该脱离系统攻击活动来谈论安全漏洞问题。
了解常见的系统攻击方法,对于有针对性的理解系统漏洞问题,以及找到相应的补救方法是十分必要的。
漏洞会影响到很大范围的软硬件设备,包括作系统本身及其支撑软件,网络客户和服务器软件,网络路由器和安全防火墙等。
换而言之,在这些不同的软硬件设备中都可能存在不同的安全漏洞问题。
在不同种类的软、硬件设备,同种设备的不同版本之间,由不同设备构成的不同系统之间,以及同种系统在不同的设置条件下,都会存在各自不同的安全漏洞问题。
摘要:CGI是Common Gateway Inerface(公用网关接口)的简称,并不特指一种语
言。
Web服务器的安全问题主要包括:1)Web服务器软件编制中的BUG;2)服务器配置的错误。
可能导致CGI源代码泄漏,物理路径信息泄漏,系统敏感信息泄漏或远程执行任意命令。
CGI语言漏洞分为以下几类:配置错误、边界条件错误、访问验证错误、来源验证错误、输入验证错误、策略错误、使用错误等等。
CGI漏洞大多分为一下几种类型:暴露不该暴露的信息、执行不该执行的命令、溢出。
关键词:漏洞 ,CGI, CGI扫描, 生成扫描日志
第1步安全管理软件的分析
1.1 漏洞介绍与应用现状
苍蝇不盯无缝的蛋,入侵者只要找到复杂的计算机网络中的一个缝,就能轻而易举地闯入系统。
所以,了解这些缝都有可能在哪里,对于修补它们至关重要。
通常,裂缝主要表现在软件编写存在bug、系统配置不当、口令失窃、明文通讯信息被监听以及初始设计存在缺陷等方面。
1、软件编写存在bug
无论是服务器程序、客户端软件还是操作系统,只要是用代码编写的东西,都会存在不同程度的bug。
Bug主要分为以下几类:(1)缓冲区溢出:指入侵者在程序的有关输入项目中了输入了超过规定长度的字符串,超过的部分通常就是入侵者想要执行的攻击代码,而程序编写者又没有进行输入长度的检查,最终导致多出的攻击代码占据了输入缓冲区后的内存而执行。
别以为为登录用户名留出了200个字符就够了而不再做长度检查,所谓防小人不防君子,入侵者会想尽一切办法尝试攻击的途径的。
(2)意料外的联合使用问题:一个程序经常由功能不同的多层代码组成,甚至会涉及到最底层的操作系统级别。
入侵者通常会利用这个特点为不同的层输入不同的内容,以达到窃取信息的目的。
例如:对于由Perl编写的程序,入侵者可以在程序的输入项目中输入类似“mail</etc/passwd”的字符串,从而使perl让操作系统调用邮件程序,并发送出重要的密码文件给入侵者。
借刀杀人、借Mail送“信”,实在是高! (3) 不对输入内容进行预期检查:有些编程人员怕麻烦,对输入内容不进行预期的匹配检查,使入侵者输送炸弹的工作轻松简单。
(4)Raceconditions:多任务多线程的程序越来越多,在提高运行效率的同时,也要注意Raceconditions的问题。
比如说:程序A和程序B都按照“读/改/写”的顺序操作一个文件,当A进行完读和改的工作时,B启动立即执行完“读/改/写”的全部工作,这时A继续执行写工作,结果是A的操作没有了表现!入侵者就可能利用这个处理顺序上的漏洞改写某些重要文件从而达到闯入系统的目的,所以,编程人员要注意文件操作的顺序以及锁定等问题。
2、系统配置不当
(1)默认配置的不足:许多系统安装后都有默认的安全配置信息,通常被称为easy to use。
但遗憾的是,easy to use还意味着easy to break in。
所以,一定对默认配置进行扬弃的工作。
(2)管理员懒散:懒散的表现之一就是系统安装后保持管理员口令的空值,而且随后不进行修改。
要知道,入侵者首先要做的事情就是搜索网络上是否有这样的管理员为空口令的机器。
(3)临时端口:有时候为了测试之用,管理员会在机器上打开一个临时端口,但测试完后却忘记了禁止它,这样就会给入侵者有洞可寻、有漏可钻。
通常的解决策略是:除非一个端口是必须使用的,否则禁止它!一般情况下,安全审计数据包可用于发现这样的端口并通知管理者。
(4)信任关系:网络间的系统经常建立信任关系以方便资源共享,但这也给入侵者带来借牛打力、间接攻击的可能,例如,只要攻破信任群中的一个机器,就有可能进一步攻击其他的机器。
所以,要对信任关系严格审核、确保真正的安全联盟。
3、口令失窃
(1)弱不禁破的口令:就是说虽然设置了口令,但却简单得再简单不过,狡猾的入侵者只需吹灰之力就可破解。
(2)字典攻击:就是指入侵者使用一个程序,该程序借助一个包含用户名和口令的字典数据库,不断地尝试登录系统,直到成功进入。
毋庸置疑,这种方式的关键在于有一个好的字典。
(3)暴力攻击:与字典攻击类似,但这个字典却是动态的,就是说,字典包含了所有可能的字符组合。
例如,一个包含大小写的4字符口令大约有50万个组合,1个包含大小写且标点符号的7字符口令大约有10万亿组合。
对于后者,一般的计算机要花费大约几个月的时间才能试验一遍。
看到了长口令的好处了吧,真正是一两拨千斤啊!
4、嗅探未加密通讯数据
(1)共享介质:传统的以太网结构很便于入侵者在网络上放置一个嗅探器就可以查看该网段上的通讯数据,但是如果采用交换型以太网结构,嗅探行为将变得非常困难。
(2)服务器嗅探:交换型网络也有一个明显的不足,入侵者可以在服务器上特别是充当路由功能的服务器上安装一个嗅探器软件,然后就可以通过它收集到的信息闯进客户端机器以及信任的机器。
例如,虽然不知道用户的口令,但当用户使用Telnet软件登录时就可以嗅探到他输入的口令了。
(3) 远程嗅探:许多设备都具有RMON(Remotemonitor,远程监控)功能以便管理者使用公共体字符串(publiccommunitystrings)进行远程调试。
随着宽带的不断普及,入侵者对这个后门越来越感兴趣了。
5、设计存在缺陷
(1)TCP/IP协议的缺陷:TCP/IP协议现在已经广为应用、但是它设计时却是在入侵者猖狂肆虐的今天之很早以前设计出来的。
因此,存在许多不足造成安全漏洞在所难免,例如smurf攻击、ICMPUnreachable数据包断开、IP地址欺骗以及SYNflood。
然而,最大的问题在于IP协议是非常容易“轻信”的,就是说入侵者可以随意地伪造及修改IP数据包而不被发现。
现在Ipsec协议已经开发出来以克服这个不足,但还没有得到广泛的应用。
1.2 安全管理软件扫描的分析
1.2.1 安全管理软件的可行性
随着网络和计算机技术的发展,网络已经成为企业运转和个人生活不可或缺的一部分,但同时网络安全的威胁也越来越严重,网络蠕虫、黑客攻击,无时无刻不在威胁着我们的网络系统,尤其是安全漏洞所引发的安全事件愈演愈烈,从Codered、Nimda到Blaster,类似通过网络漏洞传播的病毒、针对漏洞进行的攻击给我们造成了巨大的破坏,使得传统的网络安全措施显得苍白且无能为力,而广大用户往往在病毒爆发之后或者安全事件出现之后才想到进行漏洞的弥补,而此时损失已经无法弥补。
为了深入了解这样的问题,针对黑客攻击的思想开发出了一款小型漏洞扫描系统,在安全事件出现之前就对可能出现问题的漏洞进行侦测、弥补和评估。
作品概述:
网络安全管理扫描系统是基于网络的漏洞侦测和安全评估工具,它能够按照所定义的策略扫描网络系统的端口,侦测这些端口所提供的网络服务的漏洞,并向系统管理员提供漏洞报告,从
而帮助管理员进行漏洞的弥补,提高网络系统整体的安全性。
网络安全管理扫描系统以插件形式提供漏洞侦测模块,虽然并不具有高度的可扩展性,但能实现一般的端口,路由器信息的扫描,当然最主要的就是CGI漏洞扫描。
网络安全管理扫描系统可以使用图形和命令行两种方式进行漏洞侦测,扫描结果被保存在本地数据库中,然后通过报表模块实现多种形式的报表显示。
用户还可以使用定时扫描功能,定期的对网络资源进行安全扫描和评估,不断的了解整体网络安全水平,提高资源的安全防护级别。
网络安全管理扫描系统对Windows,Linux,Unix,Router,IDS,Firewall 及其他网络设备都能很好的支持,并对这些系统进行很好的安全性能分析,寻找黒客可能利用的漏洞,并提出有效的修补方案提醒管理员进行弥补。
网络安全管理扫描系统能够帮助管理员了解整体网络安全水平,大幅度提高网络安全系统的效果。
1.2.2 使用管理软件的意义
系统漏洞是指应用软件或操作系统软件隐藏在逻辑设计上的缺陷或在编写时产生的错误,这个缺陷或错误可以被不法者或者电脑黑客利用,通过植入木马、病毒等方式来攻击或控制整个电脑,从而窃取您电脑中的重要资料和信息,甚至破坏您的系统。
漏洞扫描是对用户的电脑进行全方位的扫描,检查当前的用户系统是否有漏洞,如果有漏洞则立即进行修复,否则电脑很容易受到网络的伤害甚至被黑客借助于电脑的漏洞进行远程控制,因此漏洞扫描对保护电脑和上网安全必不可少。
第2步管理软件的设计与实现
2.1 需求分析与总体设计
2.1.1 功能分析
经过1.2.2节的论述,我们可以将对软件的要求总结如下:
任务:实现一个网络安全管理软件,能够进行网络安全管理和设置。
功能要求:
1.能够对本机或者网络安全进行设置和管理,比如可以扫描机器的漏洞;
2.能够管理一些安全软件
3能够给出一定的安全提示和报警。
总体界面:
设置扫描的主机(以本机为主):
选择扫描模块:
扫描的实现:
扫描日志的生成:
由于此软件设置不是很好,扫描出来的漏洞很快就被覆盖了。
2.1.2 工程方案选择
结合现有的常见开发模式综合分析,有多种实现方案,下面就陈述选择其中一种解决方案,并给出工程框架。
整个工程使用VC6.0平台实现
此软件所实现的功能实现十分简单,因为标准库中集成几乎所有功能的函数,更不需要像密码加解密那样的算法。
在j2se标准库中,因为有强大的标准库支持,文件的读取和保存操作、各环节必要的数据编码转换、图形操作界面的实现也很简单(使用java.io java.awt或javax.swing 等包),如果结合一种快速开发的IDE,比如JBuilder,整个软件可以在很短的时间内编码完成。
如果不考虑非PC设备和机器效率等问题,java平台几乎是最佳解决方案。
但是缺点也很明显,如果想把功能应用到非PC设备(例如嵌入式手持设备),对于在PC上运行,JVM 的数据运算速度要远远落后于本地化代码在PC上的运算速度,这一点不适合由java完成。
选用这种设计方案,上层使用C#,底层算法使用C++,可以由一个Visual Studio解决方案管理,给调试带来极大的方便。
整个工程主要由C++核心类库、封装C++核心类库的DLL组件、引用DLL 的.Net类、实现文件操作功能的.Net窗体应用程序实现。
考虑到工作量,本软件不需要考虑任何算法,而是在满足设计要求的前提下,以一种尽可能简单的方式软件管理扫描。
2.2 各部分的设计与开发
2.2.1 实现扫描的C#核心类库
( 1.) 扫描路由信息函数
typedef struct ThreadParam_Route
{
CString strHost;
CTreeCtrl *pTC;
HTREEITEM hTI;
}ROUTETHREADPARAM;
ROUTETHREADPARAM rtp;
UINT GetTraceInfo(LPVOID pParam)
{
ROUTETHREADPARAM *route=(ROUTETHREADPARAM *)pParam;
//CString strHost,CTreeCtrl *pTC,HTREEITEM hTI
int MaxHop=0;
int ttl;
CPing ping;
struct in_addr iaDest;
LPHOSTENT pHost,pHost1;
DWORD dwAddress;
IPINFO ipInfo;
ICMPECHO icmpEcho;
HANDLE hndlFile;
if(!ping.bValid)
{
return 0;
}
( 2.) 扫描端口线程
CCriticalSection cs;
int NowWhere=0;
typedef struct ThreadParam2
{
int nStartPort;
int nEndPort;
HWND hwnd;
CString strHost;
CTreeCtrl *pTC;
HTREEITEM hTI;
}THREADPARAM2;
THREADPARAM2 tp2;
{
AfxMessageBox("Can't Create Socket!");
sf.CleanUp();
return 0;
}
( 3.) 扫描NetBios信息函数
void GetNetBios(HWND hWnd,CString strHost,CTreeCtrl *pTC,HTREEITEM hTI)
{
CNetBios nb;
char cHost[100];
CString str;
wsprintf(cHost,_T("%s"),strHost);
if(!nb.OpenSession(cHost))
{
AddToEdit(hWnd,"建立IPC$空会话失败",strHost);
return;
}
else
{
nb.GetUsers(cHost,str);//(TCHAR *)&m_strHost
if(str!="")
{
AddToEdit(hWnd,"获取Netbios信息\"网络用户列表\"完成",strHost);
pTC->InsertItem("用户列表",2,2,hTI,TVI_LAST);
}
nb.GetShareList(cHost,str);
if(str!="")
{
AddToEdit(hWnd,"获取Netbios信息\"网络共享列表\"完成",strHost);
pTC->InsertItem("共享列表",2,2,hTI,TVI_LAST);
}
nb.FingerPrint(cHost,str);
if(str!="")
{
AddToEdit(hWnd,"获取Netbios信息\"远程操作系统信息\"完成",strHost);
pTC->InsertItem("远程操作系统信息",2,2,hTI,TVI_LAST);
}
nb.CloseSession(nb.ipc);
}
}
( 4.) 扫描NT Server弱口令函数
void GetNTWkPass(HWND hWnd,CString strHost,CTreeCtrl *pTC,HTREEITEM hTI)
{
FILE *fp;
CString str;
TCHAR name[20],nameid[20];
CNetBios nb;
TCHAR Host[100]=_T("");
wsprintf(Host,"%s",strHost);
if((fp=fopen("users.txt","r"))==NULL)
{
AfxMessageBox("Can't Open File!");
return;
}
if(ret==NO_ERROR)
{
CString str1;
str1.Format("发现NT Server弱口令: %s/[空口令]",nameid);
AddToEdit(hWnd,str1,strHost);
CString str2;
str2.Format("%s([空口令])",nameid);
pTC->InsertItem(str2,2,2,hTI,TVI_LAST);
WNetCancelConnection2(LOCALDRIVE,0,TRUE);
continue;
}
ret = WNetAddConnection2(&nr,nameid,nameid,0);
if(ret==NO_ERROR)
{
CString str1;
str1.Format("发现NT Server弱口令: %s/[用户名和口令相同]",nameid,nameid);
AddToEdit(hWnd,str1,strHost);
CString str2;
str2.Format("%s([用户名和口令相同])",nameid);
pTC->InsertItem(str2,2,2,hTI,TVI_LAST);
WNetCancelConnection2(LOCALDRIVE,0,TRUE);
}
}
fclose(fp);
}
( 5.) 扫描CGI漏洞函数
void CGIScan(HWND hWnd,CString strHost,CTreeCtrl *pTC,HTREEITEM hTI)
{
struct sockaddr_in addr;
WSADATA wsaData;
WORD wVersionRequested;
SOCKET sck;
int i;
char buff[1024];
char *CGI[10];
char *fmsg="HTTP/1.1 200 OK";
CGI[1]="GET /../../../../etc/passwd HTTP/1.0\n\n";
CGI[2]="GET /scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir+c:\ HTTP/1.0\n\n";
CGI[3]="GET /A.ida/%c1%00.ida HTTP/1.0\n\n";
CGI[4]="GET /cgi-bin/pfdispaly.cgi?/../../../../etc/motd HTTP/1.0\n\n";
CGI[5]="GET /cgi-bin/test-cgi?\help&0a/bin/cat%20/etc/passwd HTTP/1.0\n\n";
CGI[6]="GET /cgi-bin/test-cgi?* HTTP/1.0\n\n";
wVersionRequested = MAKEWORD( 1, 1 );
if (WSAStartup(wVersionRequested , &wsaData)){
AfxMessageBox("Winsock Initialization failed.");
return ;
}
if ((sck=socket(AF_INET,SOCK_STREAM,0))==INV ALID_SOCKET){ AfxMessageBox("Can not create socket.");
return ;
}
for (i=1 ; i<7&&!bStoped; i++) {
if (connect(sck,(struct sockaddr*)&addr,sizeof(addr))==0){
send(sck,CGI[i],strlen(CGI[i]),0);
recv(sck,buff,sizeof(buff),0);
if(strstr(buff,fmsg)!=NULL){
CString temp;
temp.Format("发现CGI漏洞: %s ",CGI[i]);
AddToEdit(hWnd,temp,strHost);
pTC->InsertItem(CGI[i],2,2,hTI,TVI_LAST);
}
}
}
closesocket(sck);
WSACleanup();
}
综上所述,总结扫描的流程,如图2-6所示。
图2-6 流程框图 3.2 测试数据与分析改进
3.2.1 端口扫描 扫描器通过选用远程TCP/IP 不同的端口的服务,并记录目标给予的回答,通过这种方法,可以搜集到很多关于目标主机的各种有用的信息(比如:是否能用匿名登陆!是否有可写的FTP 目录,是否能用TELNET ,HTTPD 是用ROOT 还是nobady 在跑!)例如21端口:21端口主要用于FTP (File Transfer Protocol ,文件传输协议)服务,FTP 服务主要是为了在两台计算机之间实现文件的上传与下载,一台计算机作为FTP 客户端,另一台计算机作为FTP 服务器,可以采用匿名(anonymous )登录和授权用户名与密码登录两种方式登录FTP 服务器。
目前,通过FTP 服务来实现文件的传输是互联网上上传、下载文件最主要的方法。
另外,还有一个20端口是用于输入ip
检查ip 是否有效?
有效?
扫描路由
扫描漏洞
重新扫描
结束
返回扫描结果
Yes Yes Yes
No
No No
FTP数据传输的默认端口号。
在Windows中可以通过Internet信息服务(IIS)来提供FTP连接和管理,也可以单独安装FTP服务器软件来实现FTP功能,比如常见的FTP Serv-U。
在这里,就提一点小小的建议,因为有的FTP服务器可以通过匿名登录,所以常常会被黑客利用。
另外,21端口还会被一些木马利用,比如Blade Runner、FTP Trojan、Doly Trojan、WebEx 等等。
如果不架设FTP服务器,建议关闭21端口。
3.2.2 cgi扫描
很多网站为了安全起见,在WEB Server懊婕芰朔阑鹎剑 蛘咦隽薚CP/IP过滤,对外只开放TCP 80 端口。
从入侵者角度来看,要入侵那么从80上跑的CGI入手是比较可行的,当然也可以用别的办法,例如旁敲侧击,呵呵。
从网管角度来看,一是要保证CGI的安全性,另外网络的整体安全性也是很重要的。
针对基于80端口入侵、防范而出的CGI扫描器数不胜数,但基本上原理都一样。
CGI扫描器原理说起来其实非常简单,可以用四句话来概括:
<1>连接目标WEBSERVER;
<2>发送一个特殊的请求;
<3>接收目标服务器返回数据;
<4>根据返回数据判断
目标服务器是否有此CGI漏洞。
当管理的服务器达到一定数量的时候,手工检测自己的服务器是否存在各种各样的CGI
漏洞,那就太消耗时间和精力了,所以一个网管手上有个比较好用的CGI漏洞扫描器还是
必要的。
为了检测漏洞,很多时候编程员都是在程序中设置一个标志从而打到检测目标,例如:#define iPort 80//目标Web Server端口
#define szSign "500 13\r\nServer: Microsoft-IIS/5.0"//根据此标志来检查目标是否有漏洞
#pragma comment(lib,"ws2_32.lib")
///////////////////////////////////////////////////////////////////////////
//定义&初始化全局变量
char *SendBuff="GET /NULL.printer\n",//发送的请求buff
CurrentTarget[52]={0},//存放最后一个线程将扫描的目标
turn[4][2]={"-","\\","|","/"};//显示进度时的字符
int SendBuffLen=strlen(SendBuff),//发送的buff长度
iConnTimeout,//TCP Connect TimeOut
ii=0,//扫描进度
iTotal;//服务器总数
HANDLE hSemaphore=NULL,//信标内核对象句柄,用来控制线程数量
hStdout;//console标准输出句柄,做进度显示的时候用的
struct timeval timeout;//连接、发送和接收的超时值
DWORD SleepTime;//每个一个线程后等待的时间
/*
SleepTime值根据用户输入的线程数量[ThreadNum]和TCP
ConnectTimeOut[CONNTIMEO]来计算。
确保在CONNTIMEO时间左右开ThreadNum
个线程。
这样在CONNTIMEO时间后,所开的线程开始陆续超时退出,可以继续稳定的开
线程,可以有效的保证同时有ThreadNum个线程在运行。
*/
void ShowError(char *);//显示出错信息函数,可以写完善一些,偶偷懒了:)
BOOL ResetCursor(void);//重置光标位置,线程输出的时候调用的
DWORD WINAPI ShowProInfo(LPVOID);//显示进度信息
DWORD WINAPI scan(LPVOID);//扫描函数
这是CGI扫描的一个很好的例子,从这个例子中可以看出,cgi扫描检测第一步就是设置一个标志,它的原理可以参考有关cgi方面的知识书籍。
第3步总结与体会
通过此次课程设计,使我更加扎实的掌握了有关网络安全方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。
实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。
过而能改,善莫大焉。
在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。
最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。
这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。
在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。
同时,设计让我感触很深。
使我对抽象的理论有了具体的认识。
我认为,在这学期的实验中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。
更重要的是,在实验课上,我们学会了很多学习的方法。
而这是日后最实用的,真的是受益匪浅。
要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
这对于我们的将来也有很大的帮助。
以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。
就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可。