简单端口扫描程序的实现_第1页
简单端口扫描程序的实现_第2页
简单端口扫描程序的实现_第3页
简单端口扫描程序的实现_第4页
简单端口扫描程序的实现_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、计算机网络课程设计论文题目:简单端口扫描程序的实现院(部)名 称:计算机科学与工程学院学生姓名:专业:学号:指导教师姓名:报告提交时间:报告答辩时间:(不填)目录一、设计要求 3二、开发环境与工具 3三、设计原理 3四、系统功能描述及软件模块划分 3五、设计步骤 5六、关键问题及其解决方法 5七、设计结果 15八、软件使用说明 16九、参考资料 16精选资料,欢迎下载、设计要求本系统实现了一个简单的端口扫描器。1. 使用端口扫描对一台主机进行扫描,一台主机上有哪些端口是打开的;2. 对一个网段进行 IP 扫描,显示出一个网段内有哪些主机是开机的。二、开发环境与工具Win dows的pc机Jdk

2、包,:具备网络环境并连入 In ternet 。三、设计原理IP地址和端口被称作套接字,它代表一个 TCP连接的一个连接端。为了获得 TCP服务, 必须在发送机的一个端口上和接收机的一个端口上建立连接。TCP 连接用两个连接端来区别,也就是(连接端 1,连接端 2)。连接端互相发送数据包。端口扫描是在应用程序运行在 TCP 或者 UDP 协议之上工作的 , 这些协议是 众多应用程序使用的传输机制 ,端口扫描是通过扫描主机确定哪一些 TCP 和 UDP端口可以访问的过程.端口扫描常见的几种类型:TCP Connect()扫描SYN 扫描 NULL 扫描 ACK 扫描 Xmas-Tree Dumb

3、 扫描。Ping 命令经常用来对 TCP/IP 网络进行诊断。 通过目标计算机发送一个数据 包,让它将这个数据包反送回来, 如果返回的数据包和发送的数据包一致, 那就 是说你的PING命令成功了。通过这样对返回的数据进行分析,就能判断计算机 是否开着,或者这个数据包从发送到返回需要多少时间。Tracert 命令用来跟踪一个消息从一台计算机到另一台计算机所走的路径, rusers 和 finger 通过这两个命令,你能收集到目标计算机上的有关用户的 消息。扫描器通过选用远程 TCP/IP 不同的端口的服务, 并记录目标给予的回答, 通 过这种方法,可以搜集到很多关于目标主机的各种有用的信息。总之

4、,端口扫描 ”通常指用同一信息对目标计算机的所有所需扫描的端口进 行发送,然后根据返回端口状态来分析目标计算机的端口是否打开、是否可用。 “端口扫描”行为的一个重要特征,是在短时期内有很多来自相同的信源地址, 传向不同的目的、 地端口的包。 对于用端口扫描进行攻击的人来说, 攻击者总是 可以做到在获得扫描结果的同时, 使自己很难被发现或者说很难被逆向寻踪。 为 了隐藏攻击, 攻击者可以慢慢地进行扫描。 除非目标系统通常闲着 (这样对一个 没有 listen ()端口的数据包都会引起管理员的注意) ,有很大时间间隔的端口 扫描是很难被识别的。 隐藏源地址的方法是发送大量的欺骗性的端口扫描数据包

5、(如 1 000 个),其中只有一个是从真正的源地址来的。这样即使全部数据包都 被察觉,被记录下来,也没有人知道哪个是真正的信源地址。 能发现的仅仅是 “曾 经被扫描过 ”的地址。也正因为这样,那些黑客们才乐此不疲地继续大量使用, 这种端口扫描技术,来达到他们获取目标计算机信息,并进行恶意攻击的目的。通常进行端口扫描的工具目前主要采用的是端口扫描软件, 也称之为 “端口扫描 器”。端口扫描器也是一种程序, 它可以对目标主机的端口进行连接, 并记录目 标端口的应答。端口扫描器通过选用远程 TCP/IP 协议不同的端口的服务,记录 目标计算机端口给予回答的方法, 可以收集到很多关于目标计算机的各种

