Java程序设计.docx

上传人:b****5 文档编号:8230718 上传时间:2023-01-30 格式:DOCX 页数:30 大小:34.20KB
下载 相关 举报
Java程序设计.docx_第1页
第1页 / 共30页
Java程序设计.docx_第2页
第2页 / 共30页
Java程序设计.docx_第3页
第3页 / 共30页
Java程序设计.docx_第4页
第4页 / 共30页
Java程序设计.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

Java程序设计.docx

《Java程序设计.docx》由会员分享,可在线阅读,更多相关《Java程序设计.docx(30页珍藏版)》请在冰豆网上搜索。

Java程序设计.docx

Java程序设计

 

课程设计报告

 

课程名称:

Java语言程序设计

设计题目:

端口扫描器

专业:

信息与计算科学班级:

信092

姓名:

张立强学号:

2009314206

指导教师:

李鸿强

 

河北建筑工程学院数理系

二○一二年五月

 

课程设计题目(问题)描述

 

用Java语言设计一个简单的端口扫描器程序,实现一定的计算功能。

具体要求如下:

1,要求用Java对象的思想来完成程序的设计,;

2,熟悉java.awt包中的组件,掌握图形界面设计方法,理解ip地址的获取;

3,图形界面设计,程序界面布局合理、美观。

 

教师评语

 

签名:

一、设计的功能描述

本程序的运行界面如下:

二、设计的主要特色

 

1、能够实现基本的IP地址查询。

2特设ce,可以对输入错误的数即时修正或重新输入。

3、程序简便易行,只要通过鼠标点击进行相应的输入。

三、系统分析与设计

 

系统详细设计:

源程序代码如下:

AboutDialog的代码

importjavax.swing.*;

importjava.awt.*;

 

/*

**“关于”窗口

*/

publicclassAboutDialogextendsJDialog

