基于多线程的端口扫描程序课程设计报告.docx

上传人:b****5 文档编号:5896645 上传时间:2023-01-02 格式:DOCX 页数:18 大小:68.74KB
下载 相关 举报
基于多线程的端口扫描程序课程设计报告.docx_第1页
第1页 / 共18页
基于多线程的端口扫描程序课程设计报告.docx_第2页
第2页 / 共18页
基于多线程的端口扫描程序课程设计报告.docx_第3页
第3页 / 共18页
基于多线程的端口扫描程序课程设计报告.docx_第4页
第4页 / 共18页
基于多线程的端口扫描程序课程设计报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

基于多线程的端口扫描程序课程设计报告.docx

《基于多线程的端口扫描程序课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于多线程的端口扫描程序课程设计报告.docx(18页珍藏版)》请在冰豆网上搜索。

基于多线程的端口扫描程序课程设计报告.docx

基于多线程的端口扫描程序课程设计报告

滁州学院

课程设计报告

课程名称:

设计题目:

基于多线程的端口扫描程序

院部:

计算机与信息工程学院

专业:

网络工程

组别:

第六组

起止日期:

2012年12月31日~2013年1月6日

指导教师:

计算机与信息工程学院二○一二年制

课程设计题目

基于多线程的端口扫描程序

组长

学号

班级

院部

计算机与信息工程

专业

网络工程

组员

指导教师

课程设计目的

锻炼Java高级编程的能力

课程设计所需环境

PC,Windowsxp,JCretorPro

课程设计任务要求

使用Socket实现简单的端口扫描功能。

分别针对TCP和UDP,采用多线程技术实现端口扫描,给出扫描结果。

课程设计工作进度计划

序号

起止日期

工作内容

分工情况

1

分析题目,搜索相关资料。

2

整理相关资料,确定程序分工,布置任务。

3

编写程序代码。

4

调试改进程序。

5

编写课程设计报告与PPT

指导教师签字:

年月日

系(教研室)审核意见:

系(教研室)主任签字:

年月日

课程设计任务书

1需求分析

1..1网络安全

二十一世纪是信息化、网络化的世纪,信息是社会发展的重要资源。

信息安全保障能力是一个国家综合国力、经济竞争实力和生存能力的重要组成部分,是世界各国在奋力攀登的制高点。

网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭到破坏、更改、泄露,系统连续可靠正常地运行。

网络安全包括技术领域和非技术领域两大部分:

非技术领域包括一些制度、政策、管理、安全意识、实体安全等方面的内容;技术领域包括隐患扫描、防火墙、入侵检测、访问控制、虚拟专用网、CA认证、操作系统等方面的内容。

这些技术的目标是保证信息的可控性、可用性、保密性、完整性、和不可抵赖性。

端口扫描属于安全探测技术范畴,对应于网络攻击技术中的网络信息收集技术。

1.2课程背景

随着Internet的不断发展,信息技术已成为促进经济发展、社会进步的巨大推动力。

端口扫描技术是网络安全扫描技术一个重要的网络安全技术。

与防火墙、入侵检测系统互相配合,能够有效提高网络的安全性。

安全扫描是安全技术领域中重要的一类。

通过扫描能自动检测远端或本地主机系统信息,包括主机的基本信息(如计算机名、域名、组名、操作系统型等)、服务信息、用户信息以及漏洞信息,它的重要性在于能够对网络进行安全评估,及时发现安全隐患,防患于未然。

网络的安全状况取决于网络中最薄弱的环节,任何疏忽都有可能引入不安全的因素,最有效的方法是定期对网络系统进行安全分析,及时发现并修正存在的脆弱,保证系统安全。

国外安全扫描技术的历史可以追溯到20世纪90年代,当时因特网刚刚起步,但是在过去的十年内,扫描技术飞速发展,迄今为止,其扫描技术已经非常完善,但是在全面性,隐蔽性和智能性上还有待提高。

安全扫描从最初专门为UNIX系统而编写的一些只有简单功能的小程序发展到现在,已经出现了可以运行多个操作系统平台上的,具有复杂功能的系统程序。

国内的扫描技术是在国外的扫描器基础上发展起来的。

其中有一些专门从事安全技术的公司。

这些公司的扫描器以硬件为主,其特点是执行速度快,不像软件一样受到安装主机系统的限制。

然而对于更多的基于主机的端口扫描而言,简单,实用,可靠才是它们的长处。

1.3扫描器

扫描器是一种自动检测远程或本地主机安全性弱点的程序,通过使用扫描器你可以不留痕迹的发现远程服务器的各种TCP端口的分配。

这就能让我们间接的或直观的了解到远程主机所存在的安全问题。