6、有用信 息(比如是否有端口在侦听,是否允许匿名登录,是否有可写的 FTP目录,是否 能用 Telnet 等)。虽然端口扫描器可以用于正常网络安全管理, 但就目前来说, 它主要还是被 黑客所利用, 是黑客入侵、 攻击前期不可缺少的工具。 黑客一般先使用扫描工具 扫描待入侵主机,掌握目标主机的端口打开情况,然后采取相应的入侵措施。无论是正常用途,还是非法用途,端口扫描可以提供 4 个用途。1. 识别目标主机上有哪些端口是开放的,这是端口扫描的最基本目的。2. 识别目标系统的操作系统类型(Windows Linux或UNIX等)。3. 识别某个应用程序或某个特定服务的版本号。4. 识别目标系统的系统

7、漏洞,这是端口扫描的一种新功能。当然以上这些功能不可能是一成不变的, 随着技术的不断完善, 新的功能会 不断地增加。 端口扫描器并不是一个直接攻击网络漏洞的程序, 它仅仅能帮助发 现目标计算机的某些内在的弱点。一个好的扫描器还能对它得到的数据进行分 析,帮助查找目标计算机的漏洞。但它不会提供一个系统的详细步骤。编写扫描器程序必须要很多 TCP/IP协议程序,以及C、Perl和SHELL语言的知 识,还需要一些 Socket 编程的背景。四、系统功能描述及软件模块划分主要功能有:1. 使用端口扫描对一台主机进行扫描,一台主机上有哪些端口是打开的;2. 对一个网段进行 IP 扫描,显示出一个网段内

8、有哪些主机是开机的。 软件所包含的主要模块有:1. 对 IP 的处理。包括对 IP 的移位和运算等。2. 对本机个端口的扫描。3. 对本网段的其他主机个端口的扫描。五、设计步骤开始Sea nstart主函数填充本地IP范 围获得扫描结果r获得扫描结果否保存扫描结果保存扫描结果六、关键问题及其解决方法完整的代码如下:import java.io.*; import java .n et.*; import java.util.*; import java .Ian g.*;import java.lang.String.*; import java.lang.Integer.*;import j

9、ava.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=""i

10、nt 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;/ 由用户输入扫描范围/ 读取输入开始 ipSystem.out.println();请输入起始 ip:");System.out.println(" while(!bool)try

