ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:102.32KB ,
资源ID:6835588      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6835588.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(应用软件设计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

应用软件设计.docx

1、应用软件设计信息工程学院应用软件课程设计论文 (20 06 20 07 学年第 一 学期)论文题目:基于JAVA的多线程TCP 端口扫描程序 姓 名: 陈 兵专 业:计算机科学与技术年级班级: 2003级2班指导教师: 刘全中完成日期: 2007-1-24基于JAVA的多线程TCP端口扫描程序摘要:本论文是一个以JAVA编写的GUI界面多线程端口扫描程序,实现输入局域网内的一个IP地址,以及端口的范围和启动的线程数来扫描该计算机中的开放端口的功能。通过使用JAVA中的socket()方法来创建一个流套接字并将其连接到指定IP地址的指定端口。关键词:端口扫描,多线程,socket。一、任务描述及

2、相关采用技术1任务描述用JAVA编写的一个GUI界面的多线程端口扫描程序,要求输入局域网内的一个IP地址,以及端口的范围和启动的线程数来扫描该计算机中的开放端口。并实时显示扫描情况。如果是特定端口,比如21(FTP),23(TELNET),25(SMTP),80(HTTP)时应注明。2开发工具及相关采用技术开发平台:Windows XP + JDK1.5开发工具:JCreator Pro 3.5开发语言:Java二、设计思路及实现过程首先实现GUI界面,然后对输入的IP、端口和线程数进行处理。最后将处理结果捕获,在JTextArea区域中显示出来。界面设计部分相对简单,主要是使用 swing设

3、计,由于对swing不熟悉,在面板组件布局时遇到些困难。连接局域网主机通过使用JAVA中的socket()方法来创建一个流套接字并将其连接到指定IP地址的指定端口。通过继承Thread类,生成MyThread类,来实现多线程的创建和对指定IP、指定端口的处理。设计流程图如图1:三、功能测试及代码程序运行,界面如图2所示:输入的查询条件必须满足以下条件:IP为局域网内的任一IP,端口值范围为:0-65535,并且开始端口值要小于结束端口值。线程数范围为1-1000。图 2输入要查询的主机IP、端口范围、线程数后,点击“确定”后,结果如图3所示:图 3若输入条件不符合条件,则抛出错误信息如下:(1

4、)IP地址不符合“xxx.xxx.xxx.xxx,且xxx为0-255”的条件,则抛出错误信息,如图4所示。图 4(2)端口值不符合“端口值范围为:0-65535,并且开始端口值要小于结束端口值”的条件,则抛出错误信息,如图5所示。图 5(3)线程数不符合“线程数必须在1-1000范围内”的条件,抛出错误信息,如图6:图 6主要代码:线程类MyThread继承于Thread,实现连接远程主机端口,并对特定端口进行处理。class MyThread extends Thread private int threadnum; public static InetAddress hostname;

5、public static int minPort; public static int maxPort; public MyThread(String name,int threadnum) super(name); this.threadnum = threadnum; public void run() int i; Socket sock;for(i=minPort+threadnum;imaxPort;i+= Integer.parseInt(ThreadScan.t4.getText() ThreadScan.status.setText(扫描状态:正在扫描 +i+ 端口); tr

6、y sock = new Socket(hostname,i); sock.close(); ThreadScan.message.append( +i); switch(i) case 21: ThreadScan.message.append(FTP); break; case 23: ThreadScan.message.append(TELNET); break; case 25: ThreadScan.message.append(SMTP); break; case 80: ThreadScan.message.append(HTTP); break; case 110: Thre

7、adScan.message.append(POP); break; ThreadScan.message.append(,); catch (IOException e) if (i=maxPort) ThreadScan.message.append(n+扫描完成.); ThreadScan.status.setText(扫描状态:完成!); 类okAction用于点击“确定”按钮后对输入信息进行判断,是否符合输入条件,若不符合条件,则抛出错误信息,并实现新线程的创建。class okAction implements ActionListener public void actionPe

8、rformed (ActionEvent a) int minPort; int maxPort; int maxThread; try minPort=Integer.parseInt(ThreadScan.t2.getText(); maxPort=Integer.parseInt(ThreadScan.t3.getText(); maxThread=Integer.parseInt(ThreadScan.t4.getText(); catch(NumberFormatException e) ThreadScan.infoDialog.setText(错误的端口号或线程数!端口号和线程数

9、必须为整数!); ThreadScan.errorDialog.setVisible(true); ThreadScan.status.setText(扫描状态:未开始); return; try MyThread.hostname=InetAddress.getByName(ThreadScan.t1.getText(); catch(UnknownHostException e) ThreadScan.infoDialog.setText( 错误的IP地址/域名或地址不可达! ); ThreadScan.errorDialog.setVisible(true); ThreadScan.st

10、atus.setText(扫描状态:未开始); return; if(minPort65535 | minPortmaxPort) ThreadScan.infoDialog.setText(最小端口必须是0-65535并且小于最大端口的整数!); ThreadScan.errorDialog.setVisible(true); return; else MyThread.minPort=minPort; if(maxPort65535 | maxPortminPort) ThreadScan.infoDialog.setText(最大端口必须是0-65535并且大于最小端口的整数!); Th

11、readScan.errorDialog.setVisible(true); ThreadScan.status.setText(扫描状态:未开始); return; else MyThread.maxPort=maxPort; if(maxThread1000) ThreadScan.infoDialog.setText( 线程数为1-1000的整数! ); ThreadScan.errorDialog.setVisible(true); ThreadScan.status.setText(扫描状态:未开始); return; ThreadScan.message.setText();Thr

12、eadScan.message.append(正在扫描 +ThreadScan.t1.getText()+ 线程数 +ThreadScan.t4.getText()+n); ThreadScan.message.append(开放端口: ); for(int i=0;imaxThread;i+) new MyThread(T + i,i).start(); 四、存在问题和改进意见在面板布局上,原来使用的是GridBagLayout,但是占击“确定”后,面板会变形。后改用用FlowLayout,处理得不好,不能灵活布置各组件的位置。在处理完成后,扫描状态栏程序中设置有显示“扫描状态:完成!”,但

13、实际运行并不能显示出来。这个问题未能解决。在对输入信息进行处理后,要将处理信息显示在message文本框中时,遇到了问题,信息并不能显示在文本框中,原来用setText()和append()方法就可以完成,但我只使用了append()方法,以致于始终不能显示。原因在于,在使用append()方法时,必须是对已有String进行操作,即要先使用setText(),给文本框赋一个String值,才能进行append()。改进意见:本程序只能对局域网内的主机进行扫描,如果能外网主机进行扫描,那功能更为完善。这要涉及到子网掩码和对IP及子网掩码进行处理。参考文献1.张席,戴劲.Java语言程序设计教程.西安:西安电子科技大学出版社.2.Bruce Ecket著,侯捷译.Java编程思想(第2版).北京:机械工业出版社.3.精通java-swing程序设计.chm.4. JavaTM 2 Platform Standard Edition 5.0 API 规范.

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

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