收藏 分享(赏)

多线程端口扫描程序设计与实现.doc

上传人:精品资料 文档编号:8486916 上传时间:2019-06-29 格式:DOC 页数:36 大小:936.48KB
下载 相关 举报
多线程端口扫描程序设计与实现.doc_第1页
第1页 / 共36页
多线程端口扫描程序设计与实现.doc_第2页
第2页 / 共36页
多线程端口扫描程序设计与实现.doc_第3页
第3页 / 共36页
多线程端口扫描程序设计与实现.doc_第4页
第4页 / 共36页
多线程端口扫描程序设计与实现.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、中南大学计算机网络课程设计报告题 目 多线程端口扫描程序设计与实现 学生姓名 孙毅 指导教师 刘嫔 学 院 信息科学与工程学院 专业班级 信息安全 1401 完成时间 2016/10/19 目录第一章 需求分析 11.1 设计任务与要求 .11.2 系统功能描述 11.2.1 功能概述 .11.2.2 本系统要实现的功能 .1第二章 总体设计 .22.1 总体分析 .22.1 界面设置构思图 .22.3 界面使用设置构思 .22.4 后台设计构思 .3第三章 详细设计 .43.1 界面设计 .43.2 界面设计图 .43.3 后台设计 .5第四章 调试分析与运行结果 .94.1 运行环境与要求

2、 .94.2 运行程序流程图 94.3 运行界面 10第五章 课程设计总结 14第六章 参考文献 15第七章 附录 151第一章 需求分析1.1 设计任务与要求本设计要求完成一个多线程端口扫描程序的设计与实现,具有易用、美观的界面。功能要求:能够对本地或远程主机进行端口扫描。能够对制定端口段进行扫描。能够扫描制定 IP 地址范围内哪些主机开放了特定端口,如常见的 TCP 端口 FTP(21)等。使用 TCP connect 进行端口扫描; 使用 TCP SYN 进行端口扫描; 使用 ICMP echo 扫描实现 IP 扫描; 能把扫描结果记录保存下来。1.2 系统功能描述1.2.1 功能概述多

3、线程端口扫描器是实现计算机的端口的扫描,只要在在前台设置好所要扫描的 IP、起始端口、结束端口以及所要用到的线程数,点击扫描,就可以扫描到所输入 IP 地址主机的开放端口,并显示在主窗体中;点击退出,则可以退出该程序。IP 设置应为所在主机的 IP 地址,起始端口和结束端口应为065535 之间的一个数,且起始端口应小于结束端口的大小。线程数为 0200之间的一个数。点击开始后就会运行,直到扫描完毕显示出开放端口,如果没有开放端口,则只显示扫描完毕。1.2.2 本系统要实现的功能 端口扫描功能:扫描开放的端口,并将扫描到的开放端口号送到前台。2 图像显示功能:显示界面图形。 多线程功能:当客户

4、端要求与服务器端建立连接时,服务器端就将用到多线程功能,为每一个建立起来的连接创建一个线程。 异常抛出功能:对于明显的错误,能提示出错误的类型并结束程序的运行。第 2 章 总体设计2.1 总体分析本程序分为前后台系统,后台系统用于扫描主机开放端口,并把节扫描的数据送至前台窗口显示;前台要显示扫描的结果,所以应为一个窗口,这个窗口应能够设置主机的 IP 地址,设置端口的开始端口、结束端口和线程数,并且还能够显示扫描的状态。在中央是显示结果的窗体。本程序还应能够有控制扫描的状态命令,附加设置最小化和关闭按钮。2.1 界面设置构思图3图 1 系统构思图2.3 界面使用设置构思当出现如图所示的界面时,

5、填写好要扫描的 IP 地址,需要扫描的端口范围和线程数,单击命令提示按钮就可以开始扫描,扫描结果就会显示在中间的扫描结果显示区域,在扫描状态显示区就会显示是否扫描完毕。流程图如下:图 2 系统构思流程图2.4 后台设计构思4后台系统使用 Scanner 和 Scan 类,创建前台布局和创建扫描端口、事件处理,并且能对简单的错误进行判断,显示错误原因。调用数据处理包,处理异常情况;调用皮肤包,美化显示窗口。第 3 章 详细设计3.1 界面设计本程序界面图形设计要能清楚显示扫描后的结果,并且能很好的体现出界面的整洁大方,但并不失去吸引人眼球的画面,所以在做界面的时候考虑了界面的色彩,并且添加了皮肤

