版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
..理工大学"网络协议编程课程设计"报告端口扫描程序的设计与实现学院计算机与通信工程学院专业网络工程班级学号学生指导教师课程成绩 完成日期课程设计任务书计算机与通信工程学院网络工程专业课程名称网络协议编程课程设计时间2015~2016学年第1学期18~19周学生指导教师题目端口扫描程序的设计与实现主要容:(1)实现通过异步扫描对指定网段的主机或者单个主机对指定端口或者指定的端口围进展扫描。(2)实现通过多线程批量扫描对指定网段的主机或者单个主机对指定端口或者指定的端口围进展扫描。(3)设置异常处理机制,能对端口扫描出现异常时做出处理。要求:(1)结合网络协议编程课程设计所学知识设计并实现端口扫描程序的设计与实现。(2)学会文献检索的根本方法和综合运用文献的能力。(3)通过课程设计培养严谨的科学态度,认真的工作作风和团队协作精神。应当提交的文件:(1)课程设计学年论文。(2)课程设计附件〔相关图纸、设备配置清单、报告等〕。课程设计成绩评定院系计算机与通信工程专业班级 学号学生 指导教师指导教师对学生在课程设计中的评价课程设计报告的质量指导教师成绩指导教师签字2016年月日课程设计辩论组对学生在课程设计中的评价课程设计报告的质量课程设计辩论辩论组成绩辩论组长签字2016年月日课程设计综合成绩注:课程设计综合成绩=指导教师成绩×60%+辩论组成绩×40%端口扫描程序的设计与实现学生:指导教师:摘要计算机信息网络的开展加速了信息化时代的进程,随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络平安也日益明显。端口扫描技术是发现平安问题的重要手段之一。本程序是在.NET平台上使用C#语言完成的一个端口扫描程序。此程序主要完成了多线程批量扫描和异步扫描功能。多线程批量扫描,能对单个指定的主机或者指定网段的所有主机进展特定端口或指定的端口段的端口进展逐个扫描,此端口扫描程序能以较快的速度准确地扫描出主机侦听的空闲端口。相对于多线程批量扫描,异步扫描能以更快的速度准确地扫描出主机侦听的空闲端口。扫描结果以列表的形式直观显示出来。关键词端口扫描;多线程批量扫描;异步扫描DesignandimplementationofportscanningprogramStudentname:YUWenlongAdvisor:LONGJizhenAbstractputerinformationnetworkdevelopmentspeedsuptheprocessoftheinformationage,withtheincreaseofthedegreeofsocialnetworks,theputernetworkhasbeeincreasinglydependenton,networksecurityisincreasinglyobvious.Portscanningtechnologyisoneoftheimportantmethodstofindsecurityproblems.Thisprocedureisinthe.NETplatformusingC#languagetopleteaportscanner.Thisprogrammainlypletesthemultithreadbatchscanningandasynchronousscanningfunction.Multi-threadedbatchscanning,allthehosttospecifyasinglehostornetworksegmentspecifiedforaparticularportandtheportspecifiedportscansonebyone,theportscanningprocedurescanfastaccuratelyscanhostlistenstothefreeport.paredwiththemultithreadasynchronousbatchscanning,scanningcanaccuratelyscanhostlistenstothefreeportatafasterspeed.Scanresultsaredisplayedintheformofalist.Keywords:portscanning;multithreadbatchscan;asynchronousscan1前言端口在计算机网络中用于标识上层应用程序效劳,端口扫描是指某些别有用心的人发送一组端口扫描消息,试图以此侵入某台计算机,并了解其提供的计算机网络效劳类型〔这些网络效劳均与端口号相关〕。端口扫描是计算机解密高手喜欢的一种方式。攻击者可以通过它了解到从哪里可探寻到攻击弱点。实质上,端口扫描包括向每个端口发送消息,一次只发送一个消息。接收到的回应类型表示是否在使用该端口并且可由此探寻弱点。扫描器是一种自动检测远程或本地主机平安性弱点的程序,通过使用扫描器你可以不留痕迹的发现远程效劳器的各种端口的状态!这就能让我们间接的或直观的了解到远程主机所存在的平安问题。1.1课程设计的目的计算机网络的开展使得社会网络化程度增加,人们对计算机网络的依赖也越来越大,端口扫描技术是发现平安问题的重要手段之一。端口扫描的主要目的是判断目标主机或目标网段的主机开放了哪些效劳,网络管理员了解了这些信息后,便于管理整个网络以及采取相应的平安防。2设计的软硬件平台本程序基于.NET平台使用C#语言开发的一个端口扫描程序。.NET是MicrosoftXMLWebservices平台。XMLWebservices允许应用程序通过Internet进展通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。Microsoft.NET平台提供创立XMLWebservices并将这些效劳集成在一起之所需。.NET支持多种语言,包括C#,VC++,COBOL等,是一个全面的开发工具。3端口扫描的主要工作原理端口扫描器通过选用远程TCP/IP不同的端口的效劳,并记录目标给予的答复,通过这种方法,可以搜集到很多关于目标主机的各种有用的信息。最根本的TCP扫描,操作系统提供的connect()系统调用可以用来与每一个感兴趣的目标计算机的端口进展连接。如果端口处于侦听状态,那么connect()就能成功。否那么,这个端口是不能用的,即没有提供效劳。这个技术的一个最大的优点是,你不需要任何权限。系统中的任何用户都有权利使用这个调用。另一个好处就是速度,如果对每个目标端口以线性的方式,使用单独的connect()调用,那么将会花费相当长的时间,使用者可以通过同时翻开多个套接字来加速扫描,也就是本设计中的多线程批量扫描。使用非阻塞I/O允许你设置一个低的时间用尽周期,同时观察多个套接字。但这种方法的缺点是很容易被发觉,并且被防火墙将扫描信息包过滤掉。目标计算机的logs文件会显示一连串的连接和连接出错消息,并且能很快使它关闭。常见的端口扫描方法有TCPconnect,TCPSYN,TCPFIN,TCPACK,多线程socket批量扫描等,本次课程设计主要采用TCPconnect实现异步扫描,调用socket实现多线程批量扫描。3.1多线程批量扫描工作原理操作系统提供的socket系统调用,用来与每一个感兴趣的目标主机的端口进展连接。如果端口处于侦听状态,那么socket〔〕就能成功,否那么这个端口没有提供效劳。多线程批量扫描使用for循环来实现逐个扫描的,多端口也是使用for循环来实现逐个扫描的,调用connect〔〕和accept〔〕建立套接字连接,这两个系统调用用于完成一个完整相关的建立,其中connect〔〕用于建立连接。accept〔〕用于使效劳器等待来自某主机进程的实际连接。借助for循环通过thread[i]=newThread〔ThreadPort〕创立多个线程,采用异常处理机制调用socket进展连接,实现端口扫描。3.2异步扫描工作原理调用操作系统提供的BeginConnect〔〕方法进展TCP连接,用来与每一个感兴趣的目标主机的端口进展连接。如果端口处于侦听状态,那么就能连接成功,否那么不能连接成功。通过while〔〕循环来返回连接结果,并显示在列表中。4端口扫描实现的主要步骤4.1多线程批量扫描设计的主要步骤〔1〕使用自定义的方法GetListIP〔〕获取待扫描的指定主机或指定网段主机的IP地址和指定端口或端口段。〔2〕初始化并保存为IPEndPoint对象。〔3〕借助for循环通过thread[i]=newThread〔ThreadPort〕创立多个线程。〔4〕调用线程的实现方法,使用socket连接,通过for循环进展批量扫描。〔5〕采用trycatch进展异常处理。4.2异步扫描设计的主要步骤〔1〕使用自定义的方法GetListIP〔〕获取待扫描的指定主机或指定网段主机的IP地址和指定端口或端口段。〔2〕初始化并保存为IPEndPoint对象。〔3〕通过for循环创立线程。〔4〕调用操作系统提供的BeginConnect〔〕方法进展TCP连接,进展循环扫描。〔5〕采用trycatch进展异常处理。5程序运行与测试5.1对指定主机指定端口异步扫描,如图5.1所示。图5.1异步扫描单主机单端口5.2对指定主机指定端口围异步扫描,如图5.2所示。图5.2异步扫描单主机多端口5.3对指定IP指定端口围多线程批量扫描,如图5.3所示。图5.3多线程扫描单主机多端口5.4对指定IP围指定端口围多线程批量扫描,如图5.4所示。图5.4多线程扫描多主机多端口5.5对指定IP围指定端口围异步扫描,如图5.5。图5.5异步扫描多主机多端口6设计的结论及意义经过不断的修改和完善程序,根本满足了一个端口扫描成宿的根本要求,实现了对单个指定的主机进展扫描或扫描指定网段的主机,实现了对特定端口进展扫描,或扫描指定的端口围的端口,以防止在不需要了解的端口号上浪费时间。端口扫描技术是网络平安中重要的技术之一,有利于用户,特别是网管人员了解被管理主机的效劳的开启情况,对网络平安有着重大意义。7参考文献[1]希仁计算机网络[M]第6版.:电子工业,2013.6[2]马骏C#网络应用编程第3版.:人民邮电,2014.9[3]建华,涛等译TCP/IP详解卷1.:机械工业,2009.1[4]梁亚声计算机网络平安教程第2版.:机械工业,2010...附录:usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.ponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Text;usingSystem.Threading;usingSystem.Windows.Forms;namespacePortFyz{publicpartialclassForm1:Form{privatevolatileintN=0;//用来说明每次扫描时的索引privatevolatileintT=0;//用来说明线程执行的次数ManualResetEventmanualResetEvent=newManualResetEvent(false);List<IPEndPoint>listIpe=newList<IPEndPoint>();//用来存储所有的IPEndPoint泛型intthreadNumber=10;//创立的线程数Thread[]thread;AutoResetEventautoEvent=newAutoResetEvent(false);delegatevoidAddStr(stringstr);AddStraddstr;#region1简单控件操作voidAddList(stringstr){listBox1.Items.Add(str);}publicForm1(){Initializeponent();}privatevoidForm1_Load(objectsender,EventArgse){addstr+=AddList;}privatevoidbutton2_Click(objectsender,EventArgse){Application.Exit();}privatevoidcheckBox2_CheckedChanged(objectsender,EventArgse){if(checkBox2.Checked){textBox3.Enabled=false;textBox4.Enabled=false;}else{textBox3.Enabled=true;textBox4.Enabled=true;}}privatevoidcheckBox1_CheckedChanged(objectsender,EventArgse){if(checkBox1.Checked){textBox1.Enabled=false;textBox2.Enabled=false;}else{textBox1.Enabled=true;textBox2.Enabled=true;}}#endregion#region2.1多线程批量扫描privatevoidbutton1_Click(objectsender,EventArgse)privatevoidbutton1_Click(objectsender,EventArgse){if(textBox8.Text.Trim()==""){MessageBox.Show("请输入线程数");}else{threadNumber=Convert.ToInt32(textBox8.Text.Trim());}Initialization();//设置进度条progressBar1.Minimum=0;progressBar1.Maximum=listIpe.Count;progressBar1.Value=0;if(listIpe.Count<=threadNumber){threadNumber=listIpe.Count;}//开场创立线程扫描thread=newThread[threadNumber];for(inti=0;i<threadNumber;i++){thread[i]=newThread(ThreadPort);thread[i].Priority=ThreadPriority.AboveNormal;thread[i].IsBackground=true;thread[i].Start();}manualResetEvent.WaitOne();}#endregion#region2.2多线程批量扫描publicvoidThreadPort()///<summary>///多线程批量扫描///</summary>publicvoidThreadPort(){IPEndPointcurrentIpe=listIpe[0];while(true){if(N>=listIpe.Count){if(T>=listIpe.Count){//注意return时,只是当前线程被销毁,其IsAlive为false,这个时候还有线程在跑//有可能后面的没执行完就已经把结果送给textBox5了//当所有线程执行完后,才通知textBox5的text为resultmanualResetEvent.Set();return;}}else{lock(this){currentIpe=listIpe[N];N++;}Socketsocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.IP);try{socket.Connect(currentIpe);if(socket.Connected){IPEndPointep=socket.LocalEndPointasIPEndPoint;stringss=ep.Address+":"+ep.Port+"连接"+currentIpe.Address+":"+currentIpe.Port+"已翻开"+"\r\n";addstr(ss);T++;}else{stringss=currentIpe.Address+":"+currentIpe.Port+"未连接成功"+"\r\n";addstr(ss);T++;}}catch(Exceptionex){stringss=currentIpe.Address+":"+(ex.Message.Split(':'))[1]+"未连接成功"+"\r\n";addstr(ss);T++;}finally{socket.Close();}}}}#endregion#region3.1异步扫描privatevoidbutton3_Click(objectsender,EventArgse)privatevoidbutton3_Click(objectsender,EventArgse){//进展初始化Initialization();//设置进度条progressBar1.Minimum=0;progressBar1.Maximum=listIpe.Count;progressBar1.Value=0;//开场创立线程扫描Form1form=this;ListBoxlistbox=listBox1;ProgressBarprogressBar=progressBar1;thread=newThread[threadNumber];for(inti=0;i<threadNumber;i++){thread[i]=newThread(newParameterizedThreadStart(sport));thread[i].Start(newArrayList(){listbox,progressBar,i});}}#endregion#region3.2异步扫描的实现方法voidsport(objects)voidsport(objects){//进展一系列对象的转化ArrayListal=(ArrayList)s;ListBoxlistbox=(ListBox)al[0];ProgressBarprogressBar=(ProgressBar)al[1];intith=Convert.ToInt32(al[2]);//开场循环去进展连接for(intiport=ith;iport<listIpe.Count;iport+=threadNumber){TcpClienttcpClient=newTcpClient(AddressFamily.InterNetwork);try{//异步连接tcpClient.BeginConnect(listIpe[iport].Address,listIpe[iport].Port,AsyncPort,newArrayList(){tcpClient,iport,progressBar,listbox});}catch(Exceptionex){}//让当前线程等待autoEvent.WaitOne(200);}}#endregion#region3.3异步扫描的结果处理publicvoidAsyncPort(IAsyncResultresult)///<summary>///异步扫描///</summary>publicvoidAsyncPort(IAsyncResultresult){//进展一系列对象的转化ArrayListarr=(ArrayList)result.AsyncState;TcpClienttcpClient=(TcpClient)arr[0];intiport=(int)arr[1];ListBoxlistbox=(ListBox)arr[3];ProgressBarprogressBar1=(ProgressBar)arr[2];while(true){//轮询看是否有结果if(result.Ispleted){try{if(tcpClient.Connected)listBox1.Items.Add(listIpe[iport].Address+":"+listIpe[iport].Port+"已翻开");elselistBox1.SelectedIndex=listBox1.Items.Count-1;}finally{}//设置滚动条if(progressBar1.Value<progressBar1.Maximum)progressBar1.Value++;break;}tcpClient.Close();}}#endregion#region4.1公用方法,拿到所有IPEndPoint对象publicList<IPEndPoint>GetListIP()#region1.1拿到所有IPEndPoint对象publicList<IPEndPoint>GetListIP()publicList<IPEndPoint>GetListIPE(){if(checkBox1.Checked)//如果是指定一个IP地址{IPAddressipa;if(IPAddress.TryParse(textBox6.Text.Trim(),outipa)){if(checkBox2.Checked)//一个IP一个端口{IPEndPointipe=newIPEndPoint(ipa,Convert.ToInt32(textBox7.Text.Trim()));listIpe.Add(ipe);}else//一个IP多个端口{intstartPort=Convert.ToInt32(textBox3.Text.Trim());intendPort=Convert.ToInt32(textBox4.Text.Trim());for(intj=startPort;j<=endPort;j++){IPEndPointipe=newIPEndPoint(ipa,j);listIpe.Add(ipe);}}}else{MessageBox.Show("IP地址转换失败!");//return;}}else//如果是指定IP地址围{longstartIp;longendIp;longip1=IPToLong(textBox1.Text.Trim());longip2=IPToLong(textBox2.Text.Trim());List<IPAddress>listIp=newList<IPAddress>();if(ip1>ip2){startIp=ip2;endIp=ip1;}else{startIp=ip1;endIp=ip2;}for(longa=startIp;a<=endIp;a++){IPAddressipa=IPAddress.Parse(LongToIP(a));listIp.Add(ipa);}if(checkBox2.Checked)//多IP一个端口-------------{intonePort=Convert.ToInt32(textBox7.Text.Trim());IPEndPointipe;for(intj=0;j<listIp.Count;j++){ipe=newIPEndPoint(listIp[j],onePort);listIpe.Add(ipe);}}else//多IP多端口-----------{intstartPort=Convert.ToInt32(textBox3.Text.Trim());intendPort=Convert.ToInt32(textBox4.Text.Trim());IPEndPointipe;for(inti=0;i<listIp.Count;i++){for(intj=startPort;j<=endPort;j++){ipe=newIPEndPoint(listIp[i],j);listIpe.Add(ipe);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【548】心肌梗死科普
- 临床胆囊结石围手术期护理
- 黑龙江省智研联盟2026届高三上学期1月份第一次联合考试英语试卷(含答案无听力音频无听力原文)
- 高大模板工程技术要领
- 钢结构国际标准对比分析
- 2026年甘肃省庆阳市西峰环宇中学春季招聘教师考试备考题库及答案解析
- 2026山东淄博张店区面向大学生退役士兵、村党组织书记、社区党组织书记专项招聘岗位招聘备考考试试题及答案解析
- 2026第一季度四川成都市青白江区第三人民医院自主招聘医师、护士3人参考考试题库及答案解析
- 2026国家税务总局山东省税务局招聘事业单位工作人员备考考试试题及答案解析
- 禁毒安全企业管理制度(3篇)
- 新版-八年级上册数学期末复习计算题15天冲刺练习(含答案)
- 2024年风电、光伏项目前期及建设手续办理流程汇编
- 不良资产合作战略框架协议文本
- 先进班级介绍
- 2025年浙江省辅警考试真题及答案
- 2025中国热带农业科学院科技信息研究所第一批招聘4人备考题库(第1号)附答案
- 雨课堂学堂在线学堂云《婚姻家庭法(武汉科大 )》单元测试考核答案
- 安徽宁马投资有限责任公司2025年招聘派遣制工作人员考试笔试模拟试题及答案解析
- 2025版北师大版小学数学一年级上册专项练习卷
- 酒店签订就餐协议合同
- 房屋尾款交付合同(标准版)
评论
0/150
提交评论