您好,欢迎访问三七文档
1网络安全程序设计结课论文端口扫描程序设计2目录第一章序言..............................................................................................3第二章系统设计......................................................................................52.1运行环境及语言...........................................................................52.2系统功能........................................................................................62.3程序运行流程图............................................................................62.4程序设计过程...............................................................................62.41创建工程................................................................................62.42主机端口扫描程序设计流程...............................................82.43主要代码................................................................................92.5运行结果测试..............................................................................14第三章总结及心得................................................................................153.1总结..............................................................................................153.2心得体会.....................................................................................15第四章参考文献....................................................................................153第一章序言1.1背景Internet快速的发展,为我们带来了方便同时也带给了我们信息安全担忧。在计算机信息安全管理中可以通过端口扫描收集系统的信息来自动监测远程或本地主机安全性弱点的程序,可以发现远程服务器的各种tcp端口的分配及提供的服务与他们的软件版本。从而让管理员间接的或直观的了解到远程主机所存在的安全问题。从而端口扫描技术得到人们的重视。1.2目的该文章对端口扫描技术的原理和应用进行了阐述,并设计了一个简单的基于windows平台上的端口扫描系统。此程序主要完成了TCPconnect()扫描和UDP扫描功能。TCP扫描支持多线程,能对单个指定的主机进行扫描或对指定网段内的主机进行逐个扫描。能扫描特定的部分端口号或对指定的端口段内的端口进行逐个扫描。此端口扫描程序能快速地进行TCP扫描,准确地检测出对TCP协议开放的端口。而对于UDP扫描只支持单线程,速度较慢。扫描结果以列表的形式直观地展现出来。1.3端口扫描概述网络安全探测在网络安全中起着主动防御的作用,占有非常重要的地位。网络安全探测的所有功能都是建立在端口扫描的基础4上,所以对端口扫描技术的研究有着非常重要的现实意义。每一个网络主机都相当于一个“房间”,黑客能否进入“房间”,取决于是否发现了打开的“门窗”。也就是说,能否入侵网络主机,或者网络主机是否安全,关键在于能否查出网络主机的系统信息。而端口是主机与外界通讯交流的数据出入口,即是“门窗”。端口分为硬件端口和软件端口,所谓硬件端口又称为接口,包括:USB端口、串行端口、并行端口等。软件端口一般指网络中面向连接服务(TCP)和无连接服务(UDP)的通讯协议的端口。一个端口就是一个潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息。通过端口扫描,发现系统的安全漏洞。它使系统用户了解系统目前向外界提供了哪些服务,从而为系统用户管理网络提供了一种手段1.4端口扫描的原理端口有两种,UDP端口和TCP端口。由于UDP端口是面向无连接的,从原理的角度来看,没有被扫描的可能,或者说不存在一种迅速而又通用的扫描算法;而TCP端口具有连接定向(ConnectionOriented)的特性(即是有面向连接的协议),为端口的扫描提供了基础。TCP建立连接时有三次握手:首先,Client端往Server某一端口发送请求连接的SYN包,如果Server的这一端口允许连接,就会给Client端发一个ACK回包,Client端收到Server的ACK包后再给Server端发一个ACK包,TCP连接正式建立,这就是连接成5功的过程。当Client端往Server某一端口发送请求连接的SYN包,此时若Server的这一端口不允许连接,就会给Client端发一个RST回包,Client端收到Server的RST包后再给Server端发一个RST包,这就是连接失败的过程。基于连接的建立过程,可以想到,假如要扫描某一个TCP端口,可以往该端口发一个SYN包,如果该端口处于打开状态,我们就可以收到一个ACK,也就是说,如果收到ACK,就可以判断目标端口处于打开状态,否则,目标端口处于关闭状态。这就是TCP端口扫描的基本原理第二章系统设计2.1运行环境及语言运行环境:VisualC++6.0语言:c++62.2系统功能简易的TCPconnect()扫描,支持多线程;UDP扫描功能;能对单个指定的主机进行扫描或扫描指定网段内的主机;能扫描特定的部分端口号或对指定的端口段内的端口进行逐个扫描。2.3程序运行流程图2.4程序设计过程2.41创建工程使用VC++的应用程序生成向导(MFCAppWizard[exe])创建一个基于对话框的工程,该工程的名称201200824420fandi,如图所示:开始输入ip和端口判断ip和端口合法开始扫描是否7单击确定,然后选择基本对话框,如图所示点击下一步,再在WindowsSockets[W]前打上勾,支持Winsock编程,如图8接下来一直选择默认直到完成。2.42主机端口扫描程序设计流程1.设计对话框92按Ctrl+W打开类向导,添加变量如图2.43主要代码1.在头文件findport100114019Dlg.h里添加private:SOCKETSocket;2.findport100114019Dlg.cpp文件中添加如下文件包含信息:#pragmacomment(lib,ws2_32.lib)//静态链接库#includewinsock.h3..编写Tcpscan按钮下的代码如下:UpdateData(true);//MFC窗口函数,用来刷新数据WSADATAWSAData;CStringstr;if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0){MessageBox(初始化Winsock失败!);return;}Socket=socket(AF_INET,SOCK_STREAM,0);//创建连接套接字if(Socket==INVALID_SOCKET){10MessageBox(创建Socket失败!);WSACleanup();return;}intIpAddress;//判断域名或IP地址inti=0;CStringr;m_ip.GetWindowText(r);IpAddress=inet_addr(r);if(IpAddress==INADDR_NONE){hostent*pHostent=gethostbyname(str);if(pHostent)IpAddress=(*(in_addr*)pHostent-h_addr).s_addr;}if(m_port1m_port2){MessageBox(请确保起始Port不大于终止port);WSACleanup();return;}structsockaddr_indesthost;//定义套接字地址memset(&desthost,0,sizeof(desthost));desthost.sin_family=AF_INET;//desthost.sin_port=htons(atoi(m_Port));desthost.sin_addr.s_addr=IpAddress;for(unsignedinta=m_port1;a=m_port2;a++){desthost.sin_port=htons(a);char*SendBuf;SendBuf=newchar[2];memset(SendBuf,0,2);intnConnect=connect(Socket,(sockaddr*)&desthost,sizeof(desthost));if(nConnect==SOCKET_ERROR){str.Format(%d,a);m_status+=TCPPort;m_status+=str;m_status+=:Close\r\n;}else{str.Format(%d,a);11m_status+=TCPPort;m_status+=str;m_status+=:open\r\n;}}UpdateData(false);closesocket(Socket);WSACleanup();//释放套接字绑定4.编写Udpscan按钮下的代码如下:UpdateData(true);//MFC窗口函数,用来刷新数据WSADATAWSAData;CStringstr;if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0){MessageBox(初始化Winsock失败!);return;}Socket=socket(AF_INET,SOCK_DGRAM,0);//创建连接套接字if(Socket==INVALID_SOCKET){MessageBox(创建Socket失败!);WSACleanup();return;}intnIotrl;unsignedlongflag=1;nIotrl=ioctlsocket(Socket,FIONBIO,&flag);if(nIotrl==SOCKET_ERROR){MessageBox(设置socket模式失败!);closesocket(Socket);WSACleanup();return;}intIpAddress;inti=0;CStringr;m_ip.GetWindowText(r);IpAddress=inet_addr(r);if(IpAddress==INADDR_NONE)12{hostent*pHostent=gethostbyname(str);if(pHostent)IpAddress=(*(in_addr*)pHostent-h_addr).s_addr;}/*if(m_port1m_port2){MessageBox(请确保起始Port不大于终止po
本文标题:端口程序设计
链接地址:https://www.777doc.com/doc-2152406 .html