毕业设计(论文)-端口扫描软件的设计与实现.pdf_第1页
毕业设计(论文)-端口扫描软件的设计与实现.pdf_第2页
毕业设计(论文)-端口扫描软件的设计与实现.pdf_第3页
毕业设计(论文)-端口扫描软件的设计与实现.pdf_第4页
毕业设计(论文)-端口扫描软件的设计与实现.pdf_第5页
免费预览已结束,剩余21页可下载查看

下载本文档

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

文档简介

山西财经大学毕业论文(设计) 0 目录 中文摘要 i 英文摘要ii 1、引言1 1.1 研究的背景与意义1 1.2 国内外相关研究现状1 1.3 本文研究的主要内容2 2、相关技术和方法概述3 2.1 tcp connect 扫描技术3 2.2 端口扫描技术概述3 3、端口扫描软件的需求分析5 3.1 端口扫描软件的功能需求5 3.2 端口扫描软件的非公能性需求5 4、端口扫描软件的设计6 4.1 基本设计思路 6 4.2 功能模块设计简介6 4.3 程序实现流程 7 5、端口扫描软件的实现 10 5.1 数据输入处理模块10 5.2 执行端口扫描模块12 5.3 界面显示输出模块17 6、软件测试结果 19 6.1 开发的工具简介19 6.2 主要模块测试19 参考文献22 结语23 山西财经大学毕业论文(设计) 1 摘摘摘摘要要要要 随着 internet 迅猛发展和网络社会化的到来,网络已经无所不在地影响 着社会的政治、经济、文化、军事、意识形态和社会生活等各个方面。同时 在全球范围内,针对重要信息资源和网络基础设施的入侵行为和企图入侵行 为的数量仍在持续不断增加,网络攻击与入侵行为对国家安全、经济和社会 生活造成了极大的威胁。因此,网络安全已成为世界各国当今共同关注的焦 点。 本文在研究了端口扫描的原理及相关技术的基础上利用创建 socket 套接 字,调用 connect 函数来连接目标主机的 ip 地址和端口号的方法对端口进行 扫描,为了提高扫描的速度,利用 afxbeginthread 调用线程处理函数来实现 多线程。通过对端口的扫描,找到易受攻击的端口漏洞,加强安全。 关键字关键字关键字关键字:网络安全; 端口扫描 ;多线程 山西财经大学毕业论文(设计) 2 abstractabstractabstractabstract along with the internet swift and violent development and the network socialization arrival, the network already omnipresent was affecting societys politics, the economy, the culture, the military, the ideology and the social life and so on each aspect. meanwhile in the global scope, still was continuing in view of the important information resource and the network infrastructure invasion behavior and the attempt invasion behavior quantity unceasingly to increase, the network attack and the invasion behavior to the national security, the economy and the social life have posed the enormous threat. therefore, the network security has become the focal point which the various countries now together pays attention. base on the study of the port scanning principle and related technology creating socket connect function to connect, invoked the target hosts ip address and port method to port scanned. in order to improve the speed of afxbegin thread scan, using the calling thread processing function to realize multithreading through the port scanning.find vulnerable port to enhance safety loopholes. keywordskeywordskeywordskeywords: : : :network security;portscanning; multithreading 山西财经大学毕业论文(设计) 3 1引言 1.1 研究的背景与意义 internet 为人类交换信息,促进科学、技术、文化、教育、生产的发展, 提高现代人的生活质量提供了极大的便利,但同时对国家、单位和个人的信 息安全带来了极大的威胁。由于因特网的全球性、开放性、无缝连通性、共 享性,使得任何人都可以自由地接入 internet。黑客会采用各种攻击手段进 行破坏活动,这些攻击手段都是通过寻找系统的弱点,以便达到破坏、欺骗、 窃取数据等目的,造成经济上和政治上不可估量的损失。 通过端口扫描,发现系统的安全漏洞。它使系统用户了解系统目前向外 界提供了哪些服务,从而为系统用户管理网络提供了一种手段。网络安全的 所有行为都是建立在端口扫描的基础上,所以对端口扫描技术的研究有着非 常重要的现实意义。 1.2 国内外相关研究现状 网络的安全状况取决于网络中最薄弱的环节,任何疏忽都可引入不安全 的因素,最有效的方法是定期对网络系统进行安全性分析,及时发现并修正 存在的脆弱性,保证系统的安全。 在过去的十多年内,国外的端口扫描技术飞速发展,迄今为止,其扫描 技术已经非常完善,但在全面性、隐蔽性和智能性上还有待提高。而安全扫 描器从最初专门为 unix 系统而编写的一些只有简单功能的小程序发展到现 状,已经出现了可以运行在多个操作系统平台上的、具有复杂功能的系统程 序。 国内的扫描技术是在国外扫描器基础上发展起来的。其中有些专门从事 山西财经大学毕业论文(设计) 4 安全技术的公司包括绿盟技术、启明星辰等等。这些公司的扫描器以硬件为 主,不像软件一样受到安装主系统性能的限制。 然而对于更多的基于主机的端口扫描软件而言,简单、实用、可靠才是 它们的长处。 1.3 本文研究的主要内容 本文主要阐述了课题的研究背景、设计思路以及软件的实现方法。本软 件是运用 vc+6.0 作为开发工具、在 windows xp 环境下运行的,主要实现对 指定的目标主机的端口进行扫描并获取扫描结果。 本软件采用 tcp connect 最基本的扫描技术对局域网内指定的目标主机 ip 地址和端口号进行扫描,通过创建 socket 套接字,调用 connect 方法实现 与目标主机 ip 地址和端口号连接, 其中连接的过程用到了 tcp 三次握手机制。 然后利用多线程提高端口扫描的速度。 本文先是引言部分,主要阐述了课题研究的背景和意义、国内外相关研 究现状和全文概述。然后根据用户使用端口扫描软件的实际流程设计整个软 件的扫描流程,以高效性、简洁性、可用性为总体原则。本软件开发过程中 采用的是边开发边验证的方式,最后把模块进行集成,从而实现预期效果。 最后对整个软件进行测试,完成毕业论文的撰写。 山西财经大学毕业论文(设计) 5 2相关技术和方法概述 2.1 tcp connect 扫描技术 全 tcp 连接是长期以来 tcp 端口扫描的基础。扫描主机尝试(使用三次 握手)与目的机指定端口建立正规的连接。连接由操作系统调用 connect() 开始。对于每一个监听端口,如果端口处于侦听状态,那么 connect()会获得 成功,否则返回1,表示端口不可访问。由于通常情况下,这不需要什么特 权,所以几乎所有的用户(包括多用户环境下)都可以通过 connect 来实现 这个技术。在扫描多个端口时,为了提高端口扫描的速度,可以利用多线程 的方法同时打开多个套接字,实现线程间的同步。 2.2 端口扫描技术概述 端口扫描途径主要是扫描软件。扫描软件是一种自动检测远程或本地主 机安全性弱点的程序,通过使用扫描软件你可一不留痕迹的发现远程服务器 的各种 tcp 端口的分配及提供的服务和它们的软件版本!这就能让我们间接 的或直观的了解到远程主机所存在的安全问题。 扫描软件通过选用远程 tcp/ip 不同的端口的服务,并记录目标给予的回 答,通过这种方法,可以搜集到很多关于目标主机的各种有用的信息。扫描 软件应该有三项功能:发现一个主机或网络的能力;一旦发现一台主机,有 发现什么服务正运行在这台主机上的能力;通过测试这些服务,发现漏洞的 能力。 当系统间建立连接和释放连接时,就会用到所谓的握手机制。它的工作 原理大致如下:握手的第一步,一台计算机首先请求和另外一台计算机建立 连接,它通过发送一个 syn 请求来完成,也即 syn 标记位置位。两台计算机 山西财经大学毕业论文(设计) 6 间的每条信息都有一个由发送方产生的系列号,系列号的使用使得双方知道 他们之间是同步的,而且还可以起到丢失信息时或是接收顺序错误时发送警 告信息的作用。握手第二步,接收到 syn 请求的计算机响应发送来的系列号, 它会将 ack 标记位置位,同时它也提供自己的系列号。握手第三步,发起连 接请求的计算机对收到的系列号作出应答,这样,两台计算机之间的连接才 算建立起来。 两台计算机释放连接时的情况与此类似:当一台计算机说没有更多的数 据需要发送了,它发送一个 fin 信号(将 fin 标记位置位)通知另一端,接 收到 fin 的另一端计算机可能发送完了数据,也可能没发送完,但它会对此 作出应答,而当它真正完成所有需要发送的数据后,它会再发送一个自己的 fin 信号,等对方对此作出应答后,连接才彻底解除。 山西财经大学毕业论文(设计) 7 3端口扫描软件的需求分析 3.1 端口扫描软件的功能需求 软件主要完成对目标主机端口的扫描。软件可以判断用户输入的 ip 地址 及选择多端口扫描时所输入的端口号是否正确,并把扫描的结果输出到扫描 结果视图当中。软件的核心是多线程扫描和扫描结果输出的实现。此外,软 件有把结果视图中的结果保存到用户指定的路径和文件中的功能。 主要实现的功能包括: (1)测试主机某个端口或某些端口范围是否打开。 (2)扫描单个或多个端口的单选按钮。 (3)实现多线程扫描。 (4)将扫描到的结果输出到扫描结果视图中。 (5) “开始” “停止”及“扫描结果保存”功能的实现。 (6)提供友好的用户界面。操作简单,不需要计算机专业人员。 3.2 端口扫描软件的非功能性需求 该端口扫描软件是面向普通的对端口扫描有需求的用户使用,本软件的 最大特点是界面简单、使用方便、安全实用。使用该软件的操作人员不需要 具备一定的计算机知识,而该软件的维护人员不仅需要具备相关的计算机知 识,还要懂得软件运行的基本流程以及本软件的特点,以便更好的对本软件 进行维护。 山西财经大学毕业论文(设计) 8 4端口扫描软件的设计 4.1 基本设计思路 通过创建一个 csocket 套接字,调用 connect()函数连接被连接的主机 地址和指定端口号,利用多线程的方法对端口进行扫描以便提高端口扫描的 速度,并获取扫描结果。 4.2 功能模块设计简介 本软件主要实现数据输入处理、执行端口的扫描和友好界面显示三个功 能模块。如图 4-1 所示: 端口扫描软件 执行端口扫描 界面显示输出 数据输入处理 图 4-1端口扫描软件主界面功能模块 软件模块的主要功能性能描述如下: 数据输入处理:该模块主要负责判断用户所输入的 ip 地址、用户所选择 扫描的端口数、尝试扫描次数以及执行多端口扫描时判断起始端口是否小于 结束端口。 执行端口扫描:该模块主要负责响应“开始”按钮、 “停止”按钮、工具 栏中的“保存”按钮以及执行多端口扫描时多线程的循环调用。 界面显示输出:该模块主要负责把所扫描到的结果输出到“扫描结果” 视 山西财经大学毕业论文(设计) 9 图中。 4.3 程序总体流程 程序总体流程图如图 4-2 所示: 输入 ip 地址,端 口范围和尝试扫 描次数 判断输入数据 是否合法 否 显示扫描到的端口,结束 是 图 4-2 程序总体流程图 程序详细流程图如图 4-3 所示: 山西财经大学毕业论文(设计) 10 f 开始扫描 初始化 扫描单个端 口? m_bsingleport = true; m_csingleport.enablewindow(); m_cportfrom.enablewindow(false); m_cportto.enablewindow(false); m_bsingleport = false; m_csingleport.enablewindow(false); m_cportfrom.enablewindow(); m_cportto.enablewindow(); m_cbtnstop.enablewindow(false); 设置端口 开始侦听端口 是 否 有 错 误? 显示结果 设置下一个端口 扫描结束 t t f 图 4-3程序详细流程图 用户输入要扫描的目标主机的 ip 地址,选择是否扫描单个端口,当用户 选择扫描一个端口时, 响应 onradiosingle()函数, 否则响应 onradiorange() 山西财经大学毕业论文(设计) 11 函数。默认的尝试扫描次数为 1,用户可根据意愿输入多次尝试扫描的次数。 开始扫描时,通过创建 socket 实现与目标主机进行连接,若是多端口扫描, 则执行多线程扫描, 并通过调用 printscanresult()将扫描结果按行输出到扫 描结果视图中。 山西财经大学毕业论文(设计) 12 5端口扫描软件的实现 5.1 数据输入处理模块 (1)用户输入要扫描的目标主机的 ip 地址。读取 ip 到 m_ip 中,并通 过m_cip控件调用isblank()来验证ip地址是否为空, 然后调用getaddress() 验证 ip 地址是否输入正确。 if (m_cip.isblank() messagebox(_t(“请输入 ip 地址.“), _t(“error“), mb_ok | mb_iconexclamation); return ; if(m_cip.getaddress(f1,f2,f3,f4) ipaddress,ip.getbuffer(ip.getlength(); strcpy(pnode-port,_itoa(m_ncounter,temp,10); pnode-bstatus = 1; /open pnode-nattempts = nattempt; criticalsection.lock(); m_pstatuslist-addtail(pnode); criticalsection.unlock(); /试图连接次数 nattempt+; 其中,socket 的创建就是在 testconnection 函数中实现的。 山西财经大学毕业论文(设计) 14 booltestconnection(cstringip,uint nport) cthesocket* psocket; psocket = new cthesocket; assert(psocket); /创建 socket if (!psocket-create() /如果创建失败,则删除,返回 false delete psocket; psocket = null; return false; /连接被连接的主机地址和指定端口 while (!psocket-connect(ip , nport) /如果失败返回 false delete psocket; psocket = null; return false; /关闭 socket psocket-close(); delete psocket; return true; 5.2 执行端口扫描模块 (1)点击“开始”按钮进行端口扫描,程序响应 onbuttonscan()函数。 调用 initui()来初始化界面。依据 m_maxport=m_minport 判断是否执行多 线程扫描,如果是多端口扫描,则利用 afxbeginthread 函数来启动线程, 用 threadnum 循环控制线程不大于所定义的最大线程数max_threads. 山西财经大学毕业论文(设计) 15 void cportscanview:onbuttonscan() initui(); for(m_ncounter=m_minport;m_ncounterip=m_ip; pparam-nmaxattempts=m_nmaxattempts; pparam-parent=m_parent; pparam-ncounter=m_ncounter; if(m_maxport=m_minport)/如果只有一个端口,则不执行多线程 threadfunc(lpvoid)pparam); printscanresult(); return; else/判断当前线程数是否超过最大线程数,是则空循环 while( threadnum = max_threads ); /线程计数加一 criticalsection.lock(); threadnum+; criticalsection.unlock(); pthread=afxbeginthread(threadfunc,(lpvoid)pparam); if(!pthread) messagebox(“thread“,“error“,null); criticalsection.lock(); m_ncounter+; criticalsection.unlock(); /判断所有线程是否结束,否则空循环等待 / while( threadnum 0 ); printscanresult(); 由于要实现高速度、高效率的扫描目标,程序采用了多线程并发扫描技 山西财经大学毕业论文(设计) 16 术实现了高效率扫描。若是多端口扫描,则调用 afxbeginthread 函数传递线 程函数地址和线程参数来启动线程函数。对于共享的资源,则利用 criticalsection 调用 lock()和 unlock()来独占这些资源的访问权。 uint threadfunc(lpvoid lpparam) bool bisopen = false; uint nattempt = 1; threadparam* pparam=(threadparam*)lpparam; while(nattempt nmaxattempts /打开连接 bisopen = testconnection( pparam-ip,pparam-ncounter); /判断是否打开 if (bisopen) data*pnode = newdata; assert(pnode); strcpy(pnode-ipaddress,pparam-ip.getbuffer(pparam-ip.getlength(); strcpy(pnode-port,_itoa(pparam-ncounter,temp,10); pnode-bstatus = 1; /open pnode-nattempts = nattempt; criticalsection.lock(); m_pstatuslist-addtail(pnode); criticalsection.unlock(); nattempt+;/试图连接次数 山西财经大学毕业论文(设计) 17 /如果还是无法扫描成功 if (!bisopen) tchar temp10 = “0“; data*pnode = newdata; assert(pnode); strcpy(pnode-ipaddress,pparam-ip.getbuffer(pparam-ip.getlength(); strcpy(pnode-port,_itoa(pparam-ncounter,temp,10); pnode-bstatus = 0; /关闭状态 pnode-nattempts = nattempt-1; criticalsection.lock(); m_pstatuslist-addtail(pnode); criticalsection.unlock(); *部分代码省略* /线程计数器减一 criticalsection.lock(); threadnum-; criticalsection.unlock(); return 0; (2)用户点击“停止”按钮,扫描软件会终止扫描并将相关的资源释放 掉以结束对系统资源的占用。 void cportscanview:onbuttonstop() m_ncounter = m_maxport+1; m_cbtnstop.enablewindow(false); 山西财经大学毕业论文(设计) 18 m_cbtnscan.enablewindow(); m_parent-setstatusbartext(cstring)_t(“ready“); (3) 调用 onfilesave () 函数, 在得到保存结果的消息后利用 cfiledialog 的对象调用 cfiledialog 构造函数创建一个标准文件保存的对话框。对所扫 描的结果进行保存的过程是先将扫描结果写入指定buffer中, 然后调用write ()将 buffer 中的数据写入文件中,最后还要调用 empty()清空 buffer。 void cportscanview:onfilesave() cfiledialog* pdlg = new cfiledialog(false, _t(“txt“),null, ofn_overwriteprompt | ofn_explorer | ofn_longnames, _t(“scanned ports files (*.txt)“),this); assert(pdlg); if (pdlg-domodal() = idok) int nhandle,retval; nhandle = _open(pdlg-getpathname(),_o_binary | _o_creat | _o_trunc | _o_rdwr); if (nhandle = -1) messagebox(_t(“unable to open output file to write.“), _t(“error“), mb_ok | mb_iconexclamation); delete pdlg; return; /写入指定 buffer 中 position pos = m_pstatuslist-getheadposition(); while (pos) cstring buffer; data*pnode = (data*)m_pstatuslist-getnext(pos); buffer = pnode-ipaddress; 山西财经大学毕业论文(设计) 19 buffer += _t(,); buffer += pnode-port; buffer += _t(,); if (pnode-bstatus) buffer += _t(“open“); else buffer += _t(“close“); buffer += _t(“rn0“); retval = _write(nhandle, (void*)buffer.getbuffer(buffer.getlength(), buffer.getlength(); if (retval != buffer.getlength() messagebox(_t(“an error occured while writing records.“), _t(“error“),mb_ok | mb_iconexclamation); delete pdlg; return; buffer.empty(); _close(nhandle); delete pdlg; 5.3 界面显示输出模块 在扫描结果后,通过调用 printscanresult()函数来将扫描的结果按行 输出到扫描结果视图中。printscanresult()函数在 onbuttonscan 响应函 数中被调用。 void cportscanview:printscanresult() m_parent-setstatusbartext(cstring_t(“完毕”);/设定状态栏 m_cbtnscan.enablewindow(); 山西财经大学毕业论文(设计) 20 m_chtnscan.enablewindow(false); /填充报表视图 uint nindex = 0; position pos = m_pstatuslist-getheadposition(); /循环插入扫描结果 tchar temp10 = “0“; while (pos) data*pnode = (data*)m_pstatuslist-getnext(pos); additem(nindex,0,pnode-ipaddress); additem(nindex,1,pnode-port); if (pnode-bstatus) additem(nindex,2,_t(“打开“); additem(nindex,4,_t(“*“); else additem(nindex,2,_t(“关闭“); additem(nindex,4,_t(“ “); additem(nindex+,3,_itoa(pnode-nattempts,temp,10); 山西财经大学毕业论文(设计) 21 6软件测试结果 6.1 开发的工具简介 visual c+6.0 是微软公司推出的开发 win32 应用程序(windows 95/98/2000/xp/nt)的、面向对象的可视化集成工具。它的最大优点就是提 供了功能强大的 mfc 类库,其中封装了大量的类及其函数,很多 windows 程 序所共有的标准内容可以由 mfc 的类来提供, mfc 类为这些内容提供了用户接 口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序 特有的东西填入这个轮廓,使编程工作变得更加轻松容易。 6.2 主要模块测试 6-1 软件主界面 山西财经大学毕业论文(设计) 22 如图 6-1 所示界面为用户进入本软件后看到的第一个界面,顶部为软件 的工具栏和“保存”快捷按钮,主框架部分包括 ip 地址、扫描一个端口和扫 描多个端口的单选按钮、尝试扫描次数、扫描结果视图及“开始”按钮

温馨提示

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

评论

0/150

提交评论