11、BufferedReader in1=new BufferedReader(newInputStreamReader(System.in);shubeginip=in1.readLine();xxx=Com.ipj(shubeginip);if(xxx=0)bool=false;System.out.println("IP 格式错误,请输入正 确的起始 ip:");elseif(xxx<=Com.ipj("")bool=false;System.out.println("IP 范围错误,请输入 正确的起始 ip:"

12、);else bool=true;catch(IOException e)System.out.println("IP 格式错误, 请输入正确的起始 ip:");catch(NumberFormatException e)System.out.println("IP 格式错误,请输入正确的起始 ip:"); catch(StringIndexOutOfBoundsExceptione)System.out.println("IP 格式错误,请输入正确的开始 ip:"); catch(NullPointerException e)Sys

13、tem.out.print(" 退出 程序! ");/ 读取输入结束 ipSystem.out.println();System.out.println(" 请输入结束 ip:"); while(!bool1)tryBufferedReader in2=new BufferedReader(newInputStreamReader(System.in);shuendip=in2.readLine();xxx2=Com.ipj(shuendip);if(xxx2=0)bool1=false;System.out.println("IP格式错误,请

14、输入正确的结束 ip:");elseif(Math.abs(xxx2-xxx)>5155130) bool1=false; System.out.println(" 扫描 IP 数不能大于5155130,请输入正确的结束 ip:");else bool1=true; catch(IOException e)System.out.println("IP 格式错误, 请输入正确的结束 ip:");catch(NumberFormatException e)System.out.println("IP 格式错误,请输入正确的结束 ip

15、:");catch(StringIndexOutOfBoundsExceptione)System.out.println("IP 格式错误,请输入正确的结束 ip:"); catch(NullPointerException e)System.out.print(" 退出 程序! ");/ 读取输入起始端口System.out.println();System.out.println(" 请输入起始端口: "); while(!bool2)tryBufferedReader in3=new BufferedReader(n

16、ewInputStreamReader(System.in); sp1=in3.readLine(); bport=Integer.parseInt(sp1); if(bport<0|bport>65535) System.out.println(" 端口错误,请输入正确的 起始端口: ");bool2=false;elsebool2=true;catch(IOException e)System.out.println(" 端口错误,请 输入正确的起始端口: ");catch(NumberFormatException e)System.o

17、ut.println(" 端 口错误,请输入正确的起始端口: "); beginport=Integer.parseInt(sp1);/ 读取输入结束端口System.out.println();System.out.println(" 请输入结束端口: "); while(!bool3)tryBufferedReader in4=new BufferedReader(new InputStreamReader(System.in);sp2=in4.readLine();eport=Integer.parseInt(sp2); if(eport<b

18、eginport|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);/ 读取输入最大线程数S

19、ystem.out.println();System.out.println("请输入最大线程 (1-300) : ");while(!bool4)tryBufferedReader in5=new BufferedReader(new InputStreamReader(System.in);sp3=in5.readLine(); maxThread=Integer.parseInt(sp3); if(maxThread>300|maxThread<1) System.out.println(" 请输入 1-300 之间的整数: ");bo

20、ol4=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("正在

21、处理IP地址");计算扫描端口总数- long_endip) + 1;long long_beginip=Com.ipj(shubeginip);/ 转换 ip long long_endip=Com.ipj(shuendip);int allport=endport-beginport+1;/ int allip=(int)Math.abs(long_beginipint t1=0,t2=0; / 计算耗时long begint,endt,alltime;Date mydate=new Date();begint=mydate.getTime(); / 获取当前时间try/ 计算两

22、个 ip 值之间的所有 iplong 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;elseipduank=long_endip+k;String ips1=new Stringipduan.length;System.out.println(”正在扫描");for(int a=0;a&l

23、t;=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)tryThread.sleep(100);catch(InterruptedException e)String threadName="thread"+xPort;

24、if(xPort!=21)newScanThread(ips1a,xPort,threadName).start();elseallip=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.ou

25、t.print(" 扫 描 了 "+allip+" 个 IP "+allip*allport+" 个端口 ,用时"+alltime+" 毫秒");/ 全局变量,用做限制最大线程 class quanjubianliangpublic static int Threadnum=0;/ 扫描线程class ScanThread extends Threadprivate String ghost; private int scanP;public ScanThread(String h,int mPort,String

26、 threadName) ghost=h;scanP=mPort; public void run()quanjubianliang.Threadnum=quanjubianliang.Threadnum+1; trySocketAddress sockaddr = new InetSocketAddress(ghost,scanP);Socket scans=new Socket();int timeoutMs=50;scans.connect(sockaddr, timeoutMs); scans.close();System.out.println(" 主 机 :"+

27、ghost+" TCP 端 口:"+scanP+"在线"); catch(SocketTimeoutException e) catch(IOException e)quanjubianliang.Threadnum=quanjubianliang.Threadnum-1;/ip 处理class Com/将字符串 ip 转换成长整型publicstatic long ipj(String ipAddress)long ip=new long4;int position1=ipAddress.indexOf(".");int posit

28、ion2=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.parseL

29、ong(ipAddress.substring(position3+1);if(ip0=0|ip3=0|ip0>255|ip1>255|ip2>255|ip3>255)return 0;elsereturn(ip0<<24)+(ip1<<16)+(ip2<<8)+ip3;/ 将长整型 ip 转换为字符串型public static String ipk(long longIP)StringBuffer sb=new StringBuffer("");/ 直接右移 24 位sb.append(String.value

30、Of(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&0x000000FF);String

31、 sc=sb.toString();String ss = sc.split(".");if(Integer.parseInt(ss3)=0)return null;elsereturn sb.toString();七、设计结果亜営理貝:C :Wi n d wssyste m 2 2c m d. exeWindows版权所有c 2009版本 6.1.76Q0Microsoft Gorporation o 探留所有权刹 °C- MJserszhpcd C: MJserszhpDesktopjffl.机网络课程设计十算机网络课程役计jauac ScanPort2.javaC; 11&亡”&*1卩1)西就叫计算机网络课

温馨提示

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

评论

0/150

提交评论