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

上传人:b****5 文档编号:30275908 上传时间:2023-08-13 格式:DOCX 页数:31 大小:866.97KB
下载 相关 举报
多线程端口扫描程序设计与实现.docx_第1页
第1页 / 共31页
多线程端口扫描程序设计与实现.docx_第2页
第2页 / 共31页
多线程端口扫描程序设计与实现.docx_第3页
第3页 / 共31页
多线程端口扫描程序设计与实现.docx_第4页
第4页 / 共31页
多线程端口扫描程序设计与实现.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

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

《多线程端口扫描程序设计与实现.docx》由会员分享,可在线阅读,更多相关《多线程端口扫描程序设计与实现.docx(31页珍藏版)》请在冰豆网上搜索。

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

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

 

《计算机网络》

课程设计报告

 

题目多线程端口扫描程序设计与实现

 

第一章需求分析1

1.1设计任务与要求1

1.2系统功能描述1

1.2.1功能概述1

1.2.2本系统要实现的功能1

第二章总体设计1

2.1总体分析1

2.1界面设置构思图1

2.3界面使用设置构思1

2.4后台设计构思1

第三章详细设计1

3.1界面设计1

3.2界面设计图1

3.3后台设计1

第四章调试分析与运行结果1

4.1运行环境与要求1

4.2运行程序流程图1

4.3运行界面1

第五章课程设计总结1

第六章参考文献1

第七章附录1

 

第一章需求分析

1.1设计任务与要求

本设计要求完成一个多线程端口扫描程序的设计与实现,具有易用、美观的界面。

功能要求:

能够对本地或远程主机进行端口扫描。

能够对制定端口段进行扫描。

能够扫描制定IP地址围哪些主机开放了特定端口,如常见的TCP端口FTP(21)等。

使用TCPconnect进行端口扫描;使用TCPSYN进行端口扫描;使用ICMPecho扫描实现IP扫描;能把扫描结果记录保存下来。

 

1.2系统功能描述

1.2.1功能概述

多线程端口扫描器是实现计算机的端口的扫描,只要在在前台设置好所要扫描的IP、起始端口、结束端口以及所要用到的线程数,点击扫描,就可以扫描到所输入IP地址主机的开放端口,并显示在主窗体中;点击退出,则可以退出该程序。

IP设置应为所在主机的IP地址,起始端口和结束端口应为0~65535之间的一个数,且起始端口应小于结束端口的大小。

线程数为0~200之间的一个数。

点击开始后就会运行,直到扫描完毕显示出开放端口,如果没有开放端口,则只显示扫描完毕。

1.2.2本系统要实现的功能

①端口扫描功能:

扫描开放的端口,并将扫描到的开放端口号送到前台。

②图像显示功能:

显示界面图形。

③多线程功能:

当客户端要求与服务器端建立连接时,服务器端就将用到多线程功能,为每一个建立起来的连接创建一个线程。

④异常抛出功能:

对于明显的错误,能提示出错误的类型并结束程序的运行。

 

第2章总体设计

2.1总体分析

本程序分为前后台系统,后台系统用于扫描主机开放端口,并把节扫描的数据送至前台窗口显示;前台要显示扫描的结果,所以应为一个窗口,这个窗口应能够设置主机的IP地址,设置端口的开始端口、结束端口和线程数,并且还能够显示扫描的状态。

在中央是显示结果的窗体。

本程序还应能够有控制扫描的状态命令,附加设置最小化和关闭按钮。

2.1界面设置构思图

图1系统构思图

2.3界面使用设置构思

当出现如图所示的界面时,填写好要扫描的IP地址,需要扫描的端口围和线程数,单击命令提示按钮就可以开始扫描,扫描结果就会显示在中间的扫描结果显示区域,在扫描状态显示区就会显示是否扫描完毕。

流程图如下:

 

图2系统构思流程图

2.4后台设计构思

后台系统使用Scanner和Scan类,创建前台布局和创建扫描端口、事件处理,并且能对简单的错误进行判断,显示错误原因。

调用数据处理包,处理异常情况;调用皮肤包,美化显示窗口。

 

第3章详细设计

3.1界面设计

本程序界面图形设计要能清楚显示扫描后的结果,并且能很好的体现出界面的整洁大方,但并不失去吸引人眼球的画面,所以在做界面的时候考虑了界面的色彩,并且添加了皮肤,界面上面的字体设置和windows窗口设置一样采用宋体,界面上的按钮不设置过多的按钮,仅设置有必要的按钮即可,界面设置大方。

