端口扫描备份_第1页
端口扫描备份_第2页
端口扫描备份_第3页
端口扫描备份_第4页
端口扫描备份_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

沈阳工程学院实训报告实训题目:程序设计专项实训——端口扫描程序设计系别信息学院班级学生姓名学号指导教师张小瑞史江萍刘娜实训进行地点:信息学院实验室任务下达时间:2013年12月23日起止日期:2013年12月23日起——至2014年1月3日止《程序设计专项实训》教学大纲课程编号:B02636第7学期课程类型:必修学时:2周学分:2适用专业:计算机科学与技术专业(信息安全方向)编制时间:2011年1月一、实训的性质、目的和意义程序设计实训是实践性教学环节之一,是信息安全专业提高编程能力的必修课程。本实训提供一系列与信息安全相关的题目,由学生通过学习、编程来完成。通过本次实训,使学生实际接触与信息安全相关的编程工作,培训学生兴趣,巩固课堂教学内容,使学生掌握程序设计的基本思想和方法。另外,熟悉软件开发的整个流程,提高学生分析和解决实际问题的能力,培养团队精神,并在此基础上强化学生的实践意识、提高其实际动手能力和创新能力,从而为后续课程的学习,毕业设计环节以及将来的实际工作打好坚实的基础。二、实训的具体内容信息安全程序设计实训要求学生综合利用所学的有关知识,在教师的指导下,运用软件工程的方法,严格按照研发的步骤展开项目实战,完成某个项目的开发,并形成书面的实训报告。在强化学生编程能力的同时,着重培养学生的综合技术应用能力;分析问题与解决问题的能力。本实训不限制程序开发语言,学生可以根据自己的题目选择合适的语言。下面是各个设计阶段的具体内容。⒈系统分析“分析就是在采取行动之前,对问题的研究”。系统分析在软件开发过程中是非常重要的,其任务就是在考虑完各方面的实际因素后,就要对项目进行总体的分析设计。简单的讲,总体设计需要确定的内容应当包括:⑴系统需要实现哪些功能;⑵开发使用什么软件,在什么样的硬件环境;⑶需要多少时间,计划进度如何;⑷需要遵循的规则和标准有哪些。一般情况下,在总体设计出来后,就需要拿出一个确定的系统开发方案。本阶段的设计结果(即系统分析)应该在实训报告中进行详细描述,写出系统需要实现的目的和目标,.系统各个模块与结构,使用软件,硬件和技术分析说明,开发时间进度表。总之,系统分析阶段是以比较抽象概括的方式提出了解决问题的办法。⒉详细设计详细设计阶段的任务,也就是把问题解决方案具体化。详细设计主要是针对程序开发部分来说的,但这个阶段的不是真正编写程序,而是设计出程序的详细规格说明,应该包含必要的细节,例如:程序界面风格、表单、需要的基础数据等,程序员可以根据它们写出实际的程序代码。⒊编码在前面分析与详细设计的基础上,使用Java语言,把上一阶段的设计结果编写成程序,程序的风格应符合软件工程的思想和规范。⒋测试要求学习并掌握开发环境所提供的调试工具,能够阅读在线帮助。在此基础之上,应根据系统的需求设计相应的测试数据方案(特别是一些异常情况的处理),最终完成该系统的测试和调试任务。并要写出相应的测试说明书。三、教学方法与重点、难点教学方法:采用理论教学和实践教学相结合的方法。在理论教学中尽量采用实际编程等教学手段,针对不同的知识点采取不同的教学方法,例如实例教学、探索性教学等,注重课堂教学过程中教与学的互动性。老师进行提示性讲解后,在实践环节中以学生为主体,鼓励学生动手实践,教师跟踪整个环节,耐心指导,快速纠正学生错误,及时解决学生困难。重点:项目的开发流程;关键安全知识点的讲授;实例编写。难点:软件开发过程;安全知识;项目的实现。四、建议学时分配表教学内容总学时讲课学时实践学时备注项目讲解和项目准备阶段,数据库的学习与设计422课设前给学生下达任务要求任务讲解及第一次集中编码422任务讲解及第二次集中编码422任务讲解及第三次集中编码422任务讲解及第四次集中编码422任务讲解及第五次集中编码422任务讲解及第六次集中编码422程序编码、测试88答辩、撰写设计报告413学生演示,教师审查学生的代码并给出评价合计401525五、实训选题的原则和要求对本实训选题提出如下要求:⒈选题原则实训题目以选用学生相对比较熟悉并且具有一定兴趣的安全相关的题目为宜,力求通过本实践性教学环节,使学生能够强化理解信息安全知识点,增强编程能力,增加对于信息安全问题的兴趣,对软件开发过程有一个更清醒的认识。学生自由结组或组织分组,根据工作量决定小组人数,建议每组3-5人,组内分工,协调合作。⒉选题要求在后面的课题表中列出了几个实训课题,每个课题都有相应的要求或说明。各课题的难易度有一定的差异,因此,参加实训的学生首先要了解设计的任务,仔细阅读各个课题的设计要求,然后根据自己的基础和能力情况选择其中一题,或者由指导教师指定。一般来说,选择课题应以在规定的时间内能完成,并能得到应有的锻炼为原则。若学生对课题表以外的相关课题较感兴趣,希望选作本次实训的课题时,应征得指导教师的认可,并写出明确的设计要求和说明。设计时要严格按照题意要求进行设计,不能随意更改。若确因条件所限,必须要改变课题要求时,应在征得指导教师同意的前提下进行。3.参考选题(1)读写windows注册表(2)键盘钩子程序(3)自动更新程序(4)SQL注入实例(5)端口扫描器(6)进程注入程序(7)数据加密和解密——DES/3DES(8)数据加密和解密——RSA(9)图像数字水印(10)开启和关闭windows服务六、实训报告要求实训的设计报告是学生对本次实训的全面总结,应该反映每个设计阶段的设计思路和设计内容。该报告应作为整个实训评分的书面依据和存档材料。实训报告一般要以固定规格的纸张(如A4)书写或打印并装订,字迹及图形要清楚,工整,规范。内容及要求如下:⑴各个阶段的输出结果。⑵系统环境配置与操作说明。⑶总结⑷验收情况七、成绩评定标准专题设计的成绩评定以选定课题的难易度,完成情况和设计报告为依据综合评分。从总体来说,所设计的系统应该符合设计要求,设计过程中的每一个阶段均应提供正确的文档(设计报告),设计报告要符合规范要求。序号报告内容所占比重评分原则不给分及格中等良好优秀1问题描述5%没有不完整基本正确描述正确描述准确2设计思想10%没有不完整基本可行方案良好很有说服力3具体设计的正确性70%不正确不完整基本正确正确,清晰正确,清晰4组内是否前后一致5%不一致有些不一致基本一致一致完全一致5其他10%包括是否按时完成,报告格式,字迹、语言等等八、题目说明读写windows注册表目的和要求编写应用程序,对windows的注册表进行增加、删除、修改键和键值的操作,以此熟悉读写注册表的API的使用基本内容使用RegOpenKeyEx或RegCreateKeyEx函数打开或创建一个键;使用RegQueryValueEx读取子键的值,使用RegSetValueEx设置子键值,使用RegEnumKey获得所有子键,使用RegDeleteKey删除一个键;

