59朱舒宇网络扫描器的设计与实现

上传人:无*** 文档编号:89473683 上传时间:2022-05-13 格式:DOC 页数:56 大小:117.01KB
返回 下载 相关 举报
59朱舒宇网络扫描器的设计与实现_第1页
第1页 / 共56页
59朱舒宇网络扫描器的设计与实现_第2页
第2页 / 共56页
59朱舒宇网络扫描器的设计与实现_第3页
第3页 / 共56页
点击查看更多>>
资源描述
网络扫描器的设计与实现摘 要:信息安全是为了保障计算机系统软件、应用软件及网络软件可靠运行;防止信息的非授权访问、获取与篡改;保证信息完整性与可用性。本文分析了网络扫描器在信息安全领域的作用与设计实现思想。关键词:信息安全,网络漏洞,套接字,分布式拒绝服务,简单邮件传输协议引言内容:计算机网络的迅猛发展引发了人们对网络安全的重视,信息安全的目标在于保护信息保密性、完整性以及对合法用户提供应有服务。网络漏洞是系统软、硬件存在安全方面的脆弱性,安全漏洞的存在导致非法用户入侵系统或未经授权获得访问权限,造成信息篡改和泄露、拒绝服务或系统崩溃等问题。系统管理员可根据安全策略,使用网络工具实现系统安全审计。一 扫描器软件概述 11 扫描器的功能扫描器是检测远程或本地系统安全脆弱性的软件;通过与目标主机TCP/IP端口建立连接和并请求某些服务(如TELNET、FTP等),记录目标主机的应答,搜集目标主机相关信息(如匿名用户是否可以登录等),从而发现目标主机某些内在的安全弱点。扫描器的重要性在于把极为烦琐的安全检测,通过程序来自动完成,这不仅减轻管理者的工作,而且缩短了检测时间,使问题发现更快。当然,也可以认为扫描器是一种网络安全性评估软件。一般而言,扫描器可以快速、深入地对网络或目标主机进行评估。12 扫描器的分类从信息流的角度理解信息安全,可划分为数据存放的安全性与网络传输的安全性(涉及操作系统安全性及应用程序的安全性),网络中任何一个环节出现不安全因素都会破坏整个信息流的安全性,因此把扫描器分为三类:数据库安全扫描器,操作系统安全扫描器和网络安全扫描器(针对于网络服务、应用程序、网络设备、网络协议等)。对扫描对象的脆弱性进行深入了解,能较好地用运用程序来自动检测发现其是否存在已有的漏洞;能给扫描时发现的问题提供一个良好的解决方案;能在系统实现时,提高效率并提供了相应的补救信息。二 网络扫描器设计方案 网络扫描器是一个涉及知识面广、动态性强的软件,应具有易于配置、易于扩展、快速扫描、智能报告和深度分析等功能。网络扫描是对系统脆弱性的分析评估,能够检查、分析网络范围内的设备、网络服务、操作系统、数据库系统等系统的安全性, 从而为提高网络安全的等级提供决策的支持。21 基本功能模块经过大量的分析与调研,进而设计出由以下几个模块组成的网络扫描器:用户界面,友好的用户界面使扫描配置更加简单有效,结果显示清楚条理,扫描插件维护功能方便;扫描引擎,检测目标系统,调度扫描插件模块,执行安全测试;扫描插件,主要完成对目标系统的检查;脆弱性报告,能够依据不同的需求,提供不同形式的报表;数据库,包括系统安全漏洞、告警信息和补救方法。22 扫描内容的分类根据安全漏洞的测试原理,扫描内容可分为:general普通、Microsoft win9x/NT平台、firewalls防火墙、useless services无用服务、ftp文件传输协议、backdoors后门程序、cgi abuses(cgi滥用)、remote file access远端文件获取、gain root remotely远端获得根权限、rpc远端过程调用、nis网络信息服务、finger abuses(finger 滥用)、smtp problems简单邮件传输协议的错误、virus病毒、DDoS分布式拒绝服务、Router Setting路由器配置等20多种类型,800多个安全漏洞。简介如下:(1)ftp文件传输协议类ftp服务广泛应用于Internet中,同时具有显著的安全脆弱性。如匿名ftp本身不是安全漏洞,但其提供了访问远程系统能力,入侵者可借此获取系统口令文件并探测系统漏洞,因而通常禁用匿名ftp服务,开放时必须正确配置并进行严格管理;此外,建立上传目录往往为了便于在Internet上交换文件,而网络攻击者则在可写区域中肆意删除、修改信息或上传恶意代码(如特洛伊木马、计算机病毒等)。(2) DDoS分布式拒绝服务类分布式拒绝服务攻击也是最为常见的网络攻击方法,进攻形式多种多样。从利用网络协议到针对操作系统平台的漏洞,都可以发出拒绝服务攻击,可以说其攻击手段防不胜防。通过发送连续的字符可以检测Microsoft SQL Server等数据库服务器是否有DDoS漏洞。(3) firewall防火墙类设置网络防火墙的目的是在通信网与外界网之间提供一道屏障,以保护网络中的信息流免受来自外部网络的各种威胁。防火墙可以是路由器、PC机、主机系统或一批主系统,是硬件和软件的组合体。由于网络防火墙自身存在的设计问题和使用配置错误,扫描器可以检测不同类别或版本的网络防火墙存在的安全漏洞。三 实现中的关键问题 网络扫描器采用B/S模式进行软件开发,B/S模式是指软件的主体部分都在服务器端,用户只需使用浏览器发出扫描服务的请求,由服务器执行对扫描目标的扫描操作,并将最终扫描结果以脆弱性报告形式发送到客户端。这种模式的优点在于用户只需通过浏览器,就可以对目标进行扫描,操作简单易学。31 Windows Sockets编程Socket存在于通信区域中是网络通信基本构件,是可以被命名和寻址的通信端点,网络编程中各套接字都有相关进程与其类型对应。下面仅就网络扫描器开发过程中用到的Windows Socket的一些共性操作加以说明。实现中的关键问题 网络扫描器采用B/S模式进行软件开发,B/S模式是指软件的主体部分都在服务器端,用户只需使用浏览器发出扫描服务的请求,由服务器执行对扫描目标的扫描操作,并将最终扫描结果以脆弱性报告形式发送到客户端。这种模式的优点在于用户只需通过浏览器,就可以对目标进行扫描,操作简单易学。31 Windows Sockets编程Socket存在于通信区域中是网络通信基本构件,是可以被命名和寻址的通信端点,网络编程中各套接字都有相关进程与其类型对应。下面仅就网络扫描器开发过程中用到的Windows Socket的一些共性操作加以说明。(1) 设置服务器地址和连接端口struct sockaddr_in sad; / 获得主机地址的结构struct hostent *ptrh; / 指向主机入口的指针ptrh=NULL;sad.sin_port=htons(21); / 如设定连接端口为21sad.sin_addr.s_addr=inet_addr(host-ip); /扫描目标主机IP地址sad.sin_family=AF_INET; / 地址类型规范(2) 创建Windows Socket套接字 套接字类型可根据通信特征进行分类。Windows Sockets 1.1支持两种套接字:流套接字SOCK_STREAM和数据报套接字SOCK_DGRAM。具体实现如下:SOCKET sd; / 定义sd为Socketsd=socket(PF_INET,SOCK_STREAM,0); /创建TCP Socket套接字if (sd0) return FALSE; / sdip); /扫描目标主机IP地址sad.sin_family=AF_INET; / 地址类型规范(2) 创建Windows Socket套接字 套接字类型可根据通信特征进行分类。Windows Sockets 1.1支持两种套接字:流套接字SOCK_STREAM和数据报套接字SOCK_DGRAM。具体实现如下:SOCKET sd; / 定义sd为Socketsd=socket(PF_INET,SOCK_STREAM,0); /创建TCP Socket套接字if (sd0) return FALSE; / sd0表示本地创建Socket失败,返回值为假 Socket套接字 套接字类型可根据通信特征进行分类。Windows Sockets 1.1支持两种套接字:流套接字SOCK_STREAM和数据报套接字SOCK_DGRAM。具体实现如下:SOCKET sd; / 定义sd为Socketsd=socket(PF_INET,SOCK_STREAM,0); /创建TCP Socket套接字if (sd0) return FALSE; / sd0表示本地创建Socket失败,返回值为假 sd=socket(PF_INET,SOCK_STREAM,0); /创建TCP Socket套接字if (sd0) return FALSE; / sdadvice,过滤发向端口1433的数据包。); /建议strcpy(record-classname,DDoS); /类型strcpy(record-description,SQL server接收连续0信号TCP包时被非法关闭);strcpy(record-filename,mssqlserver_dos.nfs);strcpy(record-ID,6XX); /编号strcpy(record-membername,mssqlserver_dos);strcpy(record-risk,严重); /等级 record-mark=true;return true;extern C _declspec( dllexport ) BOOL ApplFunc(struct HOST *host) struct sockaddr_in sad; /structure to hold servers addressstruct hostent *ptrh; /pointer to host entrySOCKET sd; char buf6; memset(buf,0,6);memset(char *)&sad,0,sizeof(sad); /clear sockaddr structureptrh=NULL;sad.sin_port=htons(1433); / SQL通信端口号1433sad.sin_addr.s_addr=inet_addr(host-ip);sad.sin_family=AF_INET;sd=socket(PF_INET,SOCK_STREAM,0); / TCP连接if (sd0) return FALSE;if (connect(sd,(struct sockaddr *)&sad,sizeof(sad)0)closesocket(sd); return FALSE;buf0=0x00; buf1=0x00; buf2=0x00;buf3=0x00; buf4=0x00; buf5=0x00;send(sd,buf,sizeof(buf),0);closesocket(sd); Sleep(2000); /等待sd=socket(PF_INET,SOCK_STREAM,0); /再次建立连接if (sd0) return FALSE;if (connect(sd,(struct sockaddr *)&sad,sizeof(sad)advice,过滤发向端口1433的数据包。); /建议strcpy(record-classname,DDoS); /类型strcpy(record-description,SQL server接收连续0信号TCP包时被非法关闭);strcpy(record-filename,mssqlserver_dos.nfs);strcpy(record-ID,6XX); /编号strcpy(record-membername,mssqlserver_dos);strcpy(record-risk,严重); /等级 record-mark=true;return true;extern C _declspec( dllexport ) BOOL ApplFunc(struct HOST *host) struct sockaddr_in sad; /structure to hold servers addressstruct hostent *ptrh; /pointer to host entrySOCKET sd; char buf6; memset(buf,0,6);memset(char *)&sad,0,sizeof(sad); /clear sockaddr structureptrh=NULL;sad.sin_port=htons(1433); / SQL通信端口号1433sad.sin_addr.s_addr=inet_addr(host-ip);sad.sin_family=AF_INET;sd=socket(PF_INET,SOCK_STREAM,0); / TCP连接if (sd0) return FALSE;if (connect(sd,(struct sockaddr *)&sad,sizeof(sad)0)closesocket(sd); return FALSE;buf0=0x00; buf1=0x00; buf2=0x00;buf3=0x00; buf4=0x00; buf5=0x00;send(sd,buf,sizeof(buf),0);closesocket(sd); Sleep(2000); /等待sd=socket(PF_INET,SOCK_STREAM,0); /再次建立连接if (sd0) return FALSE;if (connect(sd,(struct sockaddr *)&sad,sizeof(sad)advice,过滤发向端口1433的数据包。); /建议strcpy(record-classname,DDoS); /类型strcpy(record-description,SQL server接收连续0信号TCP包时被非法关闭);strcpy(record-filename,mssqlserver_dos.nfs);strcpy(record-ID,6XX); /编号strcpy(record-membername,mssqlserver_dos);strcpy(record-risk,严重); /等级 record-mark=true;return true;extern C _declspec( dllexport ) BOOL ApplFunc(struct HOST *host) struct sockaddr_in sad; /structure to hold servers addressstruct hostent *ptrh; /pointer to host entrySOCKET sd; char buf6; memset(buf,0,6);memset(char *)&sad,0,sizeof(sad); /clear sockaddr structureptrh=NULL;sad.sin_port=htons(1433); / SQL通信端口号1433sad.sin_addr.s_addr=inet_addr(host-ip);sad.sin_family=AF_INET;sd=socket(PF_INET,SOCK_STREAM,0); / TCP连接if (sd0) return FALSE;if (connect(sd,(struct sockaddr *)&sad,sizeof(sad)0)closesocket(sd); return FALSE;buf0=0x00; buf1=0x00; buf2=0x00;buf3=0x00; buf4=0x00; buf5=0x00;send(sd,buf,sizeof(buf),0);closesocket(sd); Sleep(2000); /等待sd=socket(PF_INET,SOCK_STREAM,0); /再次建立连接if (sd0) return FALSE;if (connect(sd,(struct sockaddr *)&sad,sizeof(sad)advice,升级NT Mail3系统。); /建议strcpy(record-classname,SMTP problems); /类型strcpy(record-description, smtp存在非授权邮件收发,可能成为攻击跳板); strcpy(record-filename,nt_spam.nfs);strcpy(record-ID,7XX);strcpy(record-membername,nt_spam);strcpy(record-risk,中);record-mark=true;return true;extern C _declspec( dllexport ) BOOL ApplFunc(struct HOST *host) struct sockaddr_in sad; /structure to hold servers addressstruct hostent *ptrh; /pointer to host entrySOCKET sd; char buf1024; memset(buf,0,1024);memset(char *)&sad,0,sizeof(sad); /clear sockaddr structureptrh=NULL; sad.sin_port=htons(25); / 端口号25sad.sin_addr.s_addr=inet_addr(host-ip);sad.sin_family=AF_INET;sd=socket(PF_INET,SOCK_STREAM,0);if (sd0) return FALSE; if (connect(sd,(struct sockaddr *)&sad,sizeof(sad)timeout,0;select(sd,&rd,NULL,NULL,&tv);int n=recv(sd,buf,1024,0); /接收数据if (n0) closesocket(sd);return FALSE; / 判断接收是否成功strcpy(buf,MAIL FROM: ); /第二步send(sd,buf,sizeof(buf),0); /发送数据FD_ZERO(&rd); /超时控制FD_SET(sd,&rd); select(sd,&rd,NULL,NULL,&tv);n=recv(sd,buf,1024,0); / 接收数据if (n0) closesocket(sd);return FALSE; / 判断接收是否成功strcpy(buf,RCPT TO: nobody ); /第三步send(sd,buf,sizeof(buf),0); / 发送数据FD_ZERO(&rd); / 超时控制FD_SET(sd,&rd); select(sd,&rd,NULL,NULL,&tv);n=recv(sd,buf,4,0); /接收4字节的字符串if (nfilename,nt_spam.nfs);strcpy(record-ID,7XX);strcpy(record-membername,nt_spam);strcpy(record-risk,中);record-mark=true;return true;extern C _declspec( dllexport ) BOOL ApplFunc(struct HOST *host) struct sockaddr_in sad; /structure to hold servers addressstruct hostent *ptrh; /pointer to host entrySOCKET sd; char buf1024; memset(buf,0,1024);memset(char *)&sad,0,sizeof(sad); /clear sockaddr structureptrh=NULL; sad.sin_port=htons(25); / 端口号25sad.sin_addr.s_addr=inet_addr(host-ip);sad.sin_family=AF_INET;sd=socket(PF_INET,SOCK_STREAM,0);if (sd0) return FALSE; if (connect(sd,(struct sockaddr *)&sad,sizeof(sad)timeout,0;select(sd,&rd,NULL,NULL,&tv);int n=recv(sd,buf,1024,0); /接收数据if (n0) closesocket(sd);return FALSE; / 判断接收是否成功strcpy(buf,MAIL FROM: ); /第二步send(sd,buf,sizeof(buf),0); /发送数据FD_ZERO(&rd); /超时控制FD_SET(sd,&rd); select(sd,&rd,NULL,NULL,&tv);n=recv(sd,buf,1024,0); / 接收数据if (n0) closesocket(sd);return FALSE; / 判断接收是否成功strcpy(buf,RCPT TO: nobody ); /第三步send(sd,buf,sizeof(buf),0); / 发送数据FD_ZERO(&rd); / 超时控制FD_SET(sd,&rd); select(sd,&rd,NULL,NULL,&tv);n=recv(sd,buf,4,0); /接收4字节的字符串if (nadvice,升级NT Mail3系统。); /建议strcpy(record-classname,SMTP problems); /类型strcpy(record-description, smtp存在非授权邮件收发,可能成为攻击跳板); strcpy(record-filename,nt_spam.nfs);strcpy(record-ID,7XX);strcpy(record-membername,nt_spam);strcpy(record-risk,中);record-mark=true;return true;extern C _declspec( dllexport ) BOOL ApplFunc(struct HOST *host) struct sockaddr_in sad; /structure to hold servers addressstruct hostent *ptrh; /pointer to host entrySOCKET sd; char buf1024; memset(buf,0,1024);memset(char *)&sad,0,sizeof(sad); /clear sockaddr structureptrh=NULL; sad.sin_port=htons(25); / 端口号25sad.sin_addr.s_addr=inet_addr(host-ip);sad.sin_family=AF_INET;sd=socket(PF_INET,SOCK_STREAM,0);if (sd0) return FALSE; if (connect(sd,(struct sockaddr *)&sad,sizeof(sad)timeout,0;select(sd,&rd,NULL,NULL,&tv);int n=recv(sd,buf,1024,0); /接收数据if (n0) closesocket(sd);return FALSE; / 判断接收是否成功strcpy(buf,MAIL FROM: ); /第二步send(sd,buf,sizeof(buf),0); /发送数据FD_ZERO(&rd); /超时控制FD_SET(sd,&rd); select(sd,&rd,NULL,NULL,&tv);n=recv(sd,buf,1024,0); / 接收数据if (n0) closesocket(sd);return FALSE; / 判断接收是否成功strcpy(buf,RCPT TO: nobody ); /第三步send(sd,buf,sizeof(buf),0); / 发送数据FD_ZERO(&rd); / 超时控制FD_SET(sd,&rd); select(sd,&rd,NULL,NULL,&tv);n=recv(sd,buf,4,0); /接收4字节的字符串if (nfilename,nt_spam.nfs);strcpy(record-ID,7XX);strcpy(record-membername,nt_spam);strcpy(record-risk,中);record-mark=true;return true;extern C _declspec( dllexport ) BOOL ApplFunc(struct HOST *host) struct sockaddr_in sad; /structure to hold servers addressstruct hostent *ptrh; /pointer to host entrySOCKET sd; char buf1024; memset(buf,0,1024);memset(char *)&sad,0,sizeof(sad); /clear sockaddr structureptrh=NULL; sad.sin_port=htons(25); / 端口号25sad.sin_addr.s_addr=inet_addr(host-ip);sad.sin_family=AF_INET;sd=socket(PF_INET,SOCK_STREAM,0);if (sd0) return FALSE; if (connect(sd,(struct sockaddr *)&sad,sizeof(sad)timeout,0;select(sd,&rd,NULL,NULL,&tv);int n=recv(sd,buf,1024,0); /接收数据if (n0) closesocket(sd);return FALSE; / 判断接收是否成功strcpy(buf,MAIL FROM: ); /第二步send(sd,buf,sizeof(buf),0); /发送数据FD_ZERO(&rd); /超时控制FD_SET(sd,&rd); select(sd,&rd,NULL,NULL,&tv);n=recv(sd,buf,1024,0); / 接收数据if (n0) closesocket(sd);return FALSE; / 判断接收是否成功strcpy(buf,RCPT TO: nobody ); /第三步send(sd,buf,sizeof(buf),0); / 发送数据FD_ZERO(&rd); / 超时控制FD_SET(sd,&rd); select(sd,&rd,NULL,NULL,&tv);n=recv(sd,buf,4,0); /接收4字节的字符串if (nadvice,升级NT Mail3系统。); /建议strcpy(record-classname,SMTP problems); /类型strcpy(record-description, smtp存在非授权邮件收发,可能成为攻击跳板); strcpy(record-filename,nt_spam.nfs);strcpy(record-ID,7XX);strcpy(record-membername,nt_spam);strcpy(record-risk,中);record-mark=true;return true;extern C _declspec( dllexport ) BOOL ApplFunc(struct HOST *host) struct sockaddr_in sad; /structure to hold servers addressstruct hostent *ptrh; /pointer to host entrySOCKET sd; char buf1024; memset(buf,0,1024);memset(char *)&sad,0,sizeof(sad); /clear sockaddr structureptrh=NULL; sad.sin_port=htons(25); / 端口号25sad.sin_addr.s_addr=inet_addr(host-ip);sad.sin_family=AF_INET;sd=socket(PF_INET,SOCK_STREAM,0);if (sd0) return FALSE; if (connect(sd,(struct sockaddr *)&sad,sizeof(sad)timeout,0;select(sd,&rd,NULL,NULL,&tv);int n=recv(sd,buf,1024,0); /接收数据if (n0) closesocket(sd);return FALSE; / 判断接收是否成功strcpy(buf,MAIL FROM: ); /第二步send(sd,buf,sizeof(buf),0); /发送数据FD_ZERO(&rd); /超时控制FD_SET(sd,&rd); select(sd,&rd,NULL,NULL,&tv);n=recv(sd,buf,1024,0); / 接收数据if (n0) closesocket(sd);return FALSE; / 判断接收是否成功strcpy(buf,RCPT TO: nobody ); /第三步send(sd,buf,sizeof(bu
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 压缩资料 > 基础医学


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!