使用的时候有默认的IP地址、需要扫描的端口和线程数,如果需要扫描其他主机,只需要填写好要扫描的主机的IP地址,需要扫描的端口围和线程数,单击命令提示按钮就可以开始扫描,扫描结果就会显示在中间的扫描结果显示区域,在扫描状态显示区就会显示是否扫描完毕。

3.2界面设计图

本程序采用小窗口形式,外围大小为700mm*700mm,结果显示字幕为主机地址加开放端口。

添加个性皮肤。

其余地方设置按钮和扫描的主机地址、端口和线程数。

设计的预计页面图形如图:

图3系统界面设计图

3.3后台设计

本程序使用了为主要的Scanner2类和ScanTcpConnect类。

ScanTcpConnect类的作用是创建线程扫描端口,然后把结果显示到前台。

Scanner2类的作用是构造前台布局,调用ScanTcpConnect类添加事件处理,对输入进行错误判断,如果输入不在允许的围之则显示相关错误。

在本程序中用到了网络编程的两个类,下面介绍这两个类的常用方法。

InetSocketAddress类构造方法如下:

●InetSocketAddress(InetAddressaddr,intport):

根据IP地址和端口号创建套接字地址。

●InetSocketAddress(intport):

创建套接字地址,其中IP地址为通配符地址,端口号为指定值。

●InetSocketAddress(Stringhostname,intport):

根据主机名和端口号创建套接字地址。

Socket类常用方法如下:

●Socket():

通过系统默认类型的SocketImpl创建未连接套接字

●Socket(InetAddressaddress,intport):

创建一个流套接字并将其连接到指定IP地址的指定端口号。

●voidbind(SocketAddressbindpoint):

将套接字绑定到本地地址。

●voidclose():

关闭此套接字。

●voidconnect(SocketAddressendpoint):

将此套接字连接到服务器。

●voidconnect(SocketAddressendpoint,inttimeout):

将此套接字连接到具有指定超时值的服务器。

●booleanisClosed():

返回套接字的关闭状态。

●booleanisConnected():

返回套接字的连接状态。

本程序还调用其他的一些类和包,比如软件包java.awt.color、java.awt.event、io.IOException、Javax.Swing、jvnet.substance.*。

●java.awt.color包的的描述:

提供用于颜色空间的类。

它包含了基于国际色彩联盟(ICC)配置文件格式规的颜色空间实现。

它还包含了基于ICC配置文件格式规的颜色配置文件。

用来使界面更加具有色彩。

Result.setBackground(Color.PINK);//设置窗口为粉红

●java.awt.event的描述:

提供处理由AWT组件所激发的各类事件的接口和类。

事件由事件源所激发,向事件源注册的事件侦听器可接收有关特定事件类型的通知。

此包定义了事件和事件侦听器,以及事件侦听器适配器,它是让事件侦听器的编写过程更为轻松的便捷类。

在本程序中使用:

publicvoidactionPerformed(ActionEvente){

Stringcmd=e.getActionCommand();

if(cmd.equals("Start"))

…………

}

●io.IOException包的描述:

用来处理io的错误,不仅仅是文件读写,还包括很多stream的读写,而且throws是用来放在函数定义的函数体前函数名后的,表示这个函数将会在出现异常的书后会抛出io异常,所以在以后的程序中调用这个函数的时候就必须用try和catch来捕获异常,否则编译会报错,这主要涉及到java的安全机制。

本程序中使用如下:

