多线程端口扫描程序设计与实现_第1页
多线程端口扫描程序设计与实现_第2页
多线程端口扫描程序设计与实现_第3页
多线程端口扫描程序设计与实现_第4页
多线程端口扫描程序设计与实现_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中南大学《计算机网络》

课程设计报告题目多线程端口扫描程序设计与实现学生XX孙毅指导教师X嫔学院信息科学与工程学院专业班级信息安全1401完成时间2016/10/19目录第一章需求分析1设计任务与要求1系统功能描述1功能概述1本系统要实现的功能1第二章总体设计22.1总体分析22.1界面设置构思图2界面使用设置构思3后台设计构思4第三章详细设计5界面设计5界面设计图5后台设计6第四章调试分析与运行结果114.1运行环境与要求124.2运行程序流程图124.3运行界面13第五章课程设计总结19第六章参考文献20第七章附录21第一章需求分析设计任务与要求本设计要求完成一个多线程端口扫描程序的设计与实现,具有易用、美观的界面。功能要求:能够对本地或远程主机进行端口扫描。能够对制定端口段进行扫描。能够扫描制定IP地址X围内哪些主机开放了特定端口,如常见的TCP端口FTP(21)等。使用TCPconnect进行端口扫描;使用TCPSYN进行端口扫描;使用ICMPecho扫描实现IP扫描;能把扫描结果记录保存下来。系统功能描述功能概述多线程端口扫描器是实现计算机的端口的扫描,只要在在前台设置好所要扫描的IP、起始端口、结束端口以及所要用到的线程数,点击扫描,就可以扫描到所输入IP地址主机的开放端口,并显示在主窗体中;点击退出,则可以退出该程序。IP设置应为所在主机的IP地址,起始端口和结束端口应为0〜65535之间的一个数,且起始端口应小于结束端口的大小。线程数为0~200之间的一个数。点击开始后就会运行,直到扫描完毕显示出开放端口,如果没有开放端口,则只显示扫描完毕。本系统要实现的功能端口扫描功能:扫描开放的端口,并将扫描到的开放端口号送到前台图像显示功能:显示界面图形。多线程功能:当客户端要求与服务器端建立连接时,服务器端就将用到多线程功能,为每一个建立起来的连接创建一个线程。异常抛出功能:对于明显的错误,能提示出错误的类型并结束程序的运行。第二章总体设计2.1总体分析本程序分为前后台系统,后台系统用于扫描主机开放端口,并把节扫描的数据送至前台窗口显示;前台要显示扫描的结果,所以应为一个窗口,这个窗口应能够设置主机的IP地址,设置端口的开始端口、结束端口和线程数,并且还能够显示扫描的状态。在中央是显示结果的窗体。本程序还应能够有控制扫描的状态命令,附加设置最小化和关闭按钮。2.1界面设置构思图

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

图2系统构思流程图后台设计构思后台系统使用Scanner和Scan类,创建前台布局和创建扫描端口、事件处理,并且能对简单的错误进行判断,显示错误原因。调用数据处理包,处理异常情况;调用皮肤包,美化显示窗口。第三章详细设计界面设计本程序界面图形设计要能清楚显示扫描后的结果,并且能很好的体现出界面的整洁大方,但并不失去吸引人眼球的画面,所以在做界面的时候考虑了界面的色彩,并且添加了皮肤,界面上面的字体设置和windows窗口设置一样采用宋体,界面上的按钮不设置过多的按钮,仅设置有必要的按钮即可,界面设置大方。使用的时候有默认的IP地址、需要扫描的端口和线程数,如果需要扫描其他主机,只需要填写好要扫描的主机的IP地址,需要扫描的端口X围和线程数,单击命令提示按钮就可以开始扫描,扫描结果就会显示在中间的扫描结果显示区域,在扫描状态显示区就会显示是否扫描完毕。界面设计图本程序采用小窗口形式,外围大小为700mm*700mm,结果显示字幕为主机地址加开放端口。添加个性皮肤。其余地方设置按钮和扫描的主机地址、端口和线程数。设计的预计页面图形如图:

