多线程端口扫描程序设计与实现(29页).doc
《多线程端口扫描程序设计与实现(29页).doc》由会员分享,可在线阅读,更多相关《多线程端口扫描程序设计与实现(29页).doc(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-多线程端口扫描程序设计与实现-第 26 页中南大学计算机网络课程设计报告题 目 多线程端口扫描程序设计与实现 学生姓名 孙毅 指导教师 刘嫔 学 院 信息科学与工程学院 专业班级 信息安全1401 完成时间 2016/10/19 目录第一章 需求分析11 系统功能描述11本系统要实现的功能1第二章 总体设计22223第三章 详细设计4445第四章 调试分析与运行结果994.2 运行程序流程图910第五章 课程设计总结14第六章 参考文献15第七章 附录15第一章 需求分析设计任务与要求 本设计要求完成一个多线程端口扫描程序的设计与实现,具有易用、美观的界面。功能要求: 能够对本地或远程主机进
2、行端口扫描。能够对制定端口段进行扫描。能够扫描制定IP地址范围内哪些主机开放了特定端口,如常见的TCP端口FTP(21)等。使用 TCP connect进行端口扫描; 使用 TCP SYN 进行端口扫描; 使用 ICMP echo 扫描实现 IP 扫描; 能把扫描结果记录保存下来。 系统功能描述 多线程端口扫描器是实现计算机的端口的扫描,只要在在前台设置好所要扫描的IP、起始端口、结束端口以及所要用到的线程数,点击扫描,就可以扫描到所输入IP地址主机的开放端口,并显示在主窗体中;点击退出,则可以退出该程序。IP设置应为所在主机的IP地址,起始端口和结束端口应为065535之间的一个数,且起始端
3、口应小于结束端口的大小。线程数为0200之间的一个数。点击开始后就会运行,直到扫描完毕显示出开放端口,如果没有开放端口,则只显示扫描完毕。本系统要实现的功能 端口扫描功能:扫描开放的端口,并将扫描到的开放端口号送到前台。 图像显示功能:显示界面图形。 多线程功能:当客户端要求与服务器端建立连接时,服务器端就将用到多线程功能,为每一个建立起来的连接创建一个线程。 异常抛出功能:对于明显的错误,能提示出错误的类型并结束程序的运行。第二章 总体设计 本程序分为前后台系统,后台系统用于扫描主机开放端口,并把节扫描的数据送至前台窗口显示;前台要显示扫描的结果,所以应为一个窗口,这个窗口应能够设置主机的I
4、P地址,设置端口的开始端口、结束端口和线程数,并且还能够显示扫描的状态。在中央是显示结果的窗体。本程序还应能够有控制扫描的状态命令,附加设置最小化和关闭按钮。界面设置构思图 图1 系统构思图界面使用设置构思当出现如图所示的界面时,填写好要扫描的IP地址,需要扫描的端口范围和线程数,单击命令提示按钮就可以开始扫描,扫描结果就会显示在中间的扫描结果显示区域,在扫描状态显示区就会显示是否扫描完毕。流程图如下:界面出现填写IP地址或者用默认的IP设置扫描需要的线程数或者是用默认的线程数单击命令按钮开始扫描扫描结束,显示结果显示在结果显示区域是否继续退出结束否是 图2 系统构思流程图后台设计构思后台系统
5、使用Scanner和Scan类,创建前台布局和创建扫描端口、事件处理,并且能对简单的错误进行判断,显示错误原因。调用数据处理包,处理异常情况;调用皮肤包,美化显示窗口。第三章 详细设计本程序界面图形设计要能清楚显示扫描后的结果,并且能很好的体现出界面的整洁大方,但并不失去吸引人眼球的画面,所以在做界面的时候考虑了界面的色彩,并且添加了皮肤,界面上面的字体设置和windows窗口设置一样采用宋体,界面上的按钮不设置过多的按钮,仅设置有必要的按钮即可,界面设置大方。使用的时候有默认的IP地址、需要扫描的端口和线程数,如果需要扫描其他主机,只需要填写好要扫描的主机的IP地址,需要扫描的端口范围和线程
6、数,单击命令提示按钮就可以开始扫描,扫描结果就会显示在中间的扫描结果显示区域,在扫描状态显示区就会显示是否扫描完毕。本程序采用小窗口形式,外围大小为700mm*700mm,结果显示字幕为主机地址加开放端口。添加个性皮肤。其余地方设置按钮和扫描的主机地址、端口和线程数。设计的预计页面图形如图:图3 系统界面设计图本程序使用了为主要的Scanner2类和ScanTcpConnect类。ScanTcpConnect类的作用是创建线程扫描端口,然后把结果显示到前台。Scanner2类的作用是构造前台布局,调用ScanTcpConnect类添加事件处理,对输入进行错误判断,如果输入不在允许的范围之内则显
7、示相关错误。在本程序中用到了网络编程的两个类,下面介绍这两个类的常用方法。InetSocketAddress类构造方法如下:l InetSocketAddress(InetAddress addr, int port):根据 IP 地址和端口号创建套接字地址。l InetSocketAddress(int port):创建套接字地址,其中 IP 地址为通配符地址,端口号为指定值。l InetSocketAddress(String hostname, int port):根据主机名和端口号创建套接字地址。Socket类常用方法如下:l Socket():通过系统默认类型的 SocketImpl
8、 创建未连接套接字 l Socket(InetAddress address, int port):创建一个流套接字并将其连接到指定 IP 地址的指定端口号。l void bind(SocketAddress bindpoint):将套接字绑定到本地地址。l void close():关闭此套接字。l void connect(SocketAddress endpoint):将此套接字连接到服务器。l void connect(SocketAddress endpoint, int timeout):将此套接字连接到具有指定超时值的服务器。l boolean isClosed():返回套接字的
9、关闭状态。l boolean isConnected():返回套接字的连接状态。本程序还调用其他的一些类和包,比如软件包 java.awt.color 、java.awt.event、io.IOException、Javax.Swing、jvnet.substance.*。l java.awt.color包的的描述:提供用于颜色空间的类。它包含了基于国际色彩联盟 (ICC) 配置文件格式规范的颜色空间实现。它还包含了基于 ICC 配置文件格式规范的颜色配置文件。用来使界面更加具有色彩。Result.setBackground(Color.PINK);/设置窗口为粉红l java.awt.eve
10、nt 的描述:提供处理由 AWT 组件所激发的各类事件的接口和类。事件由事件源所激发,向事件源注册的事件侦听器可接收有关特定事件类型的通知。此包定义了事件和事件侦听器,以及事件侦听器适配器,它是让事件侦听器的编写过程更为轻松的便捷类。在本程序中使用:public void actionPerformed(ActionEvent e) String cmd = e.getActionCommand();if(cmd.equals(Start)l io.IOException包的描述:用来处理io的错误,不仅仅是文件读写,还包括很多stream的读写,而且throws是用来放在函数定义的函数体前函
11、数名后的,表示这个函数将会在出现异常的书后会抛出io异常,所以在以后的程序中调用这个函数的时候就必须用try和catch来捕获异常,否则编译会报错,这主要涉及到java的安全机制。本程序中使用如下:try minPort = Integer.parseInt(PortStart.getText();maxPort = Integer.parseInt(PortEnd.getText();threadNum = Integer.parseInt(ThreadNum.getText(); catch (NumberFormatException e1) DLGError.setBounds(300
12、, 280, 299, 120);DLGINFO.setText(错误的端口号或线程数!端口号和线程数必须为整数!);DLGINFO.setBounds(10, 20, 280, 20);OK.setBounds(110, 50, 60, 30);DLGError.setVisible(true);return;l Javax.Swing集合描述:由所有Java图形用户界面(GUI)组件所构成,可运行在任一支持Java虚拟机(JVM)的本地平台上。由于这些组件全都是用Java语言编写的,因此它们可以提供比本地平台GUI组件更多的功能。(与抽象窗口工具箱对比)。Java Swing是Java F
13、oundation Classes(JFC)的一部分。在Swing中,Sun开发了一个经过仔细设计的、灵活而强大的 GUI 工具包。Swing是在AWT组件基础上构建的。它所提供的功能要比AWT提供的更为广泛。它也是Java技术的一种标准配置。Swing模型一个Java GUI通常由顶层容器、中间容器以及多个原子组件组成。每个原子组件或容器都可能触发相应事件的产生。容器是一类能够在其中容纳其他组件的特殊组件。Swing的GUI组件类是按照类属层次以树状结构进行组织的。在这个树的最顶层,即树的根部,使一个最基本的容器类,被称为顶层容器。Swing 提供了三个通用的顶层容器类JFrame,JDia
14、log和JApplet。JFrame提供了基于窗体的应用程序,JDialog提供对话框形式的界面,JApplet提供Java小应用程序的界面形式。在顶层容器下是中间容器,用于容纳其他的组件。通常窗格本身在显示界面中是看不到的。面板类Panel是一种中间容器,它的唯一作用是使组件更容易定位。顶层容器通过getContentPane()方法获取内部的一个内容窗格。Swing包的组成:l javax.swing:基本Swing包,包括Swing容器、组件及相关设置的类和接口。l javax.swing.border:包括与边界设计相关的类和接口。l javax.swing.colorchooser:
15、与颜色选择相关的类和接口。l javax.swing.event:包括事件处理相关的类和接口。l javax.swing.filechooser:包括对文件进行查看选取的相关类。l javax.swing.plaf:包括一些对外观样式操作的类和接口。l javax.swing.tree:包括对树形组件进行操作的类和接口。常用Swing组件:l 按钮:JButtonl 文本区:JTextAreal 文本字段:JTextField在本程序中使用如下:/ 设置主窗体位置和大小Frame.setSize(700, 700); /设置主窗体大小/添加窗口监听,使之可以关闭窗口Frame.addWindo
16、wListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0);/ 设置扫描按钮和退出按钮/Tcp connect扫描按钮Tcp_connect.setBounds(17,313,140,30);Tcp_connect.setActionCommand(Tcp_connect);/设置JButton的属性值Tcp_connect.addActionListener(this);/监听按钮的行为/Tcp SYN扫描按钮Tcp_SYN.setBounds(17,363,140,30);Tcp
17、_SYN.setActionCommand(Tcp_SYN);/设置JButton的属性值Tcp_SYN.addActionListener(this);/监听按钮的行为/Icmp echo扫描按钮ICMP_echo.setBounds(17,413,140,30);ICMP_echo.setActionCommand(ICMP_echo);/设置JButton的属性值ICMP_echo.addActionListener(this);/监听按钮的行为/退出扫描按钮Exit.setBounds(17,463,140,30);Exit.setActionCommand(Exit);Exit.ad
18、dActionListener(this);l jvnet.substance.*:目的是提供一个流行的外观(look & feel)。/设置窗体皮肤SubstanceAutumnLookAndFeel.setSkin(new FieldOfWheatSkin();第四章 调试分析与运行结果(1)性能要求实时性好、可靠性强、不占用系统太多的内存和存储空间。(2)设计约束开发工具:jdk1.8.0_102 Eclipse jee 图四 开发工具运行环境:Windows 10能实现用户所定义的各项需求。在Eclipse中右击,选择运行方式,JAVA应用程序填写IP地址,可填写任意的一个IP出现程序
19、界面设置开始端口大小,设置065535之间的端口号且必须为整数设置结束口,设置065535之间的端口号且必须为整数,并且大于开始端口设置进程数,0200之间且必须为整数点击扫描可以开始扫描结果显示是否继续扫描结束程序否,点击退出是,重新设置 运行程序流程图 图4 流程图未扫描状态:图6 运行界面未扫描状态图正常扫描后状态:图7 运行界面正常扫描状态图起始端口设置有误扫描开始后状态报错:图8 运行界面起始端口设置错误报错图结束端口设置有误扫描开始后状态报错:图9 运行界面结束端口设置错误报错图线程数设置错误报错:图10 运行界面线程数设置错误报错图正常运行:图11 正常运行图正常运行后且保存扫描
20、结果之前的文件内容: 图12 保存扫描结果之前的文件内容图正常运行后且保存扫描结果之后的文件内容: 图13 保存扫描结果之后的文件内容第五章 课程设计总结在此次课程设计中,遇到了一些问题,如:程序功能不能完全实现,对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于Java语言,以前只学习到了一些最基本的知识,要在短时间内用Java语言来开发软件是一个较大的挑战;对于开发软件的流程不熟悉,适应起来比较慢,编写需求说明书和设计规格说明书时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,多看些项目的源代
21、码。对于书上以及网站上下载的资料中的Java实例必须理解,还有多跟精通JAVA语言的老师和同学请教和交流,取其精华。对于实际动手能力与软件开发的流程的适应,必须多进行实际的练习与操作,才能有所进步。我自己感觉此次课程设计做得挺成功的,通过这一次实践编程,我学到了不少有关JAVA的实际编程的知识。在这次设计开始的第一天开始,我就开始着手修改一个用JAVA编写的短线呈端口扫描的程序。我刚开始很自信自己能修改成功,但这一过程太不顺利。用了两天时间来修改那个JAVA程序,但调试的时候都没有成功。后来我请教一个班上成绩好的同学,在他的帮助下我不断的发现错误,并改正它们,功夫不负有心人人,我的程序最后运行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多线程 端口扫描 程序设计 实现 29
限制150内