try{

minPort=Integer.parseInt(PortStart.getText());

maxPort=Integer.parseInt(PortEnd.getText());

threadNum=Integer.parseInt(ThreadNum.getText());

}catch(NumberFormatExceptione1){

DLGError.setBounds(300,280,299,120);

DLGINFO.setText("错误的端口号或线程数!

端口号和线程数必须为整数!

");

DLGINFO.setBounds(10,20,280,20);

OK.setBounds(110,50,60,30);

DLGError.setVisible(true);

return;

…………

}

●Javax.Swing集合描述:

由所有Java图形用户界面(GUI)组件所构成,可运行在任一支持Java虚拟机(JVM)的本地平台上。

由于这些组件全都是用Java语言编写的,因此它们可以提供比本地平台GUI组件更多的功能。

(与抽象窗口工具箱对比)。

JavaSwing是JavaFoundationClasses(JFC)的一部分。

在Swing中,Sun开发了一个经过仔细设计的、灵活而强大的GUI工具包。

Swing是在AWT组件基础上构建的。

它所提供的功能要比AWT提供的更为广泛。

它也是Java技术的一种标准配置。

Swing模型

一个JavaGUI通常由顶层容器、中间容器以及多个原子组件组成。

每个原子组件或容器都可能触发相应事件的产生。

容器是一类能够在其中容纳其他组件的特殊组件。

Swing的GUI组件类是按照类属层次以树状结构进行组织的。

在这个树的最顶层,即树的根部,使一个最基本的容器类,被称为顶层容器。

Swing提供了三个通用的顶层容器类JFrame,JDialog和JApplet。

JFrame提供了基于窗体的应用程序,JDialog提供对话框形式的界面,JApplet提供Java小应用程序的界面形式。

在顶层容器下是中间容器,用于容纳其他的组件。

通常窗格本身在显示界面中是看不到的。

面板类Panel是一种中间容器,它的唯一作用是使组件更容易定位。

顶层容器通过getContentPane()方法获取部的一个容窗格。

Swing包的组成:

●javax.swing:

基本Swing包,包括Swing容器、组件及相关设置的类和接口。

●javax.swing.border:

包括与边界设计相关的类和接口。

●javax.swing.colorchooser:

与颜色选择相关的类和接口。

●javax.swing.event:

包括事件处理相关的类和接口。

●javax.swing.filechooser:

包括对文件进行查看选取的相关类。

●javax.swing.plaf:

包括一些对外观样式操作的类和接口。

●javax.swing.tree:

包括对树形组件进行操作的类和接口。

常用Swing组件:

●按钮:

JButton

●文本区:

JTextArea

●文本字段:

JTextField

在本程序中使用如下:

//设置主窗体位置和大小

Frame.setSize(700,700);//设置主窗体大小

//添加窗口监听,使之可以关闭窗口

Frame.addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

System.exit(0);

}

});

//设置扫描按钮和退出按钮

//Tcpconnect扫描按钮

Tcp_connect.setBounds(17,313,140,30);

Tcp_connect.setActionCommand("Tcp_connect");//设置JButton的属性值

Tcp_connect.addActionListener(this);//监听按钮的行为

//TcpSYN扫描按钮

Tcp_SYN.setBounds(17,363,140,30);

Tcp_SYN.setActionCommand("Tcp_SYN");//设置JButton的属性值

Tcp_SYN.addActionListener(this);//监听按钮的行为

//Icmpecho扫描按钮

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);

●jvnet.substance.*:

目的是提供一个流行的外观(look&feel)。

//设置窗体皮肤

SubstanceAutumnLookAndFeel.setSkin(newFieldOfWheatSkin());

 

第4章调试分析与运行结果

4.1运行环境与要求

(1)性能要求

实时性好、可靠性强、不占用系统太多的存和存储空间。

(2)设计约束

开发工具:

jdk1.8.0_102Eclipsejee

图四开发工具

运行环境:

Windows10

能实现用户所定义的各项需求。

4.2运行程序流程图

图4流程图

4.3运行界面

未扫描状态:

 

图6运行界面未扫描状态图

正常扫描后状态:

图7运行界面正常扫描状态图

起始端口设置有误扫描开始后状态报错:

图8运行界面起始端口设置错误报错图

结束端口设置有误扫描开始后状态报错:

图9运行界面结束端口设置错误报错图

线程数设置错误报错:

图10运行界面线程数设置错误报错图

正常运行:

图11正常运行图

正常运行后且保存扫描结果之前的文件容:

图12保存扫描结果之前的文件容

正常运行后且保存扫描结果之后的文件容:

图13保存扫描结果之后的文件容

 

第5章课程设计总结

在此次课程设计中,遇到了一些问题,如:

程序功能不能完全实现,对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于Java语言,以前只学习到了一些最基本的知识,要在短时间用Java语言来开发软件是一个较大的挑战;对于开发软件的流程不熟悉,适应起来比较慢,编写需求说明书和设计规格说明书时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。

对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,多看些项目的源代码。

对于书上以及上下载的资料中的Java实例必须理解,还有多跟精通JAVA语言的老师和同学请教和交流,取其精华。

对于实际动手能力与软件开发的流程的适应,必须多进行实际的练习与操作,才能有所进步。

我自己感觉此次课程设计做得挺成功的,通过这一次实践编程,我学到了不少有关JAVA的实际编程的知识。

在这次设计开始的第一天开始,我就开始着手修改一个用JAVA编写的短线呈端口扫描的程序。

我刚开始很自信自己能修改成功,但这一过程太不顺利。

用了两天时间来修改那个JAVA程序,但调试的时候都没有成功。

后来我请教一个班上成绩好的同学,在他的帮助下我不断的发现错误,并改正它们,功夫不负有心人人,我的程序最后运行成功了。

在这课程设计期间我的同学和老师帮助了我,有些东西是我们一起探讨,一起解决方法的。

当然在学习Java和设计程序的过程中还得到了杭志老师的辛勤指导,为我解答了不少的疑问。