图3系统界面设计图后台设计本程序使用了为主要的Scanner2类和ScanTcpConnect类。ScanTcpConnect类的作用是创建线程扫描端口,然后把结果显示到前台。Scanner2类的作用是构造前台布局,调用ScanTcpConnect类添加事件处理,对输入进行错误判断,如果输入不在允许的X围之内则显示相关错误。在本程序中用到了网络编程的两个类,下面介绍这两个类的常用方法。InetSocketAddress类构造方法如下:InetSocketAddress(InetAddressaddr,intport):根据IP地址和端口号创建套接字地址。InetSocketAddress(intport):创建套接字地址,其中IP地址为通配符地址,端口号为指定值。InetSocketAddress(Stringhostname,intport):根据主机名和端口号创建套接字地址。Socket类常用方法如下:Socket():通过系统默认类型的Socketlmpl创建未连接套接字Socket(InetAddressaddress,intport):创建一个流套接字并将其连接至ij指定IP地址的指定端口号。voidbind(SocketAddressbindpoint):将套接字绑定到本地地址。voidclose():关闭此套接字。voidconnect(SocketAddressendpoint):将此套接字连接到服务器。voidconnect(SocketAddressendpoint,inttimeout):将此套接字连接至ij具有指定超时值的服务器。booleanisClosed():返回套接字的关闭状态。booleanisConnected():返回套接字的连接状态。本程序还调用其他的一些类和包,比如软件包java.awt.color、java.awt.event、io.IOException、Javax.Swing、jvnet.substance.*。java.awt.color包的的描述:提供用于颜色空间的类。它包含了基于国际色彩联盟(ICC)配置文件格式规X的颜色空间实现。它还包含了基于ICC配置文件格式规X的颜色配置文件。用来使界面更加具有色彩。Result.setBackground(Color.PINK);//设置窗口为粉红java.awt.event的描述:提供处理由AWT组件所激发的各类事件的接口和类。事件由事件源所激发,向事件源注册的事件侦听器可接收有关特定事件类型的通知。此包定义了事件和事件侦听器,以及事件侦听器适配器,它是让事件侦听器的编写过程更为轻松的便捷类。在本程序中使用:publicvoidactionPerformed(ActionEvente){Stringcmd=e.getActionmand();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组件:按钮:utton文本区:JTextArea文本字段:JTextField在本程序中使用如下://设置主窗体位置和大小Fram.setSize(700,700);//设置主窗体大小//添加窗口监听,使之可以关闭窗口Fram.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);}});//设置扫描按钮和退出按钮//Tcpconnect扫描按钮Tcp_connec.setBounds(17,313,140,30);Tcp_connectsetActionmand("Tcp_connect");//设置utton的属性值Tcp_connec.addActionListener(this);//监听按钮的行为//TcpSYN扫描按钮Tcp_SY.setBounds(17,363,140,30);Tcp_SYNsetActionmand("Tcp_SYN");//设置utton的属性值Tcp_SYNaddActionListener(this);//监听按钮的行为//Icmpecho扫描按钮ICMP_ech.setBounds(17,413,140,30);ICMP_echosetActionmand("ICMP_echo");//设置utton的属性值ICMP_echoaddActionListener(this);//监听按钮的行为//退出扫描按钮Exit.setBounds(17,463,140,30);Exit.setActionmand("Exit");Exit.addActionListener(this);■上丫门e15口6$12门©3.*:目的是提供一个流行的外观(look&feel)。//设置窗体皮肤SubstanceAutumnLookAndFeel.setSkin(newFieldOfWheatSkin());第四章调试分析与运行结果