为了保证网络中计算机的安全性,必须采取主动策略,快速、及时、准确、安全的检测出网络中计算机及防火墙开放的和未开放的端口。

计算机端口扫描技术就是这种主动防御策略实现的重要技术手段。

扫描器采用模拟攻击的形式对目标可能存在的已知安全漏洞进行逐项检查。

目标可以是工作站、服务器、交换机、数据库应用等各种对象。

然后根据扫描结果向系统管理员提供周密可靠的安全性分析报告,为提高网络安全整体水平产生重要依据。

在网络安全体系的建设中,安全扫描工具花费低、效果好、见效快、与网络的运行相对对立、安装运行简单,可以大规模减少安全管理员的手工劳动,有利于保持全网安全政策的统一和稳定。

1.4多线程扫描器介绍

在java中,组件放置在窗体上的方式是完全基于代码的。

组件放置在窗体上的方式通常不是通过绝对坐标控制,而是由“布局管理器”根据组件加入的顺序决定其位置。

每个容器都有一个属于的自己布局管理器。

使用不同的布局管理器,组件大小,位置和形状将大不相同。

表格型布局管理器将容器划分成为一个多行多列的表格,表格的大小全部相同,是由其中最大的组件所决定。

通过add方法可以将组件一一放在每个表格中。

表格包型布局与表格型布局有些相近,但与表格型布局比较起来,表格包型更加灵活,更加复杂。

通常表格包型布局,我们可以设定每个格子的大小,间隙等。

每个正在系统上运行的程序都是一个进程。

每个进程包含一到多个线程。

进程也可能是整个程序或者是部分程序的动态执行。

线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。

也可以把它理解为代码运行的上下文。

所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。

通常由操作系统负责多个线程的调度和执行。

线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程.

线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定.线程的运行中需要使用计算机的内存资源和CPU。

在计算机编程中,一个基本的概念就是同时对多个任务加以控制。

许多程序设计问题都要求程序能够停下手头的工作,改为处理其他一些问题,再返回主进程。

可以通过多种途径达到这个目的。

最开始的时候,那些掌握机器低级语言的程序员编写一些“中断服务例程”,主进程的暂停是通过硬件级的中断实现的。

尽管这是一种有用的方法,但编出的程序很难移植,由此造成了另一类的代价高昂问题。

中断对那些实时性很强的任务来说是很有必要的。

但对于其他许多问题,只要求将问题划分进入独立运行的程序片断中,使整个程序能更迅速地响应用户的请求。

最开始,线程只是用于分配单个处理器的处理时间的一种工具。

但假如操作系统本身支持多个处理器,那么每个线程都可分配给一个不同的处理器,真正进入“并行运算”状态。

从程序设计语言的角度看,多线程操作最有价值的特性之一就是程序员不必关心到底使用了多少个处理器。

程序在逻辑意义上被分割为数个线程;假如机器本身安装了多个处理器,那么程序会运行得更快,毋需作出任何特殊的调校。

根据前面的论述,大家可能感觉线程处理非常简单。

但必须注意一个问题:

共享资源!

如果有多个线程同时运行,而且它们试图访问相同的资源,就会遇到一个问题。

举个例子来说,两个线程不能将信息同时发送给一台打印机。

为解决这个问题,对那些可共享的资源来说(比如打印机),它们在使用期间必须进入锁定状态。

所以一个线程可将资源锁定,在完成了它的任务后,再解开(释放)这个锁,使其他线程可以接着使用同样的资源。

多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。

线程是在同一时间需要完成多项任务的时候实现的。

线程优先级被线程调度用来判定何时哪个线程允许运行。

理论上,优先级高的线程比优先级低的线程获得更多的CPU时间。

实际上,线程获得的CPU时间通常由包括优先级在内的多个因素决定(例如,一个实行多任务处理的操作系统如何更有效的利用CPU时间)。

一个优先级高的线程自然比优先级低的线程优先。

举例来说,当低优先级线程正在运行,而一个高优先级的线程被恢复(例如从沉睡中或等待I/O中),它将抢占低优先级线程所使用的CPU。

  理论上,等优先级线程有同等的权利使用CPU。

但你必须小心了。

记住,Java是被设计成能在很多环境下工作的。

一些环境下实现多任务处理从本质上与其他环境不同。

为安全起见,等优先级线程偶尔也受控制。

这保证了所有线程在无优先级的操作系统下都有机会运行。

实际上,在无优先级的环境下,多数线程仍然有机会运行,因为很多线程不可避免的会遭遇阻塞,例如等待输入输出。

遇到这种情形,阻塞的线程挂起,其他线程运行。

但是如果你希望多线程执行的顺利的话,最好不要采用这种方法。

同样,有些类型的任务是占CPU的。

