端口扫描程序设计_第1页
端口扫描程序设计_第2页
端口扫描程序设计_第3页
端口扫描程序设计_第4页
端口扫描程序设计_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、网络安全程序设计结课论文端口扫描程序设计 目录第一章 序言2第二章 系统设计52.1 运行环境及语言52.2系统功能52.3程序运行流程图52.4 程序设计过程62.41创建工程62.42 主机端口扫描程序设计流程82.43主要代码92.5运行结果测试13第三章 总结及心得153.1 总结153.2 心得体会15第四章 参考文献15第一章 序言1.1 背景Internet快速的发展,为我们带来了方便同时也带给了我们信息安全担忧。在计算机信息安全管理中可以通过端口扫描收集系统的信息来自动监测远程或本地主机安全性弱点的程序,可以发现远程服务器的各种tcp端口的分配及提供的服务与他们的软件版本。从而

2、让管理员间接的或直观的了解到远程主机所存在的安全问题。从而端口扫描技术得到人们的重视。1.2目的该文章对端口扫描技术的原理和应用进行了阐述,并设计了一个简单的基于windows平台上的端口扫描系统。 此程序主要完成了TCP connect()扫描和UDP扫描功能。TCP扫描支持多线程,能对单个指定的主机进行扫描或对指定网段内的主机进行逐个扫描。能扫描特定的部分端口号或对指定的端口段内的端口进行逐个扫描。此端口扫描程序能快速地进行TCP扫描,准确地检测出对TCP协议开放的端口。而对于UDP扫描只支持单线程,速度较慢。扫描结果以列表的形式直观地展现出来。1.3端口扫描概述网络安

3、全探测在网络安全中起着主动防御的作用,占有非常重要的地位。网络安全探测的所有功能都是建立在端口扫描的基础上,所以对端口扫描技术的研究有着非常重要的现实意义。 每一个网络主机都相当于一个“房间”,黑客能否进入“房间”,取决于是否发现了打开的“门窗”。也就是说,能否入侵网络主机,或者网络主机是否安全,关键在于能否查出网络主机的系统信息。而端口是主机与外界通讯交流的数据出入口,即是“门窗”。端口分为硬件端口和软件端口,所谓硬件端口又称为接口,包括:USB端口、串行端口、并行端口等。软件端口一般指网络中面向连接服务(TCP)和无连接服务(UDP)的通讯协议的端口。一个端口就是一个潜在的通信通

4、道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息。通过端口扫描,发现系统的安全漏洞。它使系统用户了解系统目前向外界提供了哪些服务,从而为系统用户管理网络提供了一种手段1.4端口扫描的原理端口有两种,UDP端口和TCP端口。由于UDP端口是面向无连接的,从原理的角度来看,没有被扫描的可能,或者说不存在一种迅速而又通用的扫描算法;而TCP端口具有连接定向(Connection Oriented)的特性(即是有面向连接的协议),为端口的扫描提供了基础。  TCP建立连接时有三次握手:首先,Client端往Server某一端口发送请求连接的SYN包,

5、如果Server的这一端口允许连接,就会给Client端发一个ACK回包,Client端收到Server的ACK包后再给Server端发一个ACK包,TCP连接正式建立,这就是连接成功的过程。当Client端往Server某一端口发送请求连接的SYN包,此时若Server的这一端口不允许连接,就会给Client端发一个RST回包,Client端收到Server的RST包后再给Server端发一个RST包,这就是连接失败的过程。基于连接的建立过程,可以想到,假如要扫描某一个TCP端口,可以往该端口发一个SYN包,如果该端口处于打开状态,我们就可以收到一个ACK,也就是说,如果收到ACK,就可以判

6、断目标端口处于打开状态,否则,目标端口处于关闭状态。这就是TCP端口扫描的基本原理第二章 系统设计2.1 运行环境及语言运行环境:Visual C+ 6.0 语言:c+2.2系统功能简易的TCP connect()扫描,支持多线程; UDP扫描功能; 能对单个指定的主机进行扫描或扫描指定网段内的主机; 能扫描特定的部分端口号或对指定的端口段内的端口进行逐个扫描。2.3程序运行流程图开 始输入ip和端口判断ip和端口合法开始扫描是否2.4 程序设计过程2.41创建工程使用VC+的应用程序生成向导(MFC AppWizardex

7、e)创建一个基于对话框的工程,该工程的名称201200824420fandi,如图 所示:单击确定, 然后选择基本对话框,如图所示点击下一步,再在Windows SocketsW前打上勾,支持Winsock编程,如图接下来一直选择默认直到完成。2.42 主机端口扫描程序设计流程1. 设计对话框2按Ctrl+W打开类向导,添加变量如图2.43主要代码1.在头文件findport100114019Dlg.h里添加private:SOCKET Socket;2. findport100114019Dlg.cpp文件中添加如下文件包含信息:#pragma comment (lib,"ws2_