4.1运行环境与要求(1)性能要求实时性好、可靠性强、不占用系统太多的内存和存储空间。(2)设计约束开发工具:jdk1.8.0_102Eclipsejee名称jdk1.fl.0_1名称jdk1.fl.0_102jrel.fl.O1022016/7/2423:34文件夹2016/7/2423:34文件夹图四开发工具运行环境:Windows10能实现用户所定义的各项需求。4.2运行程序流程图图4流程图4.3运行界面未扫描状态:图6未扫描状态:图6运行界面未扫描状态图国计凶.帆网已理、菽:各,梃恤口扫庐位直14CM起始尸扫描求盅扫褐其欣:拧描皓K127.0.D.11D12T.0.0.1丁白。SYH(3闹仁"1叩日匚力口扫期1遍出扫庙保存籍班:I11i1111111£220-Z2Z222n--■■--aa-]as1--sn--sn--■a--aa-]3«n--■11目目目II口口口|I目目目IlnlIJg□loFZIFapzm明岂M囱raMHSHSHEEraft.SL-9AU-P9pqHr-CMHrdaUr6-PQ-99Hr-CMurQ用rprIrFFrppprpprrFFFPl器t,ltjn£t:tt:lt,tctjnitt;□ODD□□oDo□o□o□□□□o□o9o]£n-45KT0q-oi234E67B9Euni/专•lu1iFe.ur^I口吕口口目口口口口口口金南甬出西两国S两■■UT.-V---Q..AM-PAHaP4FS.XHCQ■■UKS76901234567B911122Z3Z2ZSZ2□II目目目II口urlI』IFIFlFl^lFlplFwnrafiPS禺■■Ur6-PQ-99Pg-CMHrdaurQTprpprrrprPFPtt:lt,ltjnitjt;tt:□o□o□□□□o□o□o□oooon-on-on-o□,u7.7.,7.,7.7.r.,.22222E2z2E2z2乩In.仇乱见^"就见yLE也In.------UJE三一二一二二一-二-二f~£---anrmntnltltnlntnnt01113Topconnect扫jfii站束尸站里辅口 2£i起始淋口些程蚣| q谙求身时| 20asfzflS12T瓶口:102127.0:127.02127.0S1ZT.Q2127.0B127.0:127.0B1E7.0;127.02127.□;127.02127.0;127.02127.□s1ST.021:E7.0E1Z7.0:127.0s127.□;127.0^FiE!-/.l-F^rT的MExlE燕力...nF.1.;...「..r_F..nF..弓正常扫描后状态:图7运行界面正常扫描状态图拧拇状您扫描完成Innmnnnn吕口

国园昌?E-g?gfg阖DolEsasGFBQ-12222Z2EEE3比瑞青肉驾驾为

tiii-

□□目目目吕口L4IIL4I—IL——IMsbIml—

rFrFPFFrFrFFF

IJCUccC_LccCCEc

TrTTTTrTTTrTrDODODDDDDDODO□oao-un-OOOOODO上封TI.场口扫后起拈尸*吉京IF起始端口砧京笳口毓在她逋半起时起始端口设置有误扫描开始后状态报错:图8运行界面起始端口设置错误报错图结束端口设置有误扫描开始后状态报错:lull111i11i1i1i11DIIJ匚匚CIUCIJIJIJ]_w7tt77777777777777777o□口口口□门口口口口口OQ□□Do口口口T.D-UDn-oo-u□

21

1:777777T

SJ-£222Z22

^LL1111111口□□o-uooDOD-U□T7777T77777T—

2£zE2ZEE2s£z茁

lillllllllil^As--3■--Bs---Sa--i--IB--■■->9I:§

--B-----------------------------------------------------------Md.

n^--=-n-=-==-三-三三一==三三三-=-n-=-n-r-==FFFFrprpprFrFrCCCCCECCCCCCC7777777777777n口目目目吕-D.A.4LW4b.d-fi.dDTcpco-mn-wzli4三1国01™s-45erA-332=22E2E2s□DODOnoQOQn-on1E7.01Z7.□1£7.0127.□1£7.0127.□1E7.0127.口1ZT.0127.口1ZT.口1£7.01Z7.□图9运行界面结束端口设置错误报错图I€MP«chofqm二点点点点点点点点点点-

