多线程端口扫描李梦然Word文档下载推荐.docx
- 文档编号:20742268
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:22
- 大小:221.54KB
多线程端口扫描李梦然Word文档下载推荐.docx
《多线程端口扫描李梦然Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《多线程端口扫描李梦然Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
分析题目,搜索相关资料,整理相关资料,确定程序分工
6月15日至6月17日
编写程序代码,调试改进程序。
6月18日至6月19日
编写课程设计报告。
主
要
参
考
资
料
[1]赵生慧.Java面向对象程序设计.北京:
中国水利水电出版社,2010。
[2]谢希仁.计算机网络(第五版).北京:
电子工业出版社,2011。
[3]杨静宇.Java程序设计与应用开发(第2版)[M].北京:
清华大学出版社,2009。
指导教师
意见
(签字):
×
年×
月×
日
系(教研室)主任意见
计算机网络设计说明书
学院名称:
计算机与信息工程学院
班级名称:
网络工程122班
*******
学号:
**********
题目:
基于多线程的端口扫描程序
******
起止日期:
2014年6月13日至2014年6月20日
一、选题背景
随着互联网的飞速发展,网络入侵行为日益严重,网络安全成为人们关注的焦点。
端口扫描技术是网络安全扫描技术的重要技术之一。
对目标系统进行端口扫描,是网络系统入侵者进入目标系统的第一步。
网络安全探测在网络安全中起着主动防御的作用,占有非常重要的地位。
网络安全探测的所有功能都是建立在端口扫描的基础上,所以对端口扫描技术的研究有着非常重要的现实意义。
现实世界中的很多过程都具有多条线索同时动作的特性。
Java语言的一大特性就是内置对多线程的支持。
多线程是指同时存在几个执行体,按几条不同的执行线索共同工作的情况,它使得编程人员可以很方便地开发出具有多线程功能、能同时处理多个任务的功能强大的应用程序。
端口是由计算机的通信协议TCP/IP协议定义的。
其中规定,有IP地址和端口号作为套接字,它代表TCP连接的一个连接端,一般称为Socket。
具体来说,就是用[IP:
端口]来定位一台主机的进程。
可见端口与进程是一一对应的,如果某个进程正在等待连接,称之为该进程正在监听,那么就会出现与它相对应的端口。
由此可见,通过扫描端口,就可以判断出目标计算机有哪些通信进程正在等待连接。
利用TCP
connect扫描原理,扫描主机通过TCP/IP协议的三次握手与目标主机的指定端口建立一次完整的连接,如果目标主机该端口有回复,则说明该端口开放。
利用多线程技术实现了对一目标IP进行设定数目的端口扫描,对多IP段的特定端口进行扫描。
二、方案设计
多线程端口扫描器是实现计算机的端口的扫描,只要在在前台设置好所要扫描的IP、起始端口、结束端口以及所要用到的线程数,点击扫描,就可以扫描到所输入IP地址主机的开放端口,并显示在主窗体中;
点击退出,则可以退出该程序。
IP设置应为所在主机的IP地址,起始端口和结束端口应为0~65535之间的一个数,且起始端口应小于结束端口的大小。
线程数为0~200之间的一个数。
点击开始后就会运行,直到扫描完毕显示出开放端口,如果没有开放端口,则只显示扫描完毕。
本系统要实现的功能:
①端口扫描功能:
扫描开放的端口,并将扫描到的开放端口号送到前台。
②图像显示功能:
显示图形界面,以及显示扫描结果。
③多线程功能:
当客户端要求与服务器端建立连接时,服务器端就将用到多线程功能,为每一个建立起来的连接创建一个线程。
④异常抛出功能:
对于明显的数据错误,能提示出错误的类型并阻止程序的运行。
流程图:
三、详细设计
本程序是由3模块组成的:
图形界面,按钮的监听及数据检验,端口扫描
(1)图形用户界面是软件产品和用户交互的接口,是软件产品中用户直接可以看到并直接操作的部分。
publicstaticJFramemain=newJFrame("
基于JAVA的多线程TCP端口扫描程序\\李梦然"
);
publicstaticJTextAreaResult=newJTextArea("
"
4,44);
publicstaticJTextFieldhostname=newJTextField("
localhost"
8);
publicstaticJTextFieldminPort=newJTextField("
0"
4);
publicstaticJTextFieldmaxPort=newJTextField("
1000"
publicstaticJTextFieldmaxThread=newJTextField("
100"
3);
publicstaticJDialogDLGError=newJDialog(main,"
错误!
publicstaticLabelDLGINFO=newLabel("
publicstaticLabelstatus=newLabel("
扫描状态:
未开始"
publicScanner()
{
main.setSize(500,220);
main.setLocation(350,300);
main.setResizable(false);
DLGError.setSize(300,100);
DLGError.setLocation(450,400);
Result.setBackground(Color.pink);
JPanelmainPanel=newJPanel();
LabelH=newLabel("
ip:
LabelP1=newLabel("
端口范围:
LabelP2=newLabel("
—"
LabelTNUM=newLabel("
线程数:
LabelRST=newLabel("
扫描结果:
"
Result.setLineWrap(true);
Result.setEditable(false);
JButtonOK=newJButton("
确定"
JButtonSubmit=newJButton("
JButtonCancel=newJButton("
取消"
ContainermPanel=main.getContentPane();
ContainerdPanel=DLGError.getContentPane();
mPanel.setLayout(newFlowLayout(FlowLayout.LEFT));
dPanel.setLayout(newFlowLayout(FlowLayout.CENTER));
mPanel.add(H);
mPanel.add(hostname);
mPanel.add(P1);
mPanel.add(minPort);
mPanel.add(P2);
mPanel.add(maxPort);
mPanel.add(TNUM);
mPanel.add(maxThread);
mPanel.add(RST);
mPanel.add(Result);
mPanel.add(status);
mPanel.add(Submit);
mPanel.add(Cancel);
dPanel.add(DLGINFO);
dPanel.add(OK);
main.setVisible(true);
Submit.addActionListener(newSubmitAction());
Cancel.addActionListener(newCancleAction());
OK.addActionListener(newOKAction());
(2)按钮监听是整个程序的时间驱动设计部分。
并且显示运行结果。
数据处理是对用户输入的数据进行检验是否错误,来进行报错处理。
classCancleActionimplementsActionListener
publicvoidactionPerformed(ActionEvente)
{
System.exit
(1);
}
}
classSubmitActionimplementsActionListener
publicvoidactionPerformed(ActionEventa)
intmin;
intmax;
intnum;
try
{
min=Integer.parseInt(Scanner.minPort.getText());
max=Integer.parseInt(Scanner.maxPort.getText());
num=Integer.parseInt(Scanner.maxThread.getText());
}
catch(NumberFormatExceptione)
Scanner.DLGINFO.setText("
错误的端口号或线程数!
端口号和线程数必须为整数!
Scanner.DLGError.setVisible(true);
Scanner.status.setText("
return;
Saomiao.hostAddress=InetAddress.getByName(Scanner.hostname.getText());
catch(UnknownHostExceptione)
错误的IP地址/域名或地址不可达!
if(min<
0||min>
65535||min>
max)
最小端口必须是0-65535并且小于最大端口的整数!
else
Saomiao.minport=min;
if(max<
0||max>
65535||max<
min)
最大端口必须是0-65535并且大于最小端口的整数!
else
Saomiao.maxport=max;
if(num<
1||num>
200)
线程数为1-200的整数!
Scanner.Result.setText("
Scanner.Result.append("
正在扫描"
+Scanner.hostname.getText()+"
线程数"
+Scanner.maxThread.getText()+"
\n"
开放端口:
for(inti=0;
i<
num;
i++)
newSaomiao(i).start();
}
classOKActionimplementsActionListener
Scanner.DLGError.dispose();
(3)端口扫描程序主要运用Socket编程。
其工作过程包含以下四个基本步骤:
创建通信双方的socket链接,即分别为服务器和客户端创建Socket对象,建立Socket连接;
打开连接到Socket的输入流和输出流;
按照一定的协议对Socket进行读/写操作;
关闭连接。
staticclassSaomiaoextendsThread
publicstaticInetAddresshostAddress;
publicstaticintminport;
publicstaticintmaxport;
privateintthreadnum;
publicSaomiao(intthreadnum)
this.threadnum=threadnum;
publicvoidrun()
inti;
SockettheTCPsocket;
for(i=minport+threadnum;
i<
maxport;
i+=Integer.parseInt(Scanner.maxThread.getText()))
+i+"
端口"
try
{
theTCPsocket=newSocket(hostAddress,i);
theTCPsocket.close();
Scanner.Result.append("
+i);
switch(i)
{
case21:
Scanner.Result.append("
(FTP)"
break;
case23:
Scanner.Result.append("
(TELNET)"
case25:
(SMTP)"
case80:
(HTTP)"
case110:
(POP)"
case139:
(netBIOS)"
case161:
(SNMP)"
case443:
(HTTPS)"
case1433:
(SQL)"
case8000:
(OICQ)"
}
"
}catch(IOExceptione){}
if(i==maxport)
Scanner.Result.append("
+"
扫描完成..."
完成!
四、结果分析
运行要求与环境
(1)性能要求
实时性好、可靠性强、不占用系统太多的内存和存储空间。
(2)设计约束
开发工具:
J2SDK1.6.0Eclipse
运行环境:
Windows8
能实现用户所定义的各项需求。
运行程序流程图:
(1)Eclipse界面:
(2)程序初始界面:
(3)程序运行结果:
(4)IP地址报错:
(5)端口范围报错:
(6)线程数报错:
五、结论
在此次课程设计中,遇到了一些问题,如:
程序功能不能完全实现,对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;
对于Java语言,以前只学习到了一些最基本的知识,要在短时间内用Java语言来开发软件是一个较大的挑战;
对于开发软件的流程不熟悉,适应起来比较慢,编写需求说明书和设计规格说明书时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。
对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,多看些项目的源代码。
对于书上以及网站上下载的资料中的Java实例必须理解,还有多跟精通Java语言的老师和同学请教和交流,取其精华。
对于实际动手能力与软件开发的流程的适应,必须多进行实际的练习与操作,才能有所进步。
这次课程设计令我感受很多。
从拿到题目到编写Java程序;
然后请教别人慢慢研究琢磨;
从理论到实践;
从失败到成功;
忘不了我坐在电脑前苦苦思索,高温下熬夜地编程的疲惫;
忘不了因沉迷于编程却耽误了吃饭时间而挨饿辛酸;
忘不了……这其中了不少的东西,磨砺了我的意志;
同时还巩固了以前所学的知识,学到了不少书本上没有的知识;
学到了很多Java编程知识,并学会了简单的使用Eclipse来开发Java程序的一些使用技巧这次课程设计是对我本学期所学的知识的检验,由此我发现了不少的问题。
可以说它给了我一次自我评估的机会。
通过设计让我知道了那些方面我还是有欠缺的,促使我花时间弥补。
临近考试,时间太紧迫,致使程序实现的功能在方法上也许不是很完美,但我以后会多向老师请教,自己也要加强对Java的学习。
努力进一步提高自己的编程水平。
此次的课程设计,对我来说撰写文档似乎是一个更大的挑战。
撰写文档不仅要求我们要对自己程序非常熟悉:
程序的总体框架,功能,如何实现,存在什么问题等,同时还要求我们有清晰的思维和准确的表达能力以及严密的逻辑性。
因此,写完这篇文档对于我们自身来说自然是获益匪浅的。
参考文献
学生签名:
填表日期:
年月日
附件
/*基于多线程端口扫描程序源代码*/
import.*;
importjava.io.*;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassScanner
{
publicstaticJFramemain=newJFrame("
JButtonSubmit
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多线程 端口扫描 李梦然
![提示](https://static.bdocx.com/images/bang_tan.gif)