置并进行严格管理;此外,建立上传目录往往为了便于在Internet上交换文件,而网络攻击者则在可写区域中肆意删除、修改信息或上传恶意代码(如特洛伊木马、
计算机病毒等)。
(2) DDoS分布式拒绝服务类
分布式拒绝服务攻击也是最为常见的网络攻击方法,进攻形式多种多样。从利用网络协议到针对操作系统平台的漏洞,都可以发出拒绝服务攻击,可以说其攻击手段防不胜防。通过发送连续的字符可以检测Microsoft SQL Server等数据库服务器是否有DDoS漏洞。
(3) firewall防火墙类
设置网络防火墙的目的是在通信网与外界网之间提供一道屏障,以保护网络中的信息流免受来自外部网络的各种威胁。防火墙可以是路由器、PC机、主机系统或一批主系统,是硬件和软件的组合体。由于网络防火墙自身存在的设计问题和使用配置错误,扫描器可以检测不同类别或版本的网络防火墙存在的安全漏洞。
三 实现中的关键问题
网络扫描器采用B/S模式进行软件开发,B/S模式是指软件的主体部分都在服务器端,用户只需使用浏览器发出扫描服务的请求,由服务器执行对扫描目标的扫描操作,并将最终扫描结果以脆弱性报告形式发送到客户端。这种模式的优点在于用户只需通过浏览器,就可以对目标进行扫描,操作简单易学。
3.1 Windows Sockets编程
Socket存在于通信区域中是网络通信基本构件,是可以被命名和寻址的通信端点,网络编程中各套接字都有相关进程与其类型对应。下面仅就网络扫描器开发过程中用到的Windows Socket的一些共性操作加以说明。
(1) 设置服务器地址和连接端口
struct sockaddr_in sad; // 获得主机地址的结构
struct hostent *ptrh; // 指向主机入口的指针
ptrh=NULL;
sad.sin_port=htons(21); // 如设定连接端口为21
sad.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为Socket
sd=socket(PF_INET,SOCK_STREAM,0); //创建TCP Socket套接字
if (sd<0) {return FALSE;} // sd<0表示本地创建Socket失败,返回值为假
socket(int af, int type, int protocol)指定地址族、数据类型和协议描述符及相关资源。
(3)套接字建立连接与数据的收发
connect(SOCKET s, const struct sockaddr FAR * name, int namelen)参数s是套接字描述符,name是套接字地址结构指针,namelen说明套接字地址长度。
在TCP协议中数据发送与接收函数为send和recv,UDP协议中为sendto和recvfrom,使用时调用
程序要提供超时控制。
send ( SOCKET s, const char FAR * buf, int len, int flags );
recv ( SOCKET s, char FAR * buf, int len, int flags );
sendto(SOCKET s,const char FAR * buf,int len,int flags,const struct sockaddr FAR * to, int tolen ); //UDP协议中数据发送函数
recvfrom ( SOCKET s, char FAR * buf,int len, int flags, struct sockaddr FAR * from, int FAR * fromlen ); //UDP协议中数据接受函数
3.2 数据结构
检测系统存在的安全漏洞是不断被发现与升级的,这要求网络扫描器的开发应具有很强扩展性,通过准实时的增加扫描功能或扩展扫描插件可较好解决这一问题,插件的开发利用Microsoft Visual C++ 6.0编译
链接后生成DLL文件。为便于统一管理