nnnnnnnnnnnSQJE34EaTBg1ZZZ2ZZZZZ2ft-ol£34K-H-7A-ft--M-1234_■■Hnmm2222o^_黯省:吕□吕吕lsils:ls:lg:出FFFFFFFFFFFFFFFFFFFF

nnnummum

ooooooooooooooooooooo

7.0:cl.IJ.cl.d«J.cl.cl.IJ.IJ.cl.cl.cl.«J.cl.cl.IJ._ilo:cl.cl.

2l

1:77777777777777777777—

222222220^2222222222个忒.'J起循尸tt*IP起,加剧1=1结辛泄CH域理的:由市也日寸TcpconneneI 娴i□□□□□□□□□□□□□

ddddddddddddd

77777777^7777

sssssssssssssilii线程数设置错误报错:图10运行界面线程数设置错误报错图正常运行:国翱耳机网电课漫;笋旗程苏口扫描 怡安0LIIJ:127.:1ST.z127..0.D.0000:127.:127.z1ST.s127.0.□□■1127.:130:1£7.0..0.0.DE127.□.□扫描状在扫程式成!孙祝CSU — X扫描培用=,•=1■,,•■)=31•.*=/331*1■■二J1二二UJELLI-二二二二------EFTT0^11起始「127FLD.101234567093333333333JI111111-1i1JJJr■??HMTMTJ-k??HMT-.口吕口口口口口口口博牌费由0SIE牌费再01234E67e_y-M-□33333-J3333■■4111ill1111物1J..—T.西ITilnlleJ-lTQ-Q-D.rAM.i?¥??Drrg.^FFFFPFFFEF1卷黑TJTT卷TrTJ1Z7.D.D.11301日口起始曲口州克胸口线程物20DD请求超时Tcpconffi&ct归师为为对为为淘s.s^sf.3^-口口口口口□口口目-QrAHrAVXVxu-Q-Q.r4r9,xy

FFPFFFFEFFTCTCTCTCICTCTCTCTCTC:127.0.D.1:127.0.D.1:127.0.D.1:127.0.□.1I:127.0.D,1:127.0.D.1:127.0.D.1:127.□,0,1Z127. 1“■11■可dn.川t”1l1l.-1n.-------二一二二-----------二-二1313--=-=-=1313ntrnrn保存的果图11正常运行图正常运行后且保存扫描结果之前的文件内容:掰旬间旬闭闻用阳诩尚闻囹句闭诩潮尚伽圄向

片存除之除t-&frfr卷^防片冷友电除电fe-仁

4wdl^w弓m9Jdl^^mm3力J

口口u口口口口口口口口口口口口口口口口口

端端般蜂婚叫姗阳册端婿蝇呦蝎阳现附端蟒般

>>>>>>>>>>>>>>>>>>>>TCP塘口号为:10127.50.1「cr*口母为:11TCPut口号为;12TCPJ*口替海:13TCPutu号弱:14TCP俎口号第:15TCP褪口号为:16TCP端口号为:17TCP霍口号为:181270.0.1TCP塘口号为19127.0,0.1TCP班口号咕:加TCP1*口号邦;21TCPJ*口号的.22TCF3口号#;23TCP埔口号盟:24TCP%口号冠:2&TCF端口号■热:26TCP重口号为:27127.G.0.1TCP塘口号为28Ter*口呆痢:29机机忸机忸机血梃机机机忸机机机机机血机机主A主火圣生生生生土*主JLM生生生生主医时闭阳闻冏苴阳闻用M

关关我关夫开业关关关

F1时闭阳闻冏苴阳闻用M

关关我关夫开业关关关

F1口anrl口口口F1口

SF吗班6串喑*蚂