{

JPaneljMainPane=newJPanel();

JTabbedPanejTabbedPane=newJTabbedPane();

privateJPaneljPanel1=newJPanel();

privateJPaneljPanel2=newJPanel();

privateJTextAreajt1=newJTextArea(6,6);

privateJTextAreajt2=newJTextArea(6,6);

/*

**构造函数

*/

publicAboutDialog()

{

setTitle("端口扫描");

setSize(300,200);

setResizable(false);

setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

Containerc=this.getContentPane();

jt1.setSize(260,200);

jt2.setSize(260,200);

jt1.setEditable(false);

jt2.setEditable(false);

jt1.setLineWrap(true);

jt2.setLineWrap(true);

jt1.setText("用同一信息对目标计算机的所有所需扫描的端口进行发送,然后根据返回端口状态来分析目标计算机的端口是否打开、是否可用。

");

jt2.setText("1、选择扫描方式\n"+"2、点击“开始扫描”\n"+"3、点击“保存扫描结果”进行扫描结果的保存");

jt1.setFont(newFont("楷体",java.awt.Font.BOLD,13));

jt1.setForeground(Color.blue);

jt2.setFont(newFont("楷体",java.awt.Font.BOLD,13));

jt2.setForeground(Color.black);

jPanel1.add(jt1);

jPanel2.add(jt2);

jTabbedPane.setSize(300,200);

jTabbedPane.addTab("扫描原理",null,jPanel1,null);

jTabbedPane.addTab("使用说明",null,jPanel2,null);

jMainPane.add(jTabbedPane);

c.add(jMainPane);

pack();

this.setVisible(true);

}

}

TCPThread的代码

import.*;

importjava.io.*;

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

publicclassTCPThreadextendsThread{

publicstaticInetAddresshostAddress;

//最小的端口号

publicstaticintMIN_port;

//最大的端口号

publicstaticintMAX_port;

//线程总数

privateintthreadnum;

//查询方式:

0为ip;1为主机名

publicstaticinttype;

//ip地址前3位

publicstaticintip1;

//ip地址4~6位

publicstaticintip2;

//ip地址7~9位

publicstaticintip3;

//起始ip地址的最后4位

publicstaticintipstart;

//结束ip地址的最后4位

publicstaticintipend;

//完整的ip地址

publicstaticStringipAll;

//扫描的主机名称或ip

Stringhostname="";

//端口的类别

Stringporttype="0";

/*

*构造函数

*/

publicTCPThread(Stringname,intthreadnum){

super(name);

this.threadnum=threadnum;

}

/*

*运行函数

*/

publicvoidrun(){

//ip地址

inth=0;

//端口号

inti=0;

SockettheTCPsocket;

//根据ip地址进行扫描

if(type==0){

//ip地址循环扫描

for(h=ipstart;h<=ipend;h++){

//组成完整的ip地址

ipAll=""+ip1+"."+ip2+"."+ip3+"."+h;

hostname=ipAll;

try{

//在给定主机名的情况下确定主机的IP地址

hostAddress=InetAddress.getByName(ipAll);

}

catch(UnknownHostExceptione){

}

//不同的端口循环扫描

for(i=MIN_port+threadnum;i

try{

theTCPsocket=newSocket(hostAddress,i);

theTCPsocket.close();

ThreadScan.Result.append(hostname+":

"+i);

//判断端口的类别

switch(i){

case21:

porttype="(FTP)";

break;

case23:

porttype="(TELNET)";

break;

case25:

porttype="(SMTP)";

break;

case80:

porttype="(HTTP)";

break;

case110:

porttype="(POP)";

break;

case139:

porttype="(netBIOS)";

break;

case1433:

porttype="(SQLServer)";

break;

case3389:

porttype="(TerminalService)";

break;

case443:

porttype="(HTTPS)";

break;

case1521:

porttype="(Oracle)";

break;

}

//端口没有特定类别

if(porttype.equals("0")){

ThreadScan.Result.append("\n");

}

else{

ThreadScan.Result.append(":

"+porttype+"\n");

}

}

catch(IOExceptione){

}

}

}

//扫描完成后,显示扫描完成,并将“确定”按钮设置为可用

if(i==MAX_port+Integer.parseInt(ThreadScan.maxThread.getText())){

ThreadScan.Result.append("\n"+"扫描完成...");

//将"确定"按钮设置成为可用

if(!

ThreadScan.Submit.isEnabled()){

ThreadScan.Submit.setEnabled(true);

}

}

}

//按照主机名进行端口扫描

if(type==1){

for(i=MIN_port+threadnum;i

try{

theTCPsocket=newSocket(hostAddress,i);

theTCPsocket.close();

ThreadScan.Result.append(""+i);

switch(i){

case21:

porttype="(FTP)";

break;

case23:

porttype="(TELNET)";

break;

case25:

porttype="(SMTP)";

break;

case80:

porttype="(HTTP)";

break;

case110:

porttype="(POP)";

break;

case139:

porttype="(netBIOS)";

break;

case1433:

porttype="(SQLServer)";

break;

case3389:

porttype="(TerminalService)";

break;

case443:

porttype="(HTTPS)";

break;

case1521:

porttype="(Oracle)";

break;

}

//端口没有特定类别

if(porttype.equals("0")){

ThreadScan.Result.append("\n");

}

else{

ThreadScan.Result.append(":

"+porttype+"\n");

}

}

catch(IOExceptione){

}

}

//扫描完成后,显示扫描完成,并将【确定】按钮设置为可用

if(i==MAX_port+Integer.parseInt(ThreadScan.maxThread.getText())){

ThreadScan.Result.append("\n"+"扫描完成...");

//将【确定】按钮设置成为可用

if(!

ThreadScan.Submit.isEnabled()){

ThreadScan.Submit.setEnabled(true);

}

}

}

}

}

ThreadScan的代码

import.*;

importjava.io.*;

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

/*

*实现扫描的主体程序

*/

publicclassThreadScan{

publicstaticJFramemain=newJFrame("JAVA端口扫描器");

//显示扫描结果

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

//滚动条面板

publicstaticJScrollPaneresultPane=newJScrollPane(Result,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,

JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

//输入主机名文本框

publicstaticJTextFieldhostname=newJTextField("localhost",8);

//输入ip地址前3位的输入框

publicstaticJTextFieldfromip1=newJTextField("0",3);

//输入ip地址4~6位的输入框

publicstaticJTextFieldfromip2=newJTextField("0",3);

//输入ip地址7~9位的输入框

publicstaticJTextFieldfromip3=newJTextField("0",3);

//输入起始ip地址最后4位的输入框

publicstaticJTextFieldfromip4=newJTextField("0",3);

//输入目标ip地址最后4位的输入框

publicstaticJTextFieldtoip=newJTextField("0",3);

//输入最小端口的输入框

publicstaticJTextFieldminPort=newJTextField("0",4);

//输入最大端口的输入框

publicstaticJTextFieldmaxPort=newJTextField("1000",4);

//输入最大线程数量的输入框

publicstaticJTextFieldmaxThread=newJTextField("100",3);

//错误提示框

publicstaticJDialogDLGError=newJDialog(main,"错误!

");

publicstaticJLabelDLGINFO=newJLabel("");

publicstaticJLabeltype=newJLabel("请选择:

");

//扫描类型

publicstaticJRadioButtonradioIp=newJRadioButton("IP地址:

");

publicstaticJRadioButtonradioHost=newJRadioButton("主机名:

",true);

//单选框组

publicstaticButtonGroupgroup=newButtonGroup();

publicstaticJLabelP1=newJLabel("端口范围:

");

publicstaticJLabelP2=newJLabel("~");

publicstaticJLabelP3=newJLabel("~");

publicstaticJLabelPdot1=newJLabel(".");

publicstaticJLabelPdot2=newJLabel(".");

publicstaticJLabelPdot3=newJLabel(".");

publicstaticJLabelTNUM=newJLabel("线程数:

");

publicstaticJLabelRST=newJLabel("扫描结果:

");

publicstaticJLabelcon=newJLabel("");

//定义按钮

publicstaticJButtonOK=newJButton("确定");

publicstaticJButtonSubmit=newJButton("开始扫描");

publicstaticJButtonCancel=newJButton("退出");

publicstaticJButtonsaveButton=newJButton("保存扫描结果");

//菜单栏

publicstaticJMenuBarmyBar=newJMenuBar();

publicstaticJMenumyMenu=newJMenu("文件(F)");

publicstaticJMenuItemsaveItem=newJMenuItem("保存扫描结果(S)");

publicstaticJMenuItemexitItem=newJMenuItem("退出(Q)");

publicstaticJMenumyMenu2=newJMenu("帮助");

publicstaticJMenuItemhelpItem=newJMenuItem("阅读");

publicstaticvoidmain(String[]args){

main.setSize(500,400);

main.setLocation(300,300);

main.setResizable(false);

main.setLayout(newGridBagLayout());

main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

DLGError.setSize(300,100);

DLGError.setLocation(400,400);

//添加“菜单栏”

myMenu.add(saveItem);

myMenu.add(exitItem);

myMenu2.add(helpItem);

myBar.add(myMenu);

myBar.add(myMenu2);

main.setJMenuBar(myBar);

//设置热键

myMenu.setMnemonic('F');

saveItem.setMnemonic('S');

//为“另存为”组件设置快捷键为ctrl+s

saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));

exitItem.setMnemonic('Q');

exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_MASK));

//采用表格包型布局

ContainermPanel=main.getContentPane();

GridBagConstraintsc=newGridBagConstraints();

c.insets=newInsets(10,0,0,10);

c.gridx=0;

c.gridy=0;

c.gridwidth=10;

c.fill=GridBagConstraints.BOTH;

c.anchor=GridBagConstraints.CENTER;

mPanel.add(type,c);

group.add(radioIp);

group.add(radioHost);

c.gridx=0;

c.gridy=1;

c.gridwidth=1;

c.fill=GridBagConstraints.BOTH;

c.anchor=GridBagC

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

当前位置:首页 > 初中教育 > 理化生

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

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