Java程序设计.docx
- 文档编号:8230718
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:30
- 大小:34.20KB
Java程序设计.docx
《Java程序设计.docx》由会员分享,可在线阅读,更多相关《Java程序设计.docx(30页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 程序设计