对于这些支配CPU类型的线程,有时你希望能够支配它们,以便使其他线程可以运行。

多个线程同时读写同一份共享资源的时候,可能会引起冲突。

这时候,我们需要引入线程“同步”机制,即各位线程之间要有个先来后到,不能一窝蜂挤上去抢作一团。

同步的关键是管程,管程是一个互斥独占锁定的对象,在给定的时间,仅有一个线程获得管程,当一个线程需要锁定时,他必须进入管程。

1.5端口扫描

一个端口就是一个潜在的通信通道,也就是一个入侵通道。

对目标计算机进行端口扫描,能得到许多有用的信息。

进行扫描的方法很多,可以是手工进行扫描,也可以用端口扫描软件进行。

在手工进行扫描时,需要熟悉各种命令。

对命令执行后的输出进行分析。

用扫描软件进行扫描时,许多扫描器软件都有分析数据的功能。

通过端口扫描,可以得到许多有用的信息,从而发现系统的安全漏洞。

2概要设计

2.1整体框架设计

经过我们组员的思考很研究,得出了以下几个模块的简单端口扫描器,整个端口扫描器的核心模块是是端口扫描系统,它由许多子模块组成,其结构如下图所示:

2.2流程图描述

 

3详细设计

3.1端口扫描线程启动

扫描程序主要运用Socket编程。

对于一个工作齐全的Socket,其工作过程包含以下四个就基本步骤:

创建通信双方的socket链接,即分别为服务器和客户端创建Socket对象,建立Socket连接;打开连接到Socket的输入流和输出流;按照一定的协议对Socket进行读/写操作;关闭连接。

以下是程序代码

//运行扫描端口

publicvoidrun()

{

inti;

SockettheTCPsocket;

for(i

{

try

{

theTCPsocket=newSocket(hostAddress,i);

theTCPsocket.close();

switch(i)

{

case21:

break;

case23:

break;

case25:

break;

case80:

break;

case110:

break;

case139:

break;

}

}

catch(IOExceptione){}

}

if(i==MAX_port)

{

}

}

}

3.2GUI图形界面

图形用户界面是软件产品和用户交互的接口,是软件产品中用户直接可以看到并直接操作的部分。

publicclassThreadScan