>>>>>>>>>队帆伍都队机矶极限就鼻**生£**主工至rTCP胸口赴为:13。:TCP蜩口号为:131:127.0.0,1TCP3口号为:132:127.□.0.1TCP螭n号加:133:TCP胸口>热:134:.TCP蜩口守为:135:127.0.0,1TCF3口年为:136:127.□.0.1TCP蛔目号加:137:TCP胸口赴为:138:TCP队帆伍都队机矶极限就鼻**生£**主工至正常运行后且保存扫描结果之后的文件内容:图13保存扫描结果之后的文件内容第五章课程设计总结在此次课程设计中,遇到了一些问题,如:程序功能不能完全实现,对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于Java语言,以前只学习到了一些最基本的知识,要在短时间内用Java语言来开发软件是一个较大的挑战;对于开发软件的流程不熟悉,适应起来比较慢,编写需求说明书和设计规格说明书时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,多看些项目的源代码。对于书上以及上下载的资料中的Java实例必须理解,还有多跟精通JAVA语言的老师和同学请教和交流,取其精华。对于实际动手能力与软件开发的流程的适应,必须多进行实际的练习与操作,才能有所进步。我自己感觉此次课程设计做得挺成功的,通过这一次实践编程,我学到了不少有关JAVA的实际编程的知识。在这次设计开始的第一天开始,我就开始着手修改一个用JAVA编写的短线呈端口扫描的程序。我刚开始很自信自己能修改成功,但这一过程太不顺利。用了两天时间来修改那个JAVA程序,但调试的时候都没有成功。后来我请教一个班上成绩好的同学,在他的帮助下我不断的发现错误,并改正它们,功夫不负有心人人,我的程序最后运行成功了。在这课程设计期间我的同学和老师帮助了我,有些东西是我们一起探讨,一起解决方法的。当然在学习Java和设计程序的过程中还得到了杭志老师的辛勤指导,为我解答了不少的疑问。同时,在X老师身上我们学到了很多实用的东西,在此表示衷心的感谢!同时,还要感谢帮助过我的其他同学!这次课程设计令我感受很多。从拿到题目到改编JAVA程序;然后请教别人慢慢研究琢磨;从理论到实践;从失败到成功;忘不了我坐在电脑前苦苦思索,高温下熬夜地编程的疲惫;忘不了因沉迷于编程却耽误了吃饭时间而挨饿辛酸;忘不了……这其中了不少的东西,磨砺了我的意志;同时还巩固了以前所学的知识,学到了不少书本上没有的知识;学到了很多java编程知识,并学会了简单的使用eclipse来开发java程序的一些使用技巧这次课程设计是对我本学期所学的知识的检验,由此我发现了不少的问题。可以说它给了我一次自我评估的机会。通过设计让我知道了那些方面我还是有欠缺的,促使我花时间弥补。临近考试,时间太紧迫,致使程序实现的功能在方法上也许不是很完美,但我以后会多向老师请教,自己也要加强对Java的学习。努力进一步提高自己的编程水平。此次的课程设计,对我来说撰写文档似乎是一个更大的挑战。撰写文档不仅要求我们要对自己程序非常熟悉:程序的总体框架,功能,如何实现,存在什么问题等,同时还要求我们有清晰的思维和准确的表达能力以及严密的逻辑性。因此,写完这篇文档对于我们自身来说自然是获益匪浅的。第六章参考文献1、SharonZakhourScottHommel等著.Java语言导学.人民邮电,20082、耿祥义编著.Java基础教程.清华大学,20043、JoeWigglesworthPaulaLumby.Java程序设计高级主题.大学,20044、Y.DanielLiang著,王镁等译.Java语言程序设计基础篇.20065、X福喜等.Java项目设计与开发X例.电子工业,20056、李瑞民.网络扫描技术揭秘.机械工业,2012第七章附录带注释的源程序://多线程端口扫描程序设计与实现带有注释的源程序importjava.awt.*; //抽象窗口工具包,图形界面组件类importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.io.*; //各种IOimportjavax.swing.*; 〃辿£基础上的一套图形界面系统import.*;〃第一大类:Scanner2类publicclassScanner2extendsJFrameimplementsActionListener{publicstaticvoidmain(String[]args){//程序入口newScanner2();staticintj=0;〃主窗口的创建,new组件publicstaticJFrameFrame=newJFrame();publicstaticLabelabellPStart=newLabel(1'起始IP");publicstaticLabelabellPEnd=new181061(,,结束IP");publicstaticLabelabelPortStart=newLabel("起始端口”);publicstaticLabelabelPortEnd二newLabel("结束端口”);publicstaticLabelabelThread=newLabel("线程数");publicstaticLabelabelTimeOut=newLabel("请求超时:");publicstaticLabelabelState=newLabel(1'扫描状态:");publicstaticLabelabelResult=newLabel("扫描结果:");publicstaticLabelabelScanning=newLabel(1'扫描待命");JLabelphoto=newJLabel(newImageIcon("G://图片//QQ图片20160724195038.jpg"));publicstaticJTextFieldhostNameStart=newJTextField('');publicstaticJTextFieldhostNameEnd=newJTextField('');publicstaticJTextFieldPortStart=newJTextField('10');publicstaticJTextFieldPortEnd=newJTextField('30');publicstaticJTextFieldThreadNum=newJTextField('9');publicstaticJTextFieldtime=newJTextField('2000');publicstaticTextAreaResult1=newTextArea();publicstaticTextAreaResult2=newTextArea();publicstaticLabelDLGINFO=newLabel("");publicstaticuttonTcp_connect=newutton("Tcpconnect扫描");publicstaticuttonTcp_SYN=newutton("TcpSYN扫描");publicstaticuttonICMP_echo=newutton("ICMPecho扫描");publicstaticuttonExit=newutton("退出扫描");publicstaticuttonsave=newutton("保存结果");//错误提示对话框publicstaticJDialogDLGError=newJDialog(Frame,"ERROR");publicstaticuttonOK=newutton("OK");//在构造函数里进行窗口设计publicScanner2(){//设置主窗体标题Fram.settle("计算机网络课设:多线程端口扫描 信安1401孙毅CSU");Fram.setSize(700,700); //设置主窗体大小//添加窗口监听,使之可以关闭窗口Fram.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);});//设置一系列按钮和小窗口及图片//IPlabelIPStar.setBounds(17,13,50,20);hostNameStar.setBounds(67,13,90,25);hostNameStar.setHorizontalAlignment(JTextField.CENTE);//文本水平对齐方式labelIPEn.setBounds(17,63,50,20);hostNameEn.setBounds(67,63,90,25);hostNameEn.setHorizontalAlignment(JTextField.CENTE);//文本水平对齐方式//起始端口labelPortStar.setBounds(17,113,50,20);PortStar.setBounds(67,113,90,25);PortStar.setHorizontalAlignment(JTextField.CENTE);//结束端口labelPortEn.setBounds(17,163,50,20);PortEn.setBounds(67,163,90,25);PortEn.setHorizontalAlignment(JTextField.CENTE);//线程数labelThrea.setBounds(17,213,50,20);ThreadNu.setBounds(67,213,90,25);ThreadNu.setHorizontalAlignment(JTextField.CENTE);//请求超时labelTimeOu.setBounds(17,263,50,20);time.setBounds(67,263,90,25);time.setHorizontalAlignment(JTextField.CENTE);//Tcdconnect扫描按钮Tcp_connec.setBounds(17,313,140,30);Tcp_connectsetActionmand("Tcp_connect");//设置utton的属性值Tcp_connec.addActionListener(this);//监听按钮的行为//TcpSYN扫描按钮Tcp_SY.setBounds(17,363,140,30);Tcp_SYNsetActionmand("Tcp_SYN");//设置utton的属性值Tcp_SYNaddActionListener(this);//监听按钮的行为//Icmpecho扫描按钮ICMP_ech.setBounds(17,413,140,30);ICMP_echQsetActionmand("ICMP_echo");//设置utton的属性值ICMP_echoaddActionListener(this);//监听按钮的行为//退出扫描按钮Exit.setBounds(17,463,140,30);Exit.setActionmand("Exit");Exit.addActionListener(this);//保存结果按钮save.setBounds(17,513,140,30);save.setActionmand("save");save.addActionListener(this);//扫描状态栏labelStat.setBounds(180,13,50,20);labelScannin.setBounds(240,8,120,30);Result1.setBounds(180,40,210,332);Result1.setEditable(false);Result1.setBackground(Color.GREEN);//图片的显示photo.setBounds(393,13,283,360);//扫描结果栏labelResul.setBounds(180,390,50,20);Result.setBounds(180,420,500,200);Result.setEditable(false);Result.setBackground(Color.GREEN);//设置错误提示框ContainerErrorDisplay=DLGErro.getContentPane();ErrorDisplay.setLayout(null);ErrorDisplay.add(DLGINF);ErrorDisplay.add(OK);OK.setActionmand("OK");OK.addActionListener(this);//将组件添加到主窗体Fram.setLayout(null);Fram.setResizable(false);//窗口大小设置为不可变Fram.add(labelIPStar);Fram.add(labelIPEn);Fram.add(labelPortStar);Fram.add(labelPortEn);Fram.add(labelThrea);Fram.add(labelTimeOu);Fram.add(hostNameStar);Fram.add(hostNameEn);Fram.add(PortStar);Fram.add(PortEnd);Fram.add(ThreadNu);Fram.add(time);Fram.add(Tcp_connec);Fram.add(Tcp_SY);Fram.add(ICMP_ech);Fram.add(Exit);Fram.add(save);Fram.add(labelStat);Fram.add(labelScannin);Fram.add(Result1);Fram.add(photo);Fram.add(labelResul);Fram.add(Result2);Fram.setVisible(true);}//几个产生错误的原因OverridepublicvoidactionPerformed(ActionEventarg0){//TODOAuto-generatedmethodstubStringcmd=arg0.getActionmand();intminPort,maxPort,threadNum;InetAddresshostAddressStart=null;InetAddresshostAddressEnd=null;try{//获取输入的相关数据minPort=Integer.parseInt(PortStar.getText());maxPort=Integer.parseInt(PortEn.getText());threadNum=Integer.parseInt(ThreadNu.getText());}catch(NumberFormatExceptione1){DLGErro.setBounds(300,280,300,200);DLGINF.setText("靓仔,端口号、线程号必须得是整数)DLGINF.setBounds(25,15,350,20);OK.setBounds(110,50,60,30);DLGErro.setVisible(true);return;}//输入信息错误处理if((minPort<0)||(maxPort>65536)||(minPort>maxPort)){DLGErro.setBounds(300,280,400,200);DLGINFCsetText("端口必须在0〜65536之间,且起始端口应小于结束端口");DLGINF.setBounds(25,15,350,20);OK.setBounds(110,50,60,30);DLGErro.setVisible(true);return;}if((threadNum>200)||(threadNum<0)){DLGErro.setBounds(300,280,300,200);DLGINF.setText("线程数应是在1~200之间的整数)DLGINF.setBounds(25,15,200,20);OK.setBounds(110,50,60,30);DLGErro.setVisible(true);return;}//如果按了保存按钮if(cmd.equals("save")){try{BufferedWriterbw=newBufferedWriter(newFileWriter("G:\\java语言文件\\DXCDKSMQ2\\扫描结果.txt"));bw.write(ScanTcpConnect.str);bw.newLine();ScanTcpConnect.str="";bw.close();}}}catch(IOExceptione1){e1.printStackTrace();}}//如果按了开始扫描按钮if(cmd.equals("Tcp_connect")||cmd.equals("Tcp_SYN")||cmd.equals("ICMP_echo")){Result1.setText(null);Result.setText(null);//相关显示,.append。的用途是将后面的字符串接到原来的字符串上面来labelScannin.setText("开始扫描......");Resultlappend("正在扫描"+hostNameStar.getText()+”,线程数:,,+threadNum+,,\n'1);Resultlappend("起始端口:"+minPort+";结束端口:"+maxPort+"\n");//j++;try{ScanTcpConnect.hostAddress=InetAddress.getByName(Scanner2.hostNameStar.getText());ScanTcpConnect.time=Integer.parseInt(Scanner2.time.getText());}catch(UnknownHostExceptione1){DLGErro.setBounds(300,280,300,200);DLGINF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论