8、32.lib") / 静态链接库#include <winsock.h>3.编写Tcpscan按钮下的代码 如下:UpdateData(true); /MFC窗口函数,用来刷新数据WSADATA WSAData;CString str;if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0)MessageBox("初始化Winsock失败!");return;Socket=socket(AF_INET,SOCK_STREAM,0); /创建连接套接字if(Socket=INVALID_SOCKET)MessageBox

9、("创建Socket失败!");WSACleanup(); return;int IpAddress;/判断域名或IP地址int i=0;CString r;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_port1>m_port2)MessageBox("请确

10、保起始Port不大于终止port");WSACleanup();return;struct sockaddr_in desthost; /定义套接字地址memset(& desthost,0,sizeof(desthost); desthost.sin_family=AF_INET; /desthost.sin_port=htons(atoi(m_Port); desthost.sin_addr.s_addr=IpAddress;for(unsigned int a =m_port1;a<=m_port2;a+)desthost.sin_port=htons(a);ch

11、ar *SendBuf;SendBuf=new char2;memset(SendBuf,0,2);int nConnect=connect(Socket,(sockaddr*)&desthost,sizeof(desthost);if(nConnect=SOCKET_ERROR)str.Format("%d",a);m_status+="TCP Port"m_status+=str;m_status+=": Closern"elsestr.Format("%d",a);m_status+="TC

12、P Port"m_status+=str;m_status+=": openrn"UpdateData(false);closesocket(Socket);WSACleanup(); /释放套接字绑定4.编写Udpscan按钮下的代码 如下:UpdateData(true); /MFC窗口函数,用来刷新数据WSADATA WSAData;CString str;if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0)MessageBox("初始化Winsock失败!");return;Socket=socke

13、t(AF_INET,SOCK_DGRAM,0); /创建连接套接字if(Socket=INVALID_SOCKET)MessageBox("创建Socket失败!");WSACleanup(); return;int nIotrl;unsigned long flag=1; nIotrl=ioctlsocket(Socket,FIONBIO,&flag);if(nIotrl=SOCKET_ERROR)MessageBox("设置socket模式失败!");closesocket(Socket);WSACleanup(); return;int I

14、pAddress;int i=0;CString r;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_port1>m_port2)MessageBox("请确保起始Port不大于终止port");WSACleanup();return;*/struct sockadd

15、r_in desthost; /定义套接字地址memset(&desthost,0,sizeof(desthost); desthost.sin_family=AF_INET; /desthost.sin_port=htons(atoi(m_Port); desthost.sin_addr.s_addr=IpAddress;for(unsigned int a =m_port1;a<=m_port2;a+)desthost.sin_port=htons(a);char *SendBuf;SendBuf=new char2;memset(SendBuf,0,2);int nSend

16、=sendto(Socket,SendBuf,1,0,( struct sockaddr*)&desthost,sizeof(desthost);if(nSend=SOCKET_ERROR)MessageBox("UDP包发送失败!");closesocket(Socket);WSACleanup();return;Sleep(500);sockaddr_in SourceHost;int SourceSize;SourceSize=sizeof(SourceHost);memset(&SourceHost,0,SourceSize);char *RecvB

17、uf;RecvBuf=new char2;memset(RecvBuf,0,2);int nRecv;nRecv=recvfrom(Socket,RecvBuf,1,0,(struct sockaddr*)&SourceHost,&SourceSize);if(nRecv=SOCKET_ERROR) int ErrorCode=GetLastError();if(ErrorCode=10054)str.Format("%d",a);m_status+="UDP Port"m_status+=str;m_status+=": Cl

18、osern" if(ErrorCode=10035) str.Format("%d",a);m_status+="UDP Port"m_status+=str;m_status+=": openrn" else m_status+="UDP Port"m_status+=a;m_status+=": openrn" UpdateData(false);closesocket(Socket);WSACleanup(); /释放套接字绑定2.5运行结果测试如图:第三章 总结及心得3.1 总结端口扫描是综合扫描器最基础的功能,也是黑客攻击的基本步骤,因此,掌握端口扫描的常用技术和防范措施对维护系统安全有重要作用。端口扫描不仅可以得知系统哪些端口开 放,还可以根据系统的响应信息得知目标系统的相关信息。由于

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论