完成操作后使用RegCloseKey关闭键。键盘钩子程序目的和要求学习钩子的使用方式基本内容编写应用程序,监听键盘操作,并将一定时间内键盘输入的内容记录在一个txt文档中。自动更新程序目的和要求模拟应用程序自动更新的过程,以此了解自动更新原理基本内容编写应用程序,分为服务器端和客户端。客户端定期向服务器端查询更新情况。若需要更新,客户端自动从服务器端下载更新文件,并且进行更新。4.SQL注入实验目的和要求模拟使用SQL注入方法入侵系统的过程,以此了解SQL注入的原理基本内容编写简单的登录系统程序,用户名和密码从数据库中获取。使用SQL注入方式使用非法用户名和密码进入系统。简单端口扫描器目的和要求通过本题目,了解端口扫描器的原理基本内容使用多线程技术,对本机的一定范围内的端口进行TCP连接。若在一定时间内无响应,认为端口关闭,若连接成功,则端口打开。进程注入程序目的和要求通过本题目,学习进程注入的方法,了解进程注入的原理基本内容使用钩子技术,将放入DLL文件中的程序注入到explorer.exe或者IE中,跟随其运行。数据加密和解密——DES/3DES目的和要求通过本实验,了解DES加密和解密的原理基本内容自己编写DES/3DES加密算法,并对磁盘文件中的数据进行加密和解密。数据加密和解密——RSA目的和要求通过本实验,了解RSA加密和解密的原理基本内容自己编写RSA加密算法,并对磁盘文件中的数据进行加密和解密。图像数字水印目的和要求通过本实验,了解图像数字水印的原理基本内容自己编写一个简单的数字水印的嵌入和检测算法,对一幅图像进行真伪识别。开启和关闭windows服务目的和要求通过本实验,学习开启和关闭windows服务的方法基本内容自己编写程序,添加一个windows服务并且启动,然后关闭它。九、参考资料1.石志国,薛为民,尹浩编著,计算机网络安全教程,北方交通大学出版社,2007年1月2.(美)斯托林斯(Stallings,W.)著,孟庆树等译,密码编码学与网络安全——原理与实践(第四版),电子工业出版社,2006年11月3.(美)马里克(Malik,S.)著;王宝生,朱培栋,白建军译,网络安全原理与实践,人民邮电出版社,2008年08月4.周继军,蔡毅主编,网络与信息安全基础(重点大学计算机专业系列教材),清华大学出版社,2008年08月。5.张敏波编著,网络安全实战详解(企业专供版),电子工业出版社,2008年05月6.杨波等编著.现代密码学,清华大学出版社,2003年.7.关振胜等编著.公钥基础设施PKI及其应用,电子工业出版社,2008年.8.傅建明,彭国军,张焕国编著.计算机病毒分析与对抗,武汉大学出版社,2004年.9.陈志雨等编著,计算机信息安全技术应用,电子工业出版社,2005年.10.