{

publicstaticJFramemain=newJFrame("基于JAVA的多线程TCP端口扫描程序");

publicstaticJTextAreaResult=newJTextArea("",4,43);

publicstaticJTextFieldhostname=newJTextField("localhost",8);

publicstaticJTextFieldminPort=newJTextField("0",4);

publicstaticJTextFieldmaxPort=newJTextField("1000",4);

publicstaticJTextFieldmaxThread=newJTextField("100",3);

publicstaticJDialogDLGError=newJDialog(main,"错误!

");

publicstaticLabelDLGINFO=newLabel("");

publicstaticLabelstatus=newLabel("扫描状态:

未开始");

publicstaticvoidmain(String[]args)

{

main.setSize(500,220);

//main.setLocation(300,300);

main.setResizable(false);

DLGError.setSize(300,100);

DLGError.setLocation(400,400);

JPanelmainPanel=newJPanel();

LabelH=newLabel("ip或域名:

");

LabelP1=newLabel("端口范围:

");

LabelP2=newLabel("~");

LabelTNUM=newLabel("线程数:

");

LabelRST=newLabel("扫描结果:

");

Labelcon=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(con);

mPanel.add(Submit);

mPanel.add(Cancel);

mPanel.add(status);

dPanel.add(DLGINFO);

dPanel.add(OK);

main.setVisible(true);

Submit.addActionListener(newSubmitAction());

Cancel.addActionListener(newCancleAction());

OK.addActionListener(newOKAction());

}

}

3.3按钮监听及异常处理

本部分主要对各个按钮进行监听。

是整个程序的时间驱动设计部分。

并且显示运行结果。

classSubmitActionimplementsActionListener

{

publicvoidactionPerformed(ActionEventa)

{

intminPort;

intmaxPort;

intmaxThread;

try

{

}

catch(NumberFormatExceptione)

{

return;

}

try

{

}

catch(UnknownHostExceptione)

{

return;

}

if(minPort<0||minPort>65535||minPort>maxPort)

{

return;

}

elseTCPThread.MIN_port=minPort;

if(maxPort<0||maxPort>65535||maxPort

{

return;

}

elseTCPThread.MAX_port=maxPort;

if(maxThread<1||maxThread>200)

{

return;

}

for(inti=0;i

{

newTCPThread("T"+i,i).start();

}

}

}

4调试与操作说明

4.1运行界面

对本机进行多线程的端口扫描,即在ip或域名中输入localhost可对本机进行端口进行扫描,也可输入其他的ip地址或域名,可自行设置端口范围如从0到1000,最大不超过65535,可设置线程数范围为0~200,扫描状态为未开始,点击确定即可运行程序。

4.2扫描结果

程序运行后,可以得到相关的端口扫描过程,其中扫描状态显示正在扫描的端口号,如下:

程序运行结束后在扫描结果中显示扫描结束,并在扫描状态中显示完成。

4.3错误提示

程序中往往由于一些数据不正确会造成运行后错误,所以在程序中添加了异常处理机制,其中遇到的错误可能有以下几种:

当端口号或线程数不是整数时会出现如下错误:

当ip地址或域名错误时,会出现如下错误:

当最小端口数不在0~65535且不小于最大端口数时会出现如下错误:

当最大端口数不在0~65535且不大于最小端口数时会出现如下错误:

当线程数范围不在0~200时会出现如下错误:

5课程设计总结与体会

本组成员共同设计的基于多线程的端口扫描程序基本满足了课程设计的要求,能够很好地对本机或其他电脑端口进行扫描,同时也处理了程序中可能出现的错误。

本次课程设计,使我们对《计算机网络》这门课程有了更深入的理解。

《计算机网络》是一门实践性较强的课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。

要想把课程设计做的更好,就要学会参考一定的资料,吸取别人的经验,加强团队合作。

在本课程设计中,我们明白了理论与实际应用相结合的重要性,并提高了自己组织数据及编写大程序的能力。

培养了基本的、良好的程序设计技能以及合作能力。

这次课程设计同样提高了我们的综合运用所学知识的能力。

课程设计程序的编写需要有耐心,有些事情看起来很复杂,但问题需要一点一点去解决,分析问题,把问题模块化,划分成小块以后就逐个去解决。

再总体解决大的问题。

这样做起来不仅有条理也使问题得到了轻松的解决。

通过这段时间的课程设计,我们认识到《计算机网络》是一门比较难的课程。

需要多花时间学习。

这次的课程设计培养了我们实际分析问题、编程和动手能力,使我们掌握了计算机网络课程设计的基本技能,提高了我们适应实际,运用于实际生活的能力。

这次的课程设计提高了我们对于专业课的学习热情,使我们能够更加深入的理解课本内容,对《计算机网络》也有了进一步的理解和认识,同时也理解了将课本内容与实际生活相结合的好处。

6参考文献

[1]赵生慧.Java面向对象程序设计.北京:

中国水利水电出版社,2010。

[2]谢希仁.计算机网络(第五版).北京:

电子工业出版社,2011。

[3]吴功宜.计算机网络(第二版).北京:

清华大学出版社,2007。

[4]杨静宇.Java程序设计与应用开发(第2版)[M].北京:

清华大学出版社,2009。

7致谢

非常感谢老师耐心的指导,在实验过程中给出指导并给帮助分析思路,给我们提供了可行的方案设计思路,在实验过程中指出不足之处,为能够成功的完成课程设计做了很大的贡献;非常感谢各位组员的积极配合,一起分析题目,整理思路,努力思考解决方案,画出方案流程图,并进行了严密的算法分析,构造严谨的程序框架,然后各自完成自己负责的模块,最后一起整理出完整的程序,一起进行调试分析,评估程序的严谨性,找出不足。

完善实验内容,整理资料,编写文档。

8附录

源代码:

import.*;

importjava.io.*;

//importjava.util.*;

importjava.awt.*;

importjavax.swing.*;

classTCPThreadextendsThread

{

publicstaticInetAddresshostAddress;

publicstaticintMIN_port;

publicstaticintMAX_port;

privateintthreadnum;

publicTCPThread(Stringname,intthreadnum)

{

super(name);

this.threadnum=threadnum;

}

publicvoidrun()

{

inti;

SockettheTCPsocket;

for(i=MIN_port+threadnum;i

{

try

{

theTCPsocket=newSocket(hostAddress,i);

theTCPsocket.close();

switch(i)

{

case21:

break;

case23:

break;

case25:

break;

case80:

break;

case110:

break;

case139:

break;

}

}

catch(IOExceptione)

{}

}

if(i==MAX_port)

{

}

}

}

classCancleActionimplementsActionListener

{

publicvoidactionPerformed(ActionEvente)

{

System.exit

(1);

}

}

classSubmitActionimplementsActionListener

{

publicvoidactionPerformed(ActionEventa)

{

intminPort;

intmaxPort;

intmaxThread;

try

{

}

catch(NumberFormatExceptione)

{

return;

}

try

{

TCPThread.hostAddress=InetAddress.getByName

}

catch(UnknownHostExceptione)

{

return;

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

当前位置:首页 > 初中教育 > 语文

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

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