同时,在老师身上我们学到了很多实用的东西,在此表示衷心的感!

同时,还要感帮助过我的其他同学!

这次课程设计令我感受很多。

从拿到题目到改编JAVA程序;然后请教别人慢慢研究琢磨;从理论到实践;从失败到成功;忘不了我坐在电脑前苦苦思索,高温下熬夜地编程的疲惫;忘不了因沉迷于编程却耽误了吃饭时间而挨饿辛酸;忘不了……这其中了不少的东西,磨砺了我的意志;同时还巩固了以前所学的知识,学到了不少书本上没有的知识;学到了很多java编程知识,并学会了简单的使用eclipse来开发java程序的一些使用技巧这次课程设计是对我本学期所学的知识的检验,由此我发现了不少的问题。

可以说它给了我一次自我评估的机会。

通过设计让我知道了那些方面我还是有欠缺的,促使我花时间弥补。

临近考试,时间太紧迫,致使程序实现的功能在方法上也许不是很完美,但我以后会多向老师请教,自己也要加强对Java的学习。

努力进一步提高自己的编程水平。

此次的课程设计,对我来说撰写文档似乎是一个更大的挑战。

撰写文档不仅要求我们要对自己程序非常熟悉:

程序的总体框架,功能,如何实现,存在什么问题等,同时还要求我们有清晰的思维和准确的表达能力以及严密的逻辑性。

因此,写完这篇文档对于我们自身来说自然是获益匪浅的。

 

第6章参考文献

1、SharonZakhourScottHommel等著.Java语言导学.人民邮电,2008

2、耿祥义编著.Java基础教程.清华大学,2004

3、JoeWigglesworthPaulaLumby.Java程序设计高级主题.大学,2004

4、Y.DanielLiang著,王镁等译.Java语言程序设计基础篇.2006

5、朱福喜等.Java项目设计与开发例.电子工业,2005

6、瑞民.网络扫描技术揭秘.机械工业,2012

 

第7章附录

带注释的源程序:

 

//多线程端口扫描程序设计与实现带有注释的源程序

 

importjava.awt.*;//抽象窗口工具包,图形界面组件类

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjava.io.*;//各种IO

importjavax.swing.*;//awt基础上的一套图形界面系统

import.*;

 

//第一大类:

Scanner2类

publicclassScanner2extendsJFrameimplementsActionListener{

publicstaticvoidmain(String[]args){//程序入口

newScanner2();

}

staticintj=0;

//主窗口的创建,new组件

publicstaticJFrameFrame=newJFrame();

publicstaticLabellabelIPStart=newLabel("起始IP");

publicstaticLabellabelIPEnd=newLabel("结束IP");

publicstaticLabellabelPortStart=newLabel("起始端口");

publicstaticLabellabelPortEnd=newLabel("结束端口");

publicstaticLabellabelThread=newLabel("线程数");

publicstaticLabellabelTimeOut=newLabel("请求超时:

");

publicstaticLabellabelState=newLabel("扫描状态:

");

publicstaticLabellabelResult=newLabel("扫描结果:

");

publicstaticLabellabelScanning=newLabel("扫描待命");

JLabelphoto=newJLabel(newImageIcon("G:

//图片//QQ图片038.jpg"));

publicstaticJTextFieldhostNameStart=newJTextField("127.0.0.1");

publicstaticJTextFieldhostNameEnd=newJTextField("127.0.0.1");

publicstaticJTextFieldPortStart=newJTextField("10");

publicstaticJTextFieldPortEnd=newJTextField("30");

publicstaticJTextFieldThreadNum=newJTextField("9");

publicstaticJTextFieldtime=newJTextField("2000");

publicstaticTextAreaResult1=newTextArea();

publicstaticTextAreaResult2=newTextArea();

publicstaticLabelDLGINFO=newLabel("");

publicstaticJButtonTcp_connect=newJButton("Tcpconnect扫描");

publicstaticJButtonTcp_SYN=newJButton("TcpSYN扫描");

publicstaticJButtonICMP_echo=newJButton("ICMPecho扫描");

publicstaticJButtonExit=newJButton("退出扫描");

publicstaticJButtonsave=newJButton("保存结果");

//错误提示对话框

publicstaticJDialogDLGError=newJDialog(Frame,"ERROR");

publicstaticJButtonOK=newJButton("OK");

//在构造函数里进行窗口设计

publicScanner2(){

//设置主窗体标题

Frame.setTitle("计算机网络课设:

多线程端口扫描--------------信安1401毅CSU");

Frame.setSize(700,700);//设置主窗体大小

//添加窗口监听,使之可以关闭窗口

Frame.addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

System.

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1