胡铮等编著,

网络与信息安全,清华大学出版社,2006年.11.王景中,徐小青等编著,计算机通信信息安全技术,清华大学出版社,2006年.12.楚狂等编著,网络安全与防火墙技术,人民邮电出版社,2000年.13.胡建伟等编著,网络对抗原理,西安电子科技大学出版,2004年.14.杜晔

张大伟

范艳芳.网络攻防技术教程:从原理到实践,武汉大学出版社,2008年.

沈阳工程学院实训成绩评定表系(部):信息学院班级:信安本101学生姓名:何忠海指导教师评审意见评价内容具体要求权重评分加权分调研论证能独立查阅文献,收集资料;能制定实训方案和日程安排。0.15432工作能力态度工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作,0.25432工作量按期圆满完成规定的设计任务,工作量饱满,难度适宜。0.25432说明书的质量说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。0.55432指导教师评审成绩(加权分合计乘以8)分加权分合计指导教师签名:年月日评阅教师评审意见评价内容具体要求权重评分加权分查阅文献查阅文献有广泛性,有综合归纳资料的能力。0.25432工作量工作量饱满,难度适中。0.55432说明书的质量说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。0.35432评阅教师评审成绩(加权分合计乘以4)分加权分合计评阅教师签名:年月日答辩小组评审意见评价内容具体要求权重评分加权分学生汇报汇报准备充分,思路清晰;语言表达准确,概念清楚,论点正确,有层次,有重点,基本上反映了所完成任务的全部内容;时间符合要求。0.55432答辩思路清晰;回答问题有理论依据,基本概念清楚;主要问题回答准确,深入,有说服力。0.55432答辩小组评审成绩(加权分合计乘以8)分加权分合计答辩小组教师签名:年月日课程设计总评成绩分附表2:工作流程说明表部门教务处工作名称程序设计实训经办人员各教学系部需要配合的相关部门教务处实践教学科工作内容简介为进一步巩固消化学生所学知识、培养学生综合运用所学相关课程知识的能力,针对某门课程所开设的设计。工作流程1.指导教师进行实训的选题工作,填写备选题目登记表。2.教研室主任对指导教师的选题进行筛选审查。3.系部教学副主任对实训的选题审核签字。4.指导教师向学生下达实训任务书。5.指导教师指导、督促、检查学生设计情况,填写实训指导教师工作日志。6.教务处、系部教学副主任和教研室主任抽查实训完成情况。7.指导教师和评阅教师分别完成实训成绩的评定(必要时可进行答辩),总成绩经教研室主任、系部教学副主任审核签字后,上报教务处。8.教研室对实训样本和有关材料收存归档。9.指导教师进行实训工作的总结。指导教师签名(盖章):计算机网络实训程序设计专项实训-PAGEII--PAGE21-摘要随着互联网的飞速发展,网络入侵行为日益严重,网络安全成为人们关注的焦点。端口扫描技术是网络安全扫描技术的重要技术之一。对目标系统进行端口扫描,是网络系统入侵者进入目标系统的第一步。网络安全探测在网络安全中起着主动防御的作用,占有非常重要的地位。网络安全探测的所有功能都是建立在端口扫描的基础上,所以对端口扫描技术的研究有着非常重要的现实意义。现实世界中的很多过程都具有多条线索同时动作的特性。Java语言的一大特性就是内置对多线程的支持。多线程是指同时存在几个执行体,按几条不同的执行线索共同工作的情况,它使得编程人员可以很方便地开发出具有多线程功能、能同时处理多个任务的功能强大的应用程序。端口是由计算机的通信协议TCP/IP协议定义的。其中规定,有IP地址和端口号作为套接字,它代表TCP连接的一个连接端,一般称为Socket.具体来说,就是用[IP:端口]来定位一台主机的进程。可见端口与进程是一一对应的,如果某个进程正在等待连接,称之为该进程正在监听,那么就会出现与它相对应的端口。由此可见,通过扫描端口,就可以判断出目标计算机有哪些通信进程正在等待连接。利用TCP

