多线程端口扫描—李梦然

上传人:z**** 文档编号:169682543 上传时间:2022-11-16 格式:DOCX 页数:19 大小:221.51KB
返回 下载 相关 举报
多线程端口扫描—李梦然_第1页
第1页 / 共19页
多线程端口扫描—李梦然_第2页
第2页 / 共19页
多线程端口扫描—李梦然_第3页
第3页 / 共19页
点击查看更多>>
资源描述
计算机网络课程课程设计任务书学院计算机与信息工程专业网络工程课程名称计算机网络题目基于多线程的端口扫描 程序完成期限自2014年6月9日至2014年6月16日 共1周内 容 及 任 务一、项目的目的掌握Socket的基本功能,锻炼Java高级编程的能力。二、项目任务的主要内容和要求使用Socket实现简单的端口扫描功能。分别针对TCP和 UDP,采用多线程技术实现端口扫描,给出扫描结果。实现本 程序需要了解网络基础知识、网络安全基础知识,掌握C/S结 构的工作特点,掌握高级语言及网络编程知识,可以选择Visual C+、C或Java等语言实现。三、项目设计(研究)思路设计信息检测模块检测IP地址,再采取匹配过滤原则筛选 进程端口,利用Socket实现简单的端口扫描功能,最后检测信息 是否符合要求。四、具体成果形式和要求(1) 给出程序的流程图;(2) 给出程序源码;(3) 给出程序的部分运行测试结果。进 度 安 排起止日期工作内容6月13日至6月14日分析题目,搜索相关资料,整理相关资料,确 定程序分工6月15日至6月17日编写程序代码,调试改进程序。6月18日至6月19日编写课程设计报告。主要参考资料1 赵生慧Java面向对象程序设计.北京:中国水利水电出版社, 2010。2 谢希仁.计算机网络(第五版).北京:电子工业出版社,2011。 杨静宇.Java程序设计与应用开发(第2版)M.北京:清华大 学出版社,2009。指导教师 意见(签字):X年X月X日系(教研 室)主任意 见(签字):X年X月X日计算机网络设计说明书学院名称:计算机与信息工程学院班级名称:网络工程122班学生姓名:李梦然学号:2012211428题目: 基于多线程的端口扫描程序指导教师姓 名:张燕玲起止日期: 2014年6月13日至2014年6月20日一、选题背景随着互联网的飞速发展,网络入侵行为日益严重,网络安全成为人们关注 的焦点。端口扫描技术是网络安全扫描技术的重要技术之一。对目标系统进行 端口扫描,是网络系统入侵者进入目标系统的第一步。网络安全探测在网络安 全中起着主动防御的作用,占有非常重要的地位。网络安全探测的所有功能都 是建立在端口扫描的基础上,所以对端口扫描技术的研究有着非常重要的现实 意义。现实世界中的很多过程都具有多条线索同时动作的特性Java语言的一大 特性就是内置对多线程的支持。多线程是指同时存在几个执行体,按几条不同 的执行线索共同工作的情况,它使得编程人员可以很方便地开发出具有多线程 功能、能同时处理多个任务的功能强大的应用程序。端口是由计算机的通信协议TCP/IP协议定义的。其中规定,有IP地址和 端口号作为套接字,它代表TCP连接的一个连接端,一般称为Socket。具体来 说,就是用IP:端口来定位一台主机的进程。可见端口与进程是一一对应的,如果某个进程正在等待连接,称之为该进 程正在监听,那么就会出现与它相对应的端口。由此可见,通过扫描端口,就 可以判断出目标计算机有哪些通信进程正在等待连接。利用TCP connect扫描原理,扫描主机通过TCP/IP协议的三次握手与目标 主机的指定端口建立一次完整的连接,如果目标主机该端口有回复,则说明该 端口开放。利用多线程技术实现了对一目标 IP 进行设定数目的端口扫描,对 多 IP 段的特定端口进行扫描。二、方案设计多线程端口扫描器是实现计算机的端口的扫描,只要在在前台设置好所要 扫描的IP、起始端口、结束端口以及所要用到的线程数,点击扫描,就可以扫 描到所输入 IP 地址主机的开放端口,并显示在主窗体中;点击退出,则可以 退出该程序。IP设置应为所在主机的IP地址,起始端口和结束端口应为065535 之间的一个数,且起始端口应小于结束端口的大小。线程数为 0200 之间的一 个数。点击开始后就会运行,直到扫描完毕显示出开放端口,如果没有开放端 口,则只显示扫描完毕。本系统要实现的功能: 端口扫描功能:扫描开放的端口,并将扫描到的开放端口号送到前台。 图像显示功能:显示图形界面,以及显示扫描结果。 多线程功能:当客户端要求与服务器端建立连接时,服务器端就将用 到多线程功能,为每一个建立起来的连接创建一个线程。 异常抛出功能:对于明显的数据错误,能提示出错误的类型并阻止程 序的运行。流程图:三、详细设计本程序是由 3 模块组成的:图形界面,按钮的监听及数据检验,端口扫描(1)图形用户界面是软件产品和用户交互的接口,是软件产品中用户直接 可以看到并直接操作的部分。public staticJFrame main=new JFrame(基于JAVA的多线程TCP端口扫描程序李梦然);publicpublicpublicpublicpublicstaticstaticstaticstaticstaticJTextArea Result=new JTextArea(,4,44);JTextFieldJTextFieldJTextFieldhostname=new JTextField(localhost,8);minPort=new JTextField(0,4);maxPort=new JTextField(1000,4);publicpublicstaticstaticpublic public staticmaxThread=new JT e xt Fie ld ( 100 ,3);JDialog DLGError=new JDialog(main,错误!); Label DLGINFO=new Label();Label status=new Label(扫描状态:未开始);JTextFieldScanner()main.setSize(500,220);main.setLocation(350,300);main.setResizable(false);DLGError.setSize(300,100); DLGError.setLocation(450,400); Result.setBackground(Color. pink);JPanel mainPanel = new JPanel();Label H=new Label(ip:);Label Pl=new Label(端口范围:);Label P2=new Label();Label TNUM=new Label(线程数:);Label RST=new Label(扫描结果:);Result.setLineWrap( true);Result.setEditable( false);JBu tton OK = new JButto n(确定);JBu tton Subm it = new JButto n(确定);JBu tton Cancel = new JButto n(取消);Container mPanel = main.getContentPane();Container dPanel = DLGError.getContentPane(); mPanel.setLayout(new FlowLayout(FlowLayout. LEFT); dPanel.setLayout(new FlowLayout(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( new SubmitAction(); Cancel.addActionListener(new CancleAction();OK.addActionListener(new OKAction();(2)按钮监听是整个程序的时间驱动设计部分。并且显示运行结果。数据 处理是对用户输入的数据进行检验是否错误,来进行报错处理。class CancleAction implements ActionListenerpublic void actionPerformed (ActionEvent e)System.exit(1);class SubmitAction implements ActionListenerpublic void actionPerformed (ActionEvent a)int min;int max;int num;trymin=Integer.parseInt(Scanner.minPort.getText();max=Integer.parseInt(Scanner.maxPort.getText();num=Integer.parseInt(Scanner.maxThread.getText();catch(NumberFormatException e)Scanner.DLGINFO.setText (错误的端口号或线程数!端口号和线程数必须为整数!);Scanner. DLGError.setVisible(true);Scanner. status.se tTex t(扫描状态:未开始);return;trySaomiao. ho s tAddre s s =In e tAdd r e s s . getByName(Scanner. hostname.getText();catch(UnknownHostException e)Scanner.DLGINFO.setText(错误的IP地址/域名或地址不可达!);Scanner. DLGError.setVisible(true);Scanner. status .se tTex t(扫描状态:未开始);return;if(min65535 | minmax)Scanner. DLGINFO .se tTex t(最小端口必须是0 -65535并且小于最大端口的整数!);Scanner. DLGError.setVisible(true);return;elseSaomiao.minport=min;if(max65535 | maxmin)Scanner. DLGINFO.se tTex t(最大端口必须是0 -65535并且大于最小 端口的整数!);Scanner. DLGError.setVisible(true);Scanner. status .se tTex t(扫描状态:未开始);return;elseSaomiao. maxport =max;if(num200)Scanner.DLGINFO.setText( 线程数为1-200的整数! );Scanner. DLGError.setVisible(true);Scanner. status .se tTex t(扫描状态:未开始);return;Scanner. Result.setText();Scanner. Result .append(正在扫描+Scanner. hostname.getText()+ 线程数+Scanner.maxThread.getText()+n);Scanner. Result .append(开放端口: );for(int i=0;inum;i+)new Saomiao(i).start();class OKAction implements ActionListenerpublic void actionPerformed (ActionEvent e)Scanner. DLGError.dispose();(3)端口扫描程序主要运用 Socket 编程。其工作过程包含以下四个基本步 骤:创建通信双方的 socket 链接,即分别为服务器和客户端创建 Socket 对象, 建立 Socket 连接;打开连接到 Socket 的输入流和输出流;按照一定的协议对 Socket 进行读/写操作;关闭连接。static class Saomiao extends Threadpublic static InetAddress hostAddress;public static int minport;public static int maxport;private int threadnum;public Saomiao(int threadnum)this.threadnum = threadnum;public void run()int i;Socket theTCPsocket;for (i = minport+threadnum; i maxport; i += Integer.parseInt(Scanner.maxThread.getText()Scanner.status.se tTex t(扫描状态:正在扫描 +i + 端口 ); trytheTCPsocket= new Socket( hostAddress ,i); theTCPsocket.close();Scanner. Result.append( +i);switch(i)case 21:Scanner.Result.append(FTP);break;case 23:Scanner. Result .append(TELNET); break;case 25:Scanner. Result .append(SMTP);break;case 80:Scanner. Result .append(HTTP);break;case 110:Scanner. Result.append(POP); break;case 139:Scanner.Result.append(netBIOS); break;case 161:Scanner.Result.append(SNMP); break;case 443: Scanner.Result.append(HTTPS); break;case 1433: Scanner.Result.append(SQL); break;case 8000: Scanner.Result.append(OICQ); break; Scanner.Result.append(,);catch (IOException e)if (i=maxport)Scanner. Result .append(n + 扫描完成.); Scanner. status .se tTex t(扫描状态:完成 !);四、结果分析运行要求与环境(1)性能要求 实时性好、可靠性强、不占用系统太多的内存和存储空间(2)设计约束开发工具:J2SDK 1.6.0 Eclipse运行环境: Windows 8能实现用户所定义的各项需求。运行程序流程图:(1)Eclipse 界面:nrill- EdiRctiaar SJwJwFrajKi AunH*- 管竝誉u (J *补 4p卡占 dLMEH-Kl-wnq3 ire出 kJeS/l MtfcW!越 MCTijarTD JHE 裁man Lia-jry JrnLt I Kl:opc-rt:gOfC iMWFt IEJPDET Flac:*n .曲匸-; 3.4 I B ijai-aJBVJIX.JHg-,i|i:clun 3cun=IpODllP obLla PUE-L-IC ptibL-l EEflhllP -dc-Lici pabLic FobLiciIpODLl?SMthCMUChd UT3CHtati-E lUChC irhJCfie品血上Ktiiraer JFiukL澄干嵇lEHFitt口曰峥牴.帘X学节蠹打 JTMElEifal.rjfahV JT-HiElXWi B *z 4 ! 44.1 .1flZEuKuLn-Iri h=!pL0i: J Si J TDxJLlAf IjiZETJCiEMV|3jAUv1 J fu.r.JiiEJiu | MO, 9-3); uzn-JiatZs-sau口口3讯*34口| : USHa JCC-?C3llEalll=:!(r-31Kj F 见SE星E2fI工=yray. MLccLTiaa EAr iCf&j .: RarEl: .Edaukqnouari i/Zcl-as .pj.nfc.1; JPant LJPin*L 11-:性Hl 直二t hcLLirna /T* 44 S rtanPWE . JCa1 a 口 ES伽.Rm* EpZ.d i4 1 CLIaEmsr : JDhH S ELGIVa . Ubl a 8 W1j5 iJhiH I. *dknReHV* HdiariWil* hovttidnl* s mh pan . i& S nupivi a Ft亡 deV ruiU : .etc v眄阿“存THSfeMOEJ_ PrataiirTd 日酋 DHUraia 曰 Dcrada =;Swd tXi2)程序初始界面:基于JAVA的事线程TCP端口扫描程序李梦然ip:localhost|端口范围:|1000线程数:扫扼结果:扫插伏态:未开始确定匪消3)程序运行结果:基于JAVA的宰线程TCP端口扫JS程序、李梦然ip:localhost|端口范围:|1000线程数:扫描结果: 正在扫描localhost 程数口。开啟端口 : 135. 445.扫描完咸扫描状态:正在扫描959端口匪涓(4)IP地址报错:5)端口范围报错:ip: localhost666666绒程数:100扫抽结果:扫描狀态:未开始6)线程数报错:五、结论在此次课程设计中,遇到了一些问题,如:程序功能不能完全实现,对于 面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于 Java 语言,以前只学习到了一些最基本的知识,要在短时间内用 Java 语言来开 发软件是一个较大的挑战;对于开发软件的流程不熟悉,适应起来比较慢,编 写需求说明书和设计规格说明书时,自己感觉难以动手,这表明所学的知识不 能灵活运用到实际中。对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书 籍,多看些项目的源代码。对于书上以及网站上下载的资料中的 Java 实例必 须理解,还有多跟精通Java语言的老师和同学请教和交流,取其精华。对于实 际动手能力与软件开发的流程的适应,必须多进行实际的练习与操作,才能有 所进步。这次课程设计令我感受很多。从拿到题目到编写 Java 程序;然后请教别 人慢慢研究琢磨;从理论到实践;从失败到成功;忘不了我坐在电脑前苦苦思索,高温下熬夜地编程的疲惫;忘不了因沉迷于编程却耽误了吃饭时间而挨饿 辛酸;忘不了这其中了不少的东西,磨砺了我的意志;同时还巩固了以前 所学的知识,学到了不少书本上没有的知识;学到了很多Java编程知识,并学 会了简单的使用 Eclipse 来开发 Java 程序的一些使用技巧这次课程设计是对我 本学期所学的知识的检验,由此我发现了不少的问题。可以说它给了我一次自 我评估的机会。通过设计让我知道了那些方面我还是有欠缺的,促使我花时间 弥补。临近考试,时间太紧迫,致使程序实现的功能在方法上也许不是很完美, 但我以后会多向老师请教,自己也要加强对 Java 的学习。努力进一步提高自 己的编程水平。此次的课程设计,对我来说撰写文档似乎是一个更大的挑战。撰写文档不 仅要求我们要对自己程序非常熟悉:程序的总体框架,功能,如何实现,存在 什么问题等,同时还要求我们有清晰的思维和准确的表达能力以及严密的逻辑 性。因此,写完这篇文档对于我们自身来说自然是获益匪浅的。参考文献1 赵生慧Java面向对象程序设计.北京:中国水利水电出版社,2010。2 谢希仁.计算机网络(第五版).北京:电子工业出版社, 2011。 杨静宇.Java程序设计与应用开发(第2版)M.北京:清华大学出版社,2009。学生签名:填表日期: 年 月 日附件/*基于多线程端口扫描程序源代码*/import .*;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Scannerpublic李梦然);publicpublicpublicpublicpublicstaticstaticstaticstaticstaticstaticJFrame main=new JFrame(基于JAVA的多线程TCP端口扫描程序JTextArea Result=new JTextArea(,4,44);JTextFieldJTextFieldJTextFieldhostname=new JTextField(localhost,8);minPort=new JTextField(0,4);maxPort=new JT e xt Fie ld ( 1000 ,4);publicpublicstaticstaticpublicpublicstaticmaxThread=new JT e xt Fie ld ( 100 ,3);JDialog DLGError=new JDialog(main,错误!); Label DLGINFO=new Label();Label status=new Label(扫描状态:未开始);JTextFieldScanner()main.setSize(500,220); main.setLocation(350,300); main.setResizable( false);DLGError.setSize(300,100); DLGError.setLocation(450,400);Result.setBackground(Color.pink);JPanel mainPanel = new JPanel();Label H=new Label(ip:);Label Pl=new Label(端口范围:);Label P2=new Label();Label TNUM=new Label(线程数:);Label RST=new Label(扫描结果:);Result.setLineWrap(true); Result.setEditable(false);JBu tton OK = new JButto n(确定);JBu tton Subm it = new JButto n(确定);JBu tton Cancel = new JButto n(取消);Container mPanel = main.getContentPane();Container dPanel = DLGError.getContentPane(); mPanel.setLayout( new FlowLayout (FlowLayout.LEFT) ) ; dPanel.setLayout( new FlowLayout (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( new SubmitAction();Cancel.addActionListener( new CancleAction();OK.addActionListener( new OKAction();public static void main(String args)new Scanner();class CancleAction implements ActionListenerpublic void actionPerformed (ActionEvent e)System.exit(1);class SubmitAction implements ActionListenerpublic void actionPerformed (ActionEvent a)int min;int max;int num;trymin=Integer.parseInt(Scanner.minPort.getText();max=Integer.parseInt(Scanner.maxPort.getText();num=Integer.parseInt(Scanner.maxThread.getText();catch(NumberFormatException e)Scanner.DLGINFO.setText (错误的端口号或线程数!端口号和线程数 必须为整数!);Scanner.DLGError.setVisible(true);Scanner. status .se tTex t(扫描状态:未开始); return;try Saomiao. ho s tAddre s s =In e tAdd r e s s . getByName(Scanner. hostname.getTex t();catch(UnknownHostException e)Scanner.DLGINFO.setText(错误的IP地址/域名或地址不可达!);Scanner. DLGError.setVisible(true);Scanner. status .se tTex t(扫描状态:未开始); return;if(min65535 | minmax)Scanner. DLGINFO .se tTex t(最小端口必须是0 -65535并且小于最大 端口的整数!);Scanner. DLGError.setVisible(true);return;elseSaomiao. minport =min;if(max65535 | maxmin)Scanner. DLGINFO .se tTex t(最大端口必须是0 -65535并且大于最小 端口的整数!);Scanner. DLGError.setVisible(true);Scanner. status .se tTex t(扫描状态:未开始); return;elseSaomiao. maxport =max;if(num200)Scanner.DLGINFO.setText( 线程数为1-200的整数!);Scanner. DLGError.setVisible(true);Scanner. status .se tTex t(扫描状态:未开始); return;Scanner.Result.setText(); Scanner. Result .append(正在扫描+Scanner. hos tname . getText ( )+ 线程数+Scanner. maxThread . getText ( )+ n );Scanner. Result .append(开放端口: );for( int i=0;inum;i+)new Saomiao(i).start();class OKAction implements ActionListenerpublic void actionPerformed (ActionEvent e)Scanner. DLGError.dispose();static class Saomiao extends Threadpublic static InetAddress hostAddress;public static int minport ;public static int maxport ; private int threadnum;public Saomiao( int threadnum)this.threadnum = threadnum;public void run()int i; Socket theTCPsocket;for (i = minpor t+th r e a dnum ; i maxport; i +=Integer. parseInt(Scanner. maxThread . getText ( ) ) )Scanner.status.se tTex t(扫描状态:正在扫描 +i + 端口 ); trytheTCPsocket=new Socket(hostAddress,i); theTCPsocket.close();Scanner.Result.append( +i);switch(i)case 21:Scanner.Result.append(FTP);break;case 23: Scanner.Result.append(TELNET); break;case 25: Scanner.Result.append(SMTP); break;case 80: Scanner.Result.append(HTTP); break;case 110: Scanner.Result.append(POP); break;case 139: Scanner.Result.append(netBIOS); break;case 161: Scanner.Result.append(SNMP); break;case 443: Scanner.Result.append(HTTPS); break;case 1433: Scanner.Result.append(SQL); break;case 8000: Scanner.Result.append(OICQ); break; Scanner.Result.append(,);catch (IOException e)if (i=maxport)Scanner. Result .append(n + 扫描完成.);Scanner. status .se tTex t(扫描状态:完成 !);
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑环境 > 建筑资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!