6、,界面上面的字体设置和 windows 窗口设置一样采用宋体,界面上的按钮不设置过多的按钮,仅设置有必要的按钮即可,界面设置大方。使用的时候有默认的 IP 地址、需要扫描的端口和线程数,如果需要扫描其他主机,只需要填写好要扫描的主机的 IP 地址,需要扫描的端口范围和线程数,单击命令提示按钮就可以开始扫描,扫描结果就会显示在中间的扫描结果显示区域,在扫描状态显示区就会显示是否扫描完毕。3.2 界面设计图本程序采用小窗口形式,外围大小为 700mm*700mm,结果显示字幕为主机地址加开放端口。添加个性皮肤。其余地方设置按钮和扫描的主机地址、端口和线程数。设计的预计页面图形如图:5图 3 系统界

7、面设计图3.3 后台设计本程序使用了为主要的 Scanner2 类和 ScanTcpConnect 类。ScanTcpConnect 类的作用是创建线程扫描端口,然后把结果显示到前台。Scanner2 类的作用是构造前台布局,调用 ScanTcpConnect 类添加事件处理,对输入进行错误判断,如果输入不在允许的范围之内则显示相关错误。在本程序中用到了网络编程的两个类,下面介绍这两个类的常用方法。InetSocketAddress 类构造方法如下: InetSocketAddress(InetAddress addr, int port):根据 IP 地址和端口号创建套接字地址。 InetS

8、ocketAddress(int port):创建套接字地址,其中 IP 地址为通配符地址,端口号为指定值。 InetSocketAddress(String hostname, int port):根据主机名和端口6号创建套接字地址。Socket 类常用方法如下: Socket():通过系统默认类型的 SocketImpl 创建未连接套接字 Socket(InetAddress address, int port):创建一个流套接字并将其连接到指定 IP 地址的指定端口号。 void bind(SocketAddress bindpoint):将套接字绑定到本地地址。 void close(

9、):关闭此套接字。 void connect(SocketAddress endpoint):将此套接字连接到服务器。 void connect(SocketAddress endpoint, int timeout):将此套接字连接到具有指定超时值的服务器。 boolean isClosed():返回套接字的关闭状态。 boolean isConnected():返回套接字的连接状态。本程序还调用其他的一些类和包,比如软件包 java.awt.color 、java.awt.event、io.IOException、Javax.Swing、jvnet.substance.*。 java.aw

10、t.color 包的的描述:提供用于颜色空间的类。它包含了基于国际色彩联盟 (ICC) 配置文件格式规范的颜色空间实现。它还包含了基于 ICC 配置文件格式规范的颜色配置文件。用来使界面更加具有色彩。Result.setBackground(Color.PINK);/设置窗口为粉红 java.awt.event 的描述:提供处理由 AWT 组件所激发的各类事件的接口和类。事件由事件源所激发,向事件源注册的事件侦听器可接收有关特定事件类型的通知。此包定义了事件和事件侦听器,以及事件侦听器适配器,它是让事件侦听器的编写过程更为轻松的便捷类。在本程序中使用:public void actionPer