connect扫描原理,扫描主机通过TCP/IP协议的三次握手与目标主机的指定端口建立一次完整的连接,如果目标主机该端口有回复,则说明该端口开放。利用多线程技术实现了对一目标IP进行设定数目的端口扫描,对多IP段的特定端口进行扫描。关键词:多线程;端口;端口扫描;IP段扫描目录摘要 I第1章绪论 11.1课题研究背景 11.2端口扫描检测防护技术的发展 21.2.1传统的端口扫描技术的检测防护 21.2.2改进后的端口扫描技术的检测防护 2第2章系统分析 42.1系统主要目标 42.2开发环境及工具 42.3功能介绍 4第3章系统功能设计 63.1获取本机IP 63.2分割字符串函数的实现 63.3TCPconnect()扫描 63.4UDP扫描 7第4章功能实现 94.1TCP扫描检测 94.1.1扫描本机 94.1.2扫描网络中其他主机 94.1.3扫描IP段 104.2UDP扫描检测 114.2.1扫描本机 114.2.2扫描网络中其他主机 124.3TCP、UDP一起扫描 12结论 13参考文献 14附录 15第1章绪论1.1课题研究背景随着网络经济和网络社会时代的到来,Internet爆炸式的发展正在改变着经济、社会、文化的结构和运行方式,推动着国家的现代化、推动着社会文明的发展、改变着人类的思维方式。它给人们的生产和生活都带来了前所未有的飞跃。然而网络技术同其它技术一样是一把双刃剑,危险也伴随着强大功能一道而来。1988年11月2日,是Internet历史上极不光彩的一天。Internet遭到T“蠕虫”病毒的攻击,这种病毒是第一个攻击Internet的重要病毒,在这次事件中共造成了当日在线60000多台主机中近10%的主机遭到了破坏,大量的数据和资料毁于一旦,直接造成经济损失上亿美元。这还得益于人们对蠕虫病毒的传播做出了迅速的反应,阻止了继续扩散,才减少了病毒入侵造成的损失。从那以后,网络安全问题层出不穷。1999年,CIH病毒使全球范围内的计算机系统受到了严重的损失。2000年初,一些身份不明的黑客相继对YAHOO,E-BAY等商业网站发动的拒绝服务攻击,使这些网站瘫痪达数小时之久,造成的经济损失高达10亿美元。2001年尼姆达病毒及其变种病毒在工nternet上的泛滥,造成了巨大的经济损失。2004年8月7日,中国民间保钓联合会网站遭到攻击,使网站无法正常访问和使用。2006年,被命名为“灰鸽子”的木马程序,不仅侵袭用户的计算机,还可以通过控制用户计算机系统上的摄像头和麦克风,将捕获的图像和声音传递给黑客,从而实现对用户行为的监视。在2006年底开始的2个多月的时间里是又一轮病毒蔓延的狂潮,数百万电脑用户被卷入其中,那只憨态可掬、领首敬香的“熊猫”除而不尽。反病毒工程师们将它命名为“尼姆亚”。它还有一个更通俗的名字一“熊猫烧香”。据不完全统计,国内感染“熊猫烧香”病毒的企业已接近千家,其中外企用户居多,个人用户更是不计其数,损失惨重。最近几年来,这类事件已经成为最热门的话题之一,据相关资料统计表明,电子科技大学硕士学位论文美国每年因网络安全事件造成的经济损失高达75亿美元,全球平均每20秒就发生一次网络入侵事件。而每一次网络入侵发生的最初,入侵者都要通过端口扫描器等工具获取目标主机的信息,然后根据获得的信息制定一个可行的入侵方案,完成入侵。而上面提到的所有案例,基本上都是通过端口扫描技术获得了目标主机的端口分布状态,以及在开放端口上运行的服务和软件版本等信息,然后再利用服务本身存在的漏洞进行病毒的传播。于是,相关的计算机网络安全技术便成为了国内、外研究的重点。计算机网络安全从其本质上来讲就是计算机网络上的信息安全。计算机网络安全所涉及的研究领域较为广泛,从广义来说,凡是涉及到网络上信息的保密性、完整性、可用性、真实性和可控性的相关理论和技术,都是计算机网络安全所要研究的领域。1.2端口扫描检测防护技术的发展端口扫描做为网络入侵的基础,它可以通过向目标主机发送探测数据包,记录目标主机的响应,并通过分析响应数据包来判断服务端口的打开和关闭,从而了解目标主机的安全状况。1.2.1传统的端口扫描技术的检测防护传统的端口扫描技术一般是在较短的时间段集中向目标主机发送大量的探测数据包,并根据返回数据包的信息来判断目标主机端口的分布情况。针对这种扫描技术,端口扫描检测系统采用的方法主要有两种:1.对主机没有对外提供服务的端口进行监测,如果检测到有对这样端口的连接请求,就认为有端口扫描发生;2.对整个网络流量进行监控,检查网络中所有的数据,并对异常情况进行记录,典型的如基于规则的检测方法。比较著名的端口扫描检测工具有Snort,Watcher和PortSentry,它们有各自的优点:Snort是一个轻量级的网络入侵检测系统。它的探测引擎采用模块化的插件结构,允许开发者扩展Snort的功能,同时用户也可以按自己的需要定制功能。Snort检测端口扫描的方法是:在Y秒内,如果检测到从同一个源地址发出,目的为不同的主机和端口组合的TCP或UDP数据包并且数目上超出阂值X,则认为是扫描。Watcher是一个比较完整的基于网络的入侵检测系统。它检测所有通过的数据包,并且将它认为是恶意的攻击行为记录在syslog中。它的检测原理是:如果在短时间内有超过7个以上的端口收到数据包(不管类型如何),那么这一事件就被认为是端口扫描记录下来。PortSentry是基于主机的网络入侵检测系统的一个组成部分,主要用来检测。测外部对主机的端口扫描,它能够对多种扫描方法进行检测。它的检测原理是:对没有开放服务的端口的访问有可能是一次扫描。通过监测没有开放服务的端口,在最近n次连接里由同一个源发起的连接超过X次则判断为一次扫描。1.2.2改进后的端口扫描技术的检测防护目前,端口扫描的手段日益趋于隐蔽化和多样化,传统的端口扫描检测技术已经不能满足需要。新的端口扫描技术做了许多改进,例如:改变扫描的顺序:将要扫描的IP地址和端口的顺序打乱,这样可以躲避和降低检测的效率。降低扫描速度:降低扫描速度能够使当前大部分扫描检测系统不产生报鳌。扫描时间间隔随机化:确定的扫描时间间隔可以使检测系统高效的工作,随机化能够降低系统的检测效率。不太重要字段的随机化:改变扫描数据包中的序列号、确认号、端口号等一些字段值可以增加检测的难度。IP欺骗:源IP地址是很难改变的一个部分,因为扫描者需要接收对方的反馈来确定端口是否开放。如果能够监视一个靠近目标的网络,就可以假冒一个源地址来发送扫描数据包,然后再从被监视的网络中获取响应的数据包。分布式扫描:从许多不同位置的真实主机上发送扫描数据包,扫描的痕迹也被分布在不同的主机上,这会使扫描检测变得更为复杂。在新的端口扫描技术出现后,相应的出现了许多检测防护系统,但均存在一定的缺陷,不能够很好的实现对被保护主机的防护。

