欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    简单端口扫描程序的实现(共17页).doc

    • 资源ID:14256373       资源大小:249.50KB        全文页数:17页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    简单端口扫描程序的实现(共17页).doc

    精选优质文档-倾情为你奉上计算机网络课程设计 论文题目: 简单端口扫描程序的实现 院(部)名 称: 计算机科学与工程学院 学 生 姓 名: 专 业: 学 号: 指导教师姓名: 报告提交时间: 报告答辩时间: (不填) 目录 一、设计要求本系统实现了一个简单的端口扫描器。1. 使用端口扫描对一台主机进行扫描,一台主机上有哪些端口是打开的;2. 对一个网段进行 IP 扫描,显示出一个网段内有哪些主机是开机的。二、开发环境与工具Windows的pc机Jdk包,:具备网络环境并连入Internet。三、设计原理IP地址和端口被称作套接字,它代表一个TCP连接的一个连接端。为了获得TCP服务,必须在发送机的一个端口上和接收机的一个端口上建立连接。TCP连接用两个连接端来区别,也就是(连接端1,连接端2)。连接端互相发送数据包。端口扫描是在应用程序运行在 TCP 或者 UDP 协议之上工作的, 这些协议是众多应用程序使用的传输机制,端口扫描是通过扫描主机确定哪一些 TCP 和 UDP 端口可以访问的过程. 端口扫描常见的几种类型: TCP Connect()扫描 SYN 扫描 NULL 扫描 ACK 扫描 Xmas-Tree Dumb 扫描。 Ping命令经常用来对TCP/IP网络进行诊断。通过目标计算机发送一个数据包,让它将这个数据包反送回来,如果返回的数据包和发送的数据包一致,那就是说你的PING命令成功了。通过这样对返回的数据进行分析,就能判断计算机是否开着,或者这个数据包从发送到返回需要多少时间。 Tracert命令用来跟踪一个消息从一台计算机到另一台计算机所走的路径, rusers和finger 通过这两个命令,你能收集到目标计算机上的有关用户的消息。 扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种方法,可以搜集到很多关于目标主机的各种有用的信息。总之,端口扫描”通常指用同一信息对目标计算机的所有所需扫描的端口进行发送,然后根据返回端口状态来分析目标计算机的端口是否打开、是否可用。“端口扫描”行为的一个重要特征,是在短时期内有很多来自相同的信源地址,传向不同的目的、地端口的包。对于用端口扫描进行攻击的人来说,攻击者总是可以做到在获得扫描结果的同时,使自己很难被发现或者说很难被逆向寻踪。为了隐藏攻击,攻击者可以慢慢地进行扫描。除非目标系统通常闲着(这样对一个没有listen()端口的数据包都会引起管理员的注意),有很大时间间隔的端口扫描是很难被识别的。隐藏源地址的方法是发送大量的欺骗性的端口扫描数据包(如1 000个),其中只有一个是从真正的源地址来的。这样即使全部数据包都被察觉,被记录下来,也没有人知道哪个是真正的信源地址。能发现的仅仅是“曾经被扫描过”的地址。也正因为这样,那些黑客们才乐此不疲地继续大量使用,这种端口扫描技术,来达到他们获取目标计算机信息,并进行恶意攻击的目的。通常进行端口扫描的工具目前主要采用的是端口扫描软件,也称之为“端口扫描器”。端口扫描器也是一种程序,它可以对目标主机的端口进行连接,并记录目标端口的应答。端口扫描器通过选用远程TCP/IP协议不同的端口的服务,记录目标计算机端口给予回答的方法,可以收集到很多关于目标计算机的各种有用信息(比如是否有端口在侦听,是否允许匿名登录,是否有可写的FTP目录,是否能用Telnet等)。 虽然端口扫描器可以用于正常网络安全管理,但就目前来说,它主要还是被黑客所利用,是黑客入侵、攻击前期不可缺少的工具。黑客一般先使用扫描工具扫描待入侵主机,掌握目标主机的端口打开情况,然后采取相应的入侵措施。 无论是正常用途,还是非法用途,端口扫描可以提供4个用途。1.识别目标主机上有哪些端口是开放的,这是端口扫描的最基本目的。2.识别目标系统的操作系统类型(Windows、Linux或UNIX等)。3.识别某个应用程序或某个特定服务的版本号。4.识别目标系统的系统漏洞,这是端口扫描的一种新功能。 当然以上这些功能不可能是一成不变的,随着技术的不断完善,新的功能会不断地增加。端口扫描器并不是一个直接攻击网络漏洞的程序,它仅仅能帮助发现目标计算机的某些内在的弱点。一个好的扫描器还能对它得到的数据进行分析,帮助查找目标计算机的漏洞。但它不会提供一个系统的详细步骤。编写扫描器程序必须要很多TCP/IP协议程序,以及C、Perl和SHELL语言的知识,还需要一些Socket编程的背景。四、系统功能描述及软件模块划分主要功能有:1. 使用端口扫描对一台主机进行扫描,一台主机上有哪些端口是打开的;2. 对一个网段进行 IP 扫描,显示出一个网段内有哪些主机是开机的。软件所包含的主要模块有:1.对IP的处理。包括对IP的移位和运算等。2.对本机个端口的扫描。3.对本网段的其他主机个端口的扫描。五、设计步骤六、关键问题及其解决方法 完整的代码如下: import java.io.*; import .*; import java.util.*; import java.lang.*; import java.lang.String.*; import java.lang.Integer.*; import java.awt.*; public class ScanPort2 public static void main(String args) System.out.println(); System.out.println(" *自定义多IP多TCP端口扫描程序*"); System.out.println(" *按Ctrl+c退出扫描*"); String shubeginip="",shuendip="" String sp1="",sp2="",sp3="" int beginport,endport; int maxThread=0; / 异常判断变量 int bport=0,eport=0; boolean bool = false; boolean bool1 = false; boolean bool2 = false; boolean bool3 = false; boolean bool4 = false; long xxx=0,xxx2=0; /由用户输入扫描范围/读取输入开始ip System.out.println(); System.out.println("请输入起始ip:"); while(!bool) try BufferedReader in1=new BufferedReader(new InputStreamReader(System.in); shubeginip=in1.readLine(); xxx=Com.ipj(shubeginip); if(xxx=0) bool=false; System.out.println("IP格式错误,请输入正确的起始ip:"); else if(xxx<=Com.ipj("1.0.0.0") bool=false; System.out.println("IP范围错误,请输入正确的起始ip:"); else bool=true; catch(IOException e)System.out.println("IP格式错误,请输入正确的起始ip:"); catch(NumberFormatException e)System.out.println("IP格式错误,请输入正确的起始ip:"); catch(StringIndexOutOfBoundsException e)System.out.println("IP格式错误,请输入正确的开始ip:"); catch(NullPointerException e)System.out.print("退出程序!"); /读取输入结束ip System.out.println(); System.out.println("请输入结束ip:"); while(!bool1) try BufferedReader in2=new BufferedReader(new InputStreamReader(System.in); shuendip=in2.readLine(); xxx2=Com.ipj(shuendip); if(xxx2=0) bool1=false; System.out.println("IP格式错误,请输入正确的结束ip:"); else if(Math.abs(xxx2-xxx)>) bool1=false; System.out.println("扫描IP数不能大于,请输入正确的结束ip:"); else bool1=true; catch(IOException e)System.out.println("IP格式错误,请输入正确的结束ip:"); catch(NumberFormatException e)System.out.println("IP格式错误,请输入正确的结束ip:"); catch(StringIndexOutOfBoundsException e)System.out.println("IP格式错误,请输入正确的结束ip:"); catch(NullPointerException e)System.out.print("退出程序!"); /读取输入起始端口 System.out.println(); System.out.println("请输入起始端口:"); while(!bool2) try BufferedReader in3=new BufferedReader(new InputStreamReader(System.in); sp1=in3.readLine(); bport=Integer.parseInt(sp1); if(bport<0|bport>65535) System.out.println("端口错误,请输入正确的起始端口:"); bool2=false; else bool2=true; catch(IOException e)System.out.println("端口错误,请输入正确的起始端口:"); catch(NumberFormatException e)System.out.println("端口错误,请输入正确的起始端口:"); beginport=Integer.parseInt(sp1);/读取输入结束端口 System.out.println(); System.out.println("请输入结束端口:"); while(!bool3) try BufferedReader in4=new BufferedReader(new InputStreamReader(System.in); sp2=in4.readLine(); eport=Integer.parseInt(sp2); if(eport<beginport|eport>65535) System.out.println("端口错误,请输入正确的结束端口:"); bool3=false; else bool3=true; catch(IOException e)System.out.println("端口错误,请输入正确的结束端口:"); catch(NumberFormatException e)System.out.println("端口错误,请输入正确的起始端口:"); endport=Integer.parseInt(sp2); /读取输入最大线程数 System.out.println(); System.out.println("请输入最大线程(1-300):"); while(!bool4) try BufferedReader in5=new BufferedReader(new InputStreamReader(System.in); sp3=in5.readLine(); maxThread=Integer.parseInt(sp3); if(maxThread>300|maxThread<1) System.out.println("请输入1-300之间的整数:"); bool4=false; else bool4=true; catch(IOException e)System.out.print("退出程序!"); catch(NumberFormatException e)System.out.println("请输入1-300之间的整数"); catch(NullPointerException e)System.out.print("退出程序!"); maxThread=Integer.parseInt(sp3); /开始扫描 System.out.println("正在处理IP地址"); long long_beginip=Com.ipj(shubeginip);/转换ip long long_endip=Com.ipj(shuendip); int allport=endport-beginport+1;/计算扫描端口总数 int allip=(int)Math.abs(long_beginip - long_endip) + 1; int t1=0,t2=0; /计算耗时 long begint,endt,alltime; Date mydate=new Date(); begint=mydate.getTime(); /获取当前时间 try /计算两个ip值之间的所有ip long ipduan=new long(int)Math.abs(long_beginip - long_endip) + 1; for(int k=0;k<=Math.abs(long_beginip - long_endip);k+) if (long_beginip-long_endip < 0) ipduank=long_beginip+k; else ipduank=long_endip+k; String ips1=new Stringipduan.length; System.out.println("正在扫描"); for(int a=0;a<=ipduan.length;a+) ips1a=Com.ipk(ipduana); if(ips1a!=null) System.out.println("正在扫描:"+ips1a); for(int xPort=beginport;xPort<=endport;xPort+ ) int x=quanjubianliang.Threadnum; if(x>maxThread) try Thread.sleep(100); catch(InterruptedException e) String threadName="thread"+xPort; if(xPort!=21) new ScanThread(ips1a,xPort,threadName).start(); else allip=allip-1; catch(Exception exp)System.out.println(); Date mydate2=new Date(); /获取结束时间 try Thread.sleep(1000); catch(InterruptedException e) System.out.println("扫描完成!"); endt=mydate2.getTime(); alltime=endt-begint; System.out.print("扫描了"+allip+"个IP共"+allip*allport+"个端口,用时"+alltime+"毫秒"); /全局变量,用做限制最大线程 class quanjubianliang public static int Threadnum=0; /扫描线程 class ScanThread extends Thread private String ghost; private int scanP; public ScanThread(String h,int mPort,String threadName) ghost=h; scanP=mPort; public void run() quanjubianliang.Threadnum=quanjubianliang.Threadnum+1; try SocketAddress sockaddr = new InetSocketAddress(ghost,scanP); Socket scans=new Socket(); int timeoutMs=50; scans.connect(sockaddr, timeoutMs); scans.close(); System.out.println("主机:"+ghost+" TCP端口:"+scanP+" 在线"); catch(SocketTimeoutException e) catch(IOException e) quanjubianliang.Threadnum=quanjubianliang.Threadnum-1; /ip处理 class Com /将字符串ip转换成长整型 public static long ipj(String ipAddress) long ip=new long4; int position1=ipAddress.indexOf("."); int position2=ipAddress.indexOf(".",position1+1); int position3=ipAddress.indexOf(".",position2+1); ip0=Long.parseLong(ipAddress.substring(0,position1); ip1=Long.parseLong(ipAddress.substring(position1+1,position2); ip2=Long.parseLong(ipAddress.substring(position2+1,position3); ip3=Long.parseLong(ipAddress.substring(position3+1); if(ip0=0|ip3=0|ip0>255|ip1>255|ip2>255|ip3>255) return 0; else return (ip0<<24)+(ip1<<16)+(ip2<<8)+ip3; /将长整型ip转换为字符串型 public static String ipk(long longIP) StringBuffer sb=new StringBuffer(""); /直接右移24位 sb.append(String.valueOf(longIP>>>24); sb.append("."); /将高8位置0,然后右移16位 sb.append(String.valueOf(longIP&0x00FFFFFF)>>>16); sb.append("."); sb.append(String.valueOf(longIP&0x0000FFFF)>>>8); sb.append("."); sb.append(String.valueOf(longIP&0xFF); String sc=sb.toString(); String ss = sc.split("."); if(Integer.parseInt(ss3)=0) return null; else return sb.toString(); 七、设计结果八、软件使用说明运行程序,跟据程序内容的题示输入起始IP,结束IP,端口号,线程等参数,最后程序返回扫描的结果。九、参考资料Welcome !欢迎您的下载,资料仅供参考!专心-专注-专业

    注意事项

    本文(简单端口扫描程序的实现(共17页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开