11、formed(ActionEvent e) String cmd = e.getActionCommand();if(cmd.equals(“Start“)7 io.IOException 包的描述:用来处理 io 的错误,不仅仅是文件读写,还包括很多 stream 的读写,而且 throws 是用来放在函数定义的函数体前函数名后的,表示这个函数将会在出现异常的书后会抛出 io 异常,所以在以后的程序中调用这个函数的时候就必须用 try 和 catch 来捕获异常,否则编译会报错,这主要涉及到 java 的安全机制。本程序中使用如下:try minPort = Integer.parseInt

12、(PortStart.getText();maxPort = Integer.parseInt(PortEnd.getText();threadNum = Integer.parseInt(ThreadNum.getText(); catch (NumberFormatException e1) DLGError.setBounds(300, 280, 299, 120);DLGINFO.setText(“错误的端口号或线程数!端口号和线程数必须为整数!“);DLGINFO.setBounds(10, 20, 280, 20);OK.setBounds(110, 50, 60, 30);DLG

13、Error.setVisible(true);return; Javax.Swing 集合描述:由所有 Java 图形用户界面(GUI)组件所构成,可运行在任一支持 Java 虚拟机(JVM)的本地平台上。由于这些组件全都是用Java 语言编写的,因此它们可以提供比本地平台 GUI 组件更多的功能。 (与抽象窗口工具箱对比) 。Java Swing 是 Java Foundation Classes(JFC)的一部8分。在 Swing 中,Sun 开发了一个经过仔细设计的、灵活而强大的 GUI 工具包。Swing 是在 AWT 组件基础上构建的。它所提供的功能要比 AWT 提供的更为广泛。它也

14、是 Java 技术的一种标准配置。Swing 模型一个 Java GUI 通常由顶层容器、中间容器以及多个原子组件组成。每个原子组件或容器都可能触发相应事件的产生。容器是一类能够在其中容纳其他组件的特殊组件。Swing 的 GUI 组件类是按照类属层次以树状结构进行组织的。在这个树的最顶层,即树的根部,使一个最基本的容器类,被称为顶层容器。Swing 提供了三个通用的顶层容器类 JFrame,JDialog 和 JApplet。JFrame 提供了基于窗体的应用程序,JDialog 提供对话框形式的界面,JApplet 提供Java 小应用程序的界面形式。在顶层容器下是中间容器,用于容纳其他的

15、组件。通常窗格本身在显示界面中是看不到的。面板类 Panel 是一种中间容器,它的唯一作用是使组件更容易定位。顶层容器通过 getContentPane()方法获取内部的一个内容窗格。Swing 包的组成: javax.swing:基本 Swing 包,包括 Swing 容器、组件及相关设置的类和接口。 javax.swing.border:包括与边界设计相关的类和接口。 javax.swing.colorchooser:与颜色选择相关的类和接口。 javax.swing.event:包括事件处理相关的类和接口。 javax.swing.filechooser:包括对文件进行查看选取的相关类。

16、 javax.swing.plaf:包括一些对外观样式操作的类和接口。 javax.swing.tree:包括对树形组件进行操作的类和接口。常用 Swing 组件: 按钮:JButton 文本区:JTextArea 文本字段:JTextField9在本程序中使用如下:/ 设置主窗体位置和大小Frame.setSize(700, 700); /设置主窗体大小/添加窗口监听,使之可以关闭窗口Frame.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0););/ 设

17、置扫描按钮和退出按钮/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_SYN.setActionCommand(“Tcp_SYN“);/设置 JButton 的属性值Tcp_SYN.addActionListener(this);/监

18、听按钮的行为/Icmp echo 扫描按钮ICMP_echo.setBounds(17,413,140,30);10ICMP_echo.setActionCommand(“ICMP_echo“);/设置 JButton 的属性值ICMP_echo.addActionListener(this);/监听按钮的行为/退出扫描按钮Exit.setBounds(17,463,140,30);Exit.setActionCommand(“Exit“);Exit.addActionListener(this); jvnet.substance.*:目的是提供一个流行的外观(look 11第 4 章 调试分

19、析与运行结果4.1 运行环境与要求(1)性能要求实时性好、可靠性强、不占用系统太多的内存和存储空间。(2)设计约束开发工具:jdk1.8.0_102 Eclipse jee图四 开发工具运行环境:Windows 10能实现用户所定义的各项需求。4.2 运行程序流程图图 4 流程图4.3 运行界面未扫描状态:12图 6 运行界面未扫描状态图正常扫描后状态:图 7 运行界面正常扫描状态图13起始端口设置有误扫描开始后状态报错:图 8 运行界面起始端口设置错误报错图结束端口设置有误扫描开始后状态报错:14图 9 运行界面结束端口设置错误报错图线程数设置错误报错:图 10 运行界面线程数设置错误报错图

20、正常运行:15图 11 正常运行图正常运行后且保存扫描结果之前的文件内容: 图 12 保存扫描结果之前的文件内容图16正常运行后且保存扫描结果之后的文件内容:图 13 保存扫描结果之后的文件内容第 5 章 课程设计总结在此次课程设计中,遇到了一些问题,如:程序功能不能完全实现,对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于Java 语言,以前只学习到了一些最基本的知识,要在短时间内用 Java 语言来开发软件是一个较大的挑战;对于开发软件的流程不熟悉,适应起来比较慢,编写需求说明书和设计规格说明书时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。17对于以上的

21、问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,多看些项目的源代码。对于书上以及网站上下载的资料中的 Java 实例必须理解,还有多跟精通 JAVA 语言的老师和同学请教和交流,取其精华。对于实际动手能力与软件开发的流程的适应,必须多进行实际的练习与操作,才能有所进步。我自己感觉此次课程设计做得挺成功的,通过这一次实践编程,我学到了不少有关 JAVA 的实际编程的知识。在这次设计开始的第一天开始,我就开始着手修改一个用 JAVA 编写的短线呈端口扫描的程序。我刚开始很自信自己能修改成功,但这一过程太不顺利。用了两天时间来修改那个 JAVA 程序,但调试的时候都没有成功。后来我请教一个

22、班上成绩好的同学,在他的帮助下我不断的发现错误,并改正它们,功夫不负有心人人,我的程序最后运行成功了。在这课程设计期间我的同学和老师帮助了我,有些东西是我们一起探讨,一起解决方法的。当然在学习 Java 和设计程序的过程中还得到了杭志老师的辛勤指导,为我解答了不少的疑问。同时,在刘老师身上我们学到了很多实用的东西,在此表示衷心的感谢!同时,还要感谢帮助过我的其他同学!这次课程设计令我感受很多。从拿到题目到改编 JAVA 程序;然后请教别人慢慢研究琢磨;从理论到实践;从失败到成功;忘不了我坐在电脑前苦苦思索,高温下熬夜地编程的疲惫;忘不了因沉迷于编程却耽误了吃饭时间而挨饿辛酸;忘不了这其中了不少

23、的东西,磨砺了我的意志;同时还巩固了以前所学的知识,学到了不少书本上没有的知识;学到了很多 java 编程知识,并学会了简单的使用 eclipse 来开发 java 程序的一些使用技巧这次课程设计是对我本学期所学的知识的检验,由此我发现了不少的问题。可以说它给了我一次自我评估的机会。通过设计让我知道了那些方面我还是有欠缺的,促使我花时间弥补。临近考试,时间太紧迫,致使程序实现的功能在方法上也许不是很完美,但我以后会多向老师请教,自己也要加强对 Java 的学习。努力进一步提高自己的编程水平。此次的课程设计,对我来说撰写文档似乎是一个更大的挑战。撰写文档不仅要求我们要对自己程序非常熟悉:程序的总

24、体框架,功能,如何实现,存在什么问题等,同时还要求我们有清晰的思维和准确的表达能力以及严密的逻辑18性。因此,写完这篇文档对于我们自身来说自然是获益匪浅的。第 6 章 参考文献1、Sharon Zakhour Scott Hommel 等著. Java 语言导学.人民邮电出版社, 20082、耿祥义 编著. Java 基础教程. 清华大学出版社, 20043、Joe Wigglesworth Paula Lumby. Java 程序设计高级主题. 北京大学出版社, 20044、Y.Daniel Liang 著,王镁等译.Java 语言程序设计基础篇.20065、朱福喜等.Java 项目设计与开

25、发范例.电子工业出版社,20056、李瑞民.网络扫描技术揭秘.机械工业出版社,2012第 7 章 附录带注释的源程序:/多线程端口扫描程序设计与实现带有注释的源程序19import java.awt.*; /抽象窗口工具包,图形界面组件类import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.*; /各种 IOimport javax.swi

26、ng.*; /awt 基础上的一套图形界面系统import .*;/第一大类:Scanner2 类public class Scanner2 extends JFrame implements ActionListener public static void main(String args) /程序入口new Scanner2();static int j = 0;/主窗口的创建,new 组件public static JFrame Frame = new JFrame();public static Label labelIPStart = new Label(“起始 IP“);publ

27、ic static Label labelIPEnd = new Label(“结束 IP“);public static Label labelPortStart = new Label(“起始端口“);20public static Label labelPortEnd = new Label(“结束端口“);public static Label labelThread = new Label(“线程数“ );public static Label labelTimeOut = new Label(“请求超时:“);public static Label labelState = new

28、 Label(“扫描状态:“);public static Label labelResult = new Label(“扫描结果:“ );public static Label labelScanning = new Label(“扫描待命“);JLabel photo= new JLabel(new ImageIcon(“G:/图片/QQ 图片20160724195038.jpg“);public static JTextField hostNameStart = new JTextField(“127.0.0.1“);public static JTextField hostNameEn

29、d = new JTextField(“127.0.0.1“);public static JTextField PortStart = new JTextField(“10“);public static JTextField PortEnd = new JTextField(“30“);public static JTextField ThreadNum = new JTextField(“9“);public static JTextField time = new JTextField(“2000“);public static TextArea Result1 = new TextA

30、rea();public static TextArea Result2 = new TextArea();public static Label DLGINFO = new Label(“);public static JButton Tcp_connect = new JButton(“Tcp connect 扫描“);public static JButton Tcp_SYN = new JButton(“Tcp SYN 扫描“);public static JButton ICMP_echo = new JButton(“ICMP echo 扫描“);public static JBu

31、tton Exit = new JButton(“退出扫描“);21public static JButton save = new JButton(“保存结果“);/错误提示对话框public static JDialog DLGError = new JDialog(Frame, “ERROR“);public static JButton OK = new JButton(“OK“);/在构造函数里进行窗口设计public Scanner2()/设置主窗体标题Frame.setTitle(“计算机网络课设:多线程端口扫描 -信安 1401 孙毅 CSU“);Frame.setSize(7

32、00, 700); /设置主窗体大小/添加窗口监听,使之可以关闭窗口Frame.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0););/设置一系列按钮和小窗口及图片/IPlabelIPStart.setBounds(17,13,50,20);hostNameStart.setBounds(67,13,90,25);22hostNameStart.setHorizontalAlignment(JTextField.CENTER);/文本水平对齐方式labelI

33、PEnd.setBounds(17,63,50,20);hostNameEnd.setBounds(67,63,90,25);hostNameEnd.setHorizontalAlignment(JTextField.CENTER);/文本水平对齐方式/起始端口 labelPortStart.setBounds(17,113,50,20);PortStart.setBounds(67,113,90,25);PortStart.setHorizontalAlignment(JTextField.CENTER);/结束端口labelPortEnd.setBounds(17,163,50,20);P

34、ortEnd.setBounds(67,163,90,25);PortEnd.setHorizontalAlignment(JTextField.CENTER);/线程数labelThread.setBounds(17,213,50,20);ThreadNum.setBounds(67,213,90,25);ThreadNum.setHorizontalAlignment(JTextField.CENTER);/请求超时labelTimeOut.setBounds(17,263,50,20);time.setBounds(67,263,90,25);time.setHorizontalAlig

35、nment(JTextField.CENTER);/Tcp connect 扫描按钮Tcp_connect.setBounds(17,313,140,30);Tcp_connect.setActionCommand(“Tcp_connect“);/设置 JButton 的属性值23Tcp_connect.addActionListener(this);/监听按钮的行为/Tcp SYN 扫描按钮Tcp_SYN.setBounds(17,363,140,30);Tcp_SYN.setActionCommand(“Tcp_SYN“);/设置 JButton 的属性值Tcp_SYN.addAction

36、Listener(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.addActionListener(this);/保存结果按钮save.setBounds(17,513,140,

37、30);save.setActionCommand(“save“);save.addActionListener(this);/扫描状态栏labelState.setBounds(180,13,50,20);labelScanning.setBounds(240,8,120,30);Result1.setBounds(180,40,210,332);Result1.setEditable(false);Result1.setBackground(Color.GREEN);/图片的显示photo.setBounds(393,13,283,360);24/扫描结果栏labelResult.setB

38、ounds(180,390,50,20);Result2.setBounds(180,420,500,200);Result2.setEditable(false);Result2.setBackground(Color.GREEN);/设置错误提示框Container ErrorDisplay = DLGError.getContentPane();ErrorDisplay.setLayout(null);ErrorDisplay.add(DLGINFO);ErrorDisplay.add(OK);OK.setActionCommand(“OK“);OK.addActionListener(

39、this);/将组件添加到主窗体Frame.setLayout(null);Frame.setResizable(false);/窗口大小设置为不可变Frame.add(labelIPStart);Frame.add(labelIPEnd);Frame.add(labelPortStart);Frame.add(labelPortEnd);Frame.add(labelThread);Frame.add(labelTimeOut);Frame.add(hostNameStart);Frame.add(hostNameEnd);25Frame.add(PortStart);Frame.add(P

40、ortEnd);Frame.add(ThreadNum);Frame.add(time);Frame.add(Tcp_connect);Frame.add(Tcp_SYN);Frame.add(ICMP_echo);Frame.add(Exit);Frame.add(save);Frame.add(labelState);Frame.add(labelScanning);Frame.add(Result1);Frame.add(photo);Frame.add(labelResult);Frame.add(Result2);Frame.setVisible(true);/几个产生错误的原因Ov

41、erridepublic void actionPerformed(ActionEvent arg0) / TODO Auto-generated method stubString cmd = arg0.getActionCommand();26int minPort,maxPort,threadNum;InetAddress hostAddressStart = null;InetAddress hostAddressEnd = null;try/获取输入的相关数据minPort = Integer.parseInt(PortStart.getText();maxPort = Intege

42、r.parseInt(PortEnd.getText();threadNum = Integer.parseInt(ThreadNum.getText();catch(NumberFormatException e1)DLGError.setBounds(300,280,300,200);DLGINFO.setText(“靓仔,端口号、线程号必须得是整数“);DLGINFO.setBounds(25,15,350,20);OK.setBounds(110,50,60,30);DLGError.setVisible(true);return;/输入信息错误处理if(minPort 65536)|(minPort maxPort)DLGError.setBounds(300,280,400,200);DLGINFO.setText(“端口必须在 065536 之间,且起始端口应小于结束端口“);DLGINFO.setBounds(25,15,350,20);OK.setBounds(110,50,60,30);DLGError.setVisible(true);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报