第2章系统分析2.1系统主要目标本程序主要实现了:简易的TCPconnect()扫描,支持多线程;UDP扫描功能;能对单个指定的主机进行扫描或扫描指定网段内的主机;能扫描特定的部分端口号或对指定的端口段内的端口进行逐个扫描;2.2开发环境及工具测试平台:WindowsXPProfessional使用软件:VisualC++6.0开发语言:C语言2.3功能介绍服务器上所开放的端口就是潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息,进行端口扫描的方法很多,可以是手工进行扫描、也可以用端口扫描软件进行。扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种方法可以搜集到很多关于目标主机的各种有用的信息,例如远程系统是否支持匿名登陆、是否存在可写的FTP目录、是否开放TELNET服务和HTTPD服务等。端口扫描程序功能模块如下图2.1所示。图2.1功能模块图程序运行流程图2.2所示。图2.2运行流程图第3章系统功能设计本程序主要实现了简易的TCPconnect()扫描和UDP扫描功能,对TCP扫描支持多线程扫描,UDP扫描仅支持单线程。3.1获取本机IP首先使用winsock中的gethostname()函数获取本地主机的标准主机名,再使用函数gethostbyname()主机名字和地址信息的hostent结构指针,最后通过inet_ntoa()函数将地址转化为字符形式返回给主调函数。3.2分割字符串函数的实现由于扫描结果是使用静态字符串保存的,所以最后显示的时候,需要用到分割字符串函数,来将字符串中扫描出的端口号分离出来显示。本函数主要是通过Find()函数来查找用作分隔符的字符串在待查找的字符串中的位置,然后通过Add()函数将分隔符之间的字符保存进数组中,来达到分割字符的目的。1.获取待扫描的主机IP。通过判断选择的哪个RadioButton的值,来选择从对应的IPAddress控件中读入用户输入的值,若是单个的IP则将开始地址StartAddr和结束地址EndAddr都赋值为IPAddress控件的值;若是IP范围,则第一个IP地址赋值给StartAddr,最后一个IP地址赋值给EndAddr。2.获取待扫描的端口号首先读入用户设置的允许的最大线程数。再通过判断选择的哪个RadioButton的值,来选择从对应的EditBox控件中读入用户输入的值。若是指定的端口号,则循环读入EditBox中的端口号(一个端口号占用一行,一次读入一行),每行的字符不超过9字符,再在读入的每行字符的末尾添加字符串结束标记’\0’,再通过atoi()函数把字符型转换为整型,存放在定义的数组结构中,并保存端口号的总个数。若是端口范围,则第一个端口号的值和最后一个端口号的值分别读入存放在定义的结构体中。3.指定端口号的初始化首先试着读取DefaultPorts.txt文件中保存的端口号,若读入成功,则显示该文本文档中保存的值;若该文件不存在或读入异常,则显示默认设置的值。4.指定端口号的保存在运行端口扫描时会将指定端口保存进文本文档DefaultPorts.txt中,若此文件不存在,则创建此文件。3.3TCPconnect()扫描这是最基本的TCP扫描。操作系统提供的connect()系统调用,用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功。否则,这个端口是不能用的,即没有提供服务。这个技术的一个最大的优点是,你不需要任何权限。系统中的任何用户都有权利使用这个调用。另一个好处就是速度。如果对每个目标端口以线性的方式,使用单独的connect()调用,那么将会花费相当长的时间,你可以通过同时打开多个套接字,从而加速扫描。使用非阻塞I/O允许你设置一个低的时间用尽周期,同时观察多个套接字。但这种方法的缺点是很容易被发觉,并且被过滤掉。目标计算机的logs文件会显示一连串的连接和连接是出错的服务消息,并且能很快的使它关闭。1.基本原理调用connect()函数,根据返回值来判断端口是否打开的,connect()函数返回0说明建立连接成功,说明该端口是打开的,就将该端口保存进静态字符串变量中,然后关闭连接,则线程数减一。RunThreadNum是用来控制最大线程数量的。2.扫描多个主机多端口多线程的实现扫描多个主机是使用for循环来实现逐个扫描的,多端口也是使用for循环来实现逐个扫描的。最大线程数量是通过变量RunThreadNum的值来控制的,当其值大于允许的最大线程数maxthread时,便Sleep等待,直到存活的线程数小于maxthread,经过测试最大线程数maxthread设置为150效果较好,不宜大于200。多线程的创建是通过调用AfxBeginThread()函数来实现的。3.扫描结果的显示首先判断静态字符串变量showout_tcp是否为空,若为空说明没有端口是打开的。若存在打开的端口,则调用分割字符串函数将打开的端口号提取出来存放到Array数组中,再分别显示出来。3.4UDP扫描这种方法由于使用的是UDP协议。由于这个协议很简单,所以扫描变得相对比较困难。这是由于打开的端口对扫描探测并不发送一个确认,关闭的端口也并不需要发送一个错误数据包。幸运的是,许多主机在你向一个未打开的UDP端口发送一个数据包时,会返回一个ICMP_PORT_UNREACH错误。这样就能发现哪个端口是关闭的。UDP和ICMP错误都不保证能到达,因此这种扫描就不那么可靠。而且这种扫描方法是很慢的,因为RFC对ICMP错误消息的产生速率做了规定,而且本程序的UDP扫描只支持单线程。1.基本原理首先使用socket()函数创建套接字,再用bind()函数绑定套接字,然后向扫描的目的主机的目的端口发送UDP数据包,再等待目的主机的目的端口是否返回ICMP_PORT_UNREACH错误数据报,若收到返回的错误数据包,则说明该端口是关闭着的,否则该端口是打开的,再将打开的端口保存进静态数组中,以方便显示结果。2.计算效验和首先通过while循环,将各位相加求和,若为奇数个字节,则最后通过if循环将最后一个字节加完,再移位做位运算,最后取反得到效验和,再返回给调用函数。3发送UDP数据包先调用WSASocket()函数创建sock套接字,再调用setsockopt()函数设置套接字选项,再将UDP、IP头部填充好,最后调用sendto()函数将构造的数据包发送到目的IP地址的扫描的端口。USHORTCPortScanDlg::Send_UDPinfo(UINTS_ADR,UINTD_ADR,USHORTDF_SPT,USHORTSCAN_DPT){ …… if((sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED))==INVALID_SOCKET){ ……} if((Check_Ret=setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&FLAG,sizeof(FLAG)))<0){……………} …填充UDP、IP头部………………Send_info=sendto(sock,Packet_Buf,ipheader->total_len,0,(structsockaddr*)&DEST_ADDR,sizeof(DEST_ADDR)); closesocket(sock); return0;}4.接收ICMP数据包首先定义一个套接字集合,并将其清空,再把读数据的套节字加入到套接字集合中,再通过select()函数检查套节字是否可读:1.如果没有则返回1给主调函数,表示没有收到返回的ICMP_PORT_UNREACH错误数据报,则说明该端口是打开的。2.如果有可读的套接字,就再通过FD_ISSET()函数检查需要读取的套接字是否在可读的套接字集合中:(1)如果可读的套接字中没有需要读取的套接字,则返回1给主调函数,表示没有收到返回的ICMP_PORT_UNREACH错误数据报,则说明该端口是打开的。(2)如果可读的套接字中有需要读取的套接字,则调用recvfrom()函数从套接口上接收数据,如果没有数据,则说明该套接口不是用来传送数据的,则可以判断为返回的ICMP_PORT_UNREACH错误数据报,则说明该端口是关闭的。第4章功能实现4.1TCP扫描检测4.1.1扫描本机1.IP设置(1)IP设置为本地IP(58):图4.1设置本机ip(2)IP设置为:图4.2设置指定ip2.端口设置为0-1024,最大线程数设置为100,协议选择TCP3.扫描结果(1)IP设置为本地IP(58)的扫描结果:图4.3本机扫描结果(2)IP设置为的扫描结果:图4.4指定主机扫描结果设置为扫描本地IP和设置为扫描时扫描结果会有差别:扫描时扫描不出端口139,具体原因还不清楚。4.1.2扫描网络中其他主机1.设置IP(经过ping命令发现IP为4的主机能ping通)图4.5指定网络中的主机2.端口设置为0-1024,最大线程数设置为100,协议选择TCP。扫描结果如下图4.6所示。图4.6扫描结果4.1.3扫描IP段1.设置IP图4.7设置扫描ip段2.端口设置为扫描指定端口,最大线程数设置为100,协议选择TCP图4.8设置指定的端口3.扫描结果图4.9ip段扫描结果由扫描结果可知能正常扫描,但由于没有先判断主机是否在线,所以对不在线的主机也发送了连接请求,导致扫描速度较慢。4.2UDP扫描检测4.2.1扫描本机1.IP设置(1)IP设置为本地IP(58):图4.10设置本机ip(2)IP设置为:图4.11设置指定ip2.由于是单线程,扫描速度较慢,端口设置为扫描指定端口,协议选择UDP。图4.12设置指定端口3.扫描结果:IP设置为本地IP(38)的扫描结果和IP设置为的扫描结果相同。图4.13扫描结果4.2.2扫描网络中其他主机1.设置IP(经过ping命令发现IP为4的主机能ping通)图4.14设置网络中的指定主机ip2.由于单线程,扫描速度较慢,端口设置为扫描指定端口同扫描本机的设置协议选择UDP。3.扫描结果如下图4.15网络中指定主机扫描结果由扫描结果可知能正常扫描。4.3TCP、UDP一起扫描IP设置为4,端口设置为指定端口,协议选择TCP和UDP,扫描结果如下:图4.16TCP/UDP同时扫描由扫描结果可知能正常扫描,但由于TCP扫描使用多线程速度较快,而UDP扫描则是单线程,所以速度较慢,若同时进行两种协议的扫描,会使整体速度下降很大,所以不建议选择两种协议同时进行扫描。

结论本设计经过近两周的努力,基本满足了一个端口扫描程序的基本要求。完成后的程序实现了TCPconnect()扫描和UDP扫描功能,TCP扫描支持多线程,能大大加快扫描速度。能对单个指定的主机进行扫描或扫描指定网段内的主机。能对指定的端口段内的端口进行逐个扫描,或扫描特定的部分端口号,以避免在不需要了解的端口号上浪费时间。进度条显示,能方便用户随时知道扫描的进度。系统设计期间,学习到很多课堂上没有的知识,还积累了很多实践经验,增强了动手能力和解决实际问题的能力。通过这次的课程设计,对网络编程有了更深入的了解,进一步熟悉了TCP和UDP协议的内容,掌握了TCP、UDP扫描端口的基本原理,学会了运用sock套接字构造UDP数据包并发送,以及如何接收ICMP数据包。对编程思想有了进一步的体会,养成了一些良好的编程习惯。系统虽然完成,但还有很多不足之处,希望自己能不断学习和实践,争取以后做得更好。虽然此软件实现了支持多线程的TCPconnect()扫描功能,和单线程的UDP扫描功能。但也还有很多不足之处,如扫描功能单一:不支持TCPSYN扫描、TCPFIN扫描以及IP段扫描等功能,对UDP扫描不支持多线程功能,而且在扫描主机前没有发送ICMP报文去判断主机是否在线,还需要进一步完善。限于作者知识水平和经验有限,此程序还有许多有待完善和改正的地方,恳请各位老师和读者批评指正。

参考文献[1]吴功宜.计算机网络(第二版).清华大学出版社,2007[2]唐海娜,李俊.基于RRD的网络流量监测方法.微电子学与计算机,2003(7):24-26[3]雷震甲,严体华等.计算机网络管理.西安电子科技大学出版社,2006[4]Behrouz,A.Forouzan,SophiaChungFegan.吴时霖,吴永辉等译.数据通信与网络.机械工业出版社,2007.[5]http://networking.ctocio.com.cn/tipS/136/7108136.shtml[6]王宏,龚正虎.松耦合分布式网络管理【J】.计算机工程与科学,2004,26(4):8~10[7]WILLIAMSTALLINGS著.胡成松,汪凯译.SNMP网络管理.中国电力出版社,2003[8]谈杰,李星.网络测量综述.计算机应用,2006(2):5~7[9]Michael,Kofler著.杨晓云,王建桥等译.MySQL5权威指南.人民邮电出版社,2006[10]黄炳强.PHP5+MySQL网站开发实例精讲.人民邮电出版社,2007[11]孙建华,王宇等.网络系统管理应用与开发.人民邮电出版社,2005[12]杨云江.计算机网络管理技术.清华大学出版社,2005

附录源代码#pragmacomment(lib,"ws2_32.lib")#pragmawarning(disable:4786)#include<iostream>#include<strstream>#include<winsock2.h>#include<string>#include<vector>#include<map>#include<fstream>#include<time.h>if(gethostname(szHostName,128)==0){ pHost=gethostbyname(szHostName);for(i=0;pHost!=NULL&&pHost->h_addr_list[i]!=NULL;i++){/*对每一个IP地址进行处理*/ pszAddr=inet_ntoa(*(structin_addr*)pHost->h_addr_list[i]); break; }}while(-1!=pos){if(-1==pre_pos)pos=source.Find(division,pos);elsepos=source.Find(division,(pos+1));if(-1==pre_pos) {iFirst=0;if(-1==pos)nCount=source.GetLength();elsenCount=pos;}else{iFirst=pre_pos+len;if(-1!=pos)nCount=pos-pre_pos-len;elsenCount=source.GetLength()-pre_pos-len;}dest.Add(source.Mid(iFirst,nCount));pre_pos=pos;}voidCPortScanDlg::setAddr(DWORD&StartAddr,DWORD&EndAddr){ switch(m_conf_IP.m_IP) { case0: m_conf_IP.m_IP_Self.GetAddress(StartAddr); m_conf_IP.m_IP_Self.GetAddress(EndAddr); break; case1: m_conf_IP.m_IP_Design.GetAddress(StartAddr); m_conf_IP.m_IP_Design.GetAddress(EndAddr); break; case2: m_conf_IP.m_IP_Start.GetAddress(StartAddr); m_conf_IP.m_IP_End.GetAddress(EndAddr); break; default: break; }}voidCPortScanDlg::setPort(tag_PORTS*pScanParam,int&ThreadNum){ ThreadNum=m_conf_Port.m_ThreadNum; switch(m_conf_Port.m_Port) { case0: { shortnCount=0; charbuff[10]; for(inti=0;i<m_conf_Port.m_DesignPort.GetLineCount();i++) { intlen=m_conf_Port.m_DesignPort.GetLine(i,buff,9); if(len!=0) { buff[len]='\0'; pScanParam->nArrOfPorts[nCount++]=atoi(buff); } } pScanParam->nCount=nCount; pScanParam->bSepecifiedPort=0; break; } case1: pScanParam->bSepecifiedPort=1; pScanParam->iStartPort=m_conf_Port.m_StartPort; pScanParam->iEndPort=m_conf_Port.m_EndPort; break; default: break; }voidconf_Port::ReadDefaultPorts(){ try { CStdioFilef("DefaultPorts.txt",CFile::modeRead|CFile::typeText); CStrings,ss; while(f.ReadString(ss)) { s+=ss; s+="\r\n"; } GetDlgItem(IDC_EDIT_DesignPort)->SetWindowText(s); f.Close(); } catch(...) { CStrings="13\r\n37\r\n123\r\n135\r\n139\r\n489\r\n1002"; GetDlgItem(IDC_EDIT_DesignPort)->SetWindowText(s); }}voidconf_Port::SaveDefaultPorts(){ CStdioFilef("DefaultPorts.txt",CFile::modeCreate|CFile::modeWrite|CFile::typeText); charbuff[10]; for(inti=0;i<m_DesignPort.GetLineCount();i++) { intlen=m_DesignPort.GetLine(i,buff,9); if(len!=0) { buff[len]='\0'; f.WriteString(buff); f.WriteString("\r\n"); } } f.Close(); }UINTCPortScanDlg::DoScanPort_TCP(LPVOIDlp){ ……… ret=connect(sock,(structsockaddr*)&sin,sizeof(sin)); if(ret==0) { str.

温馨提示

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

评论

0/150

提交评论