基于多线程的java端口扫描器-课程设计.doc

上传人:PIYPING 文档编号:11082940 上传时间:2021-06-28 格式:DOC 页数:25 大小:49.57KB
返回 下载 相关 举报
基于多线程的java端口扫描器-课程设计.doc_第1页
第1页 / 共25页
基于多线程的java端口扫描器-课程设计.doc_第2页
第2页 / 共25页
基于多线程的java端口扫描器-课程设计.doc_第3页
第3页 / 共25页
基于多线程的java端口扫描器-课程设计.doc_第4页
第4页 / 共25页
基于多线程的java端口扫描器-课程设计.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《基于多线程的java端口扫描器-课程设计.doc》由会员分享,可在线阅读,更多相关《基于多线程的java端口扫描器-课程设计.doc(25页珍藏版)》请在三一文库上搜索。

1、基于多线程的java端口扫描器-课程设计基于多线程的java端口扫描器import javax.swing.*;import java.awt.*;/*“关于”窗口*/public class AboutDialog extends JDialogJPanel jMainPane = new JPanel();JTabbedPane jTabbedPane = new JTabbedPane();private JPanel jPanel1 = new JPanel();private JPanel jPanel2 = new JPanel();private JTextArea jt1 =

2、new JTextArea(6,6); private JTextArea jt2 = new JTextArea(6,6); /* *构造函数 */public AboutDialog()setTitle(端口扫描);setSize(300,200);setResizable(false);setDefaultCloseOperation (WindowConstants.DISPOSE_ON_CLOSE); Container c = this.getContentPane();jt1.setSize(260,200);jt2.setSize(260,200);jt1.setEditabl

3、e(false);jt2.setEditable(false);jt1.setLineWrap(true); jt2.setLineWrap(true); jt1.setText(用同一信息对目标计算机的所有所需扫描的端口进行发送,然后根据返回端口状态来分析目标计算机的端口是否打开、是否可用。);jt2.setText(1、选择扫描方式n+2、点击“开始扫描”n+3、点击“保存扫描结果”进行扫描结果的保存);jt1.setFont(new Font(楷体_GB2312, java.awt.Font.BOLD, 13);jt1.setForeground(Color.blue);jt2.setF

4、ont(new Font(楷体_GB2312, java.awt.Font.BOLD, 13);jt2.setForeground(Color.black);jPanel1.add(jt1);jPanel2.add(jt2);pack();this.setVisible(true); 149java端口扫描器import .*;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class TCPThread extends Threadpublic InetAddress

5、 hostAddress;/最小的端口号public int MIN_port;/最大的端口号public int MAX_port;/线程总数private int threadnum; /查询方式:0为ip;1为主机名public int type;/ip地址前3位public int ip1;/ip地址46位public int ip2;/ip地址79位public int ip3;/起始ip地址的最后4位public int ipstart;/结束ip地址的最后4位public int ipend;/完整的ip地址public String ipAll;/扫描的主机名称或ipStrin

6、g hostname = ;/端口的类别String porttype = 0;/* *构造函数 */public TCPThread(String name,int threadnum)super(name); this.threadnum = threadnum; /* *运行函数 */public void run() /ip地址int h = 0;/端口号int i = 0;Socket theTCPsocket;/根据ip地址进行扫描if(type = 0)/ip地址循环扫描for(h = ipstart; h =ipend; h+)/组成完整的ip地址ipAll = + ip1 +

7、 . + ip2 + . + ip3 + . + h;hostname = ipAll;try/在给定主机名的情况下确定主机的 IP 地址hostAddress=InetAddress.getByName(ipAll);catch(UnknownHostException e)/不同的端口循环扫描for (i = MIN_port+threadnum; i MAX_port + Integer.parseInt(ThreadScan.maxThread.getText(); i += Integer.parseInt(ThreadScan.maxThread.getText()trytheTC

8、Psocket=new Socket(hostAddress,i);theTCPsocket.close();ThreadScan.Result.append(hostname+:+i);/判断端口的类别switch(i)case 21:porttype = (FTP);break;case 23:porttype = (TELNET);break;case 25:porttype = (SMTP);break; case 80:porttype = (HTTP);break;case 110:porttype = (POP);break;case 139:porttype = (netBIO

9、S);break;case 1433:porttype = (SQL Server);break;case 3389:porttype = (Terminal Service);break;case 443:porttype = (HTTPS);break;case 1521:porttype = (Oracle);break;/端口没有特定类别if(porttype.equals(0)ThreadScan.Result.append(n);elseThreadScan.Result.append(:+porttype+n);catch (IOException e)/扫描完成后,显示扫描完成

10、,并将“确定”按钮设置为可用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 MAX_port+Integer.parseInt(ThreadScan.maxThread.getText(

11、); i += Integer.parseInt(ThreadScan.maxThread.getText()trytheTCPsocket=new Socket(hostAddress,i);theTCPsocket.close();ThreadScan.Result.append( +i);switch(i)case 21:porttype = (FTP);break;case 23:porttype = (TELNET);break;case 25:porttype = (SMTP);break; case 80:porttype = (HTTP);break;case 110:port

12、type = (POP);break;case 139:porttype = (netBIOS);break;case 1433:porttype = (SQL Server);break;case 3389:porttype = (Terminal Service);break;case 443:porttype = (HTTPS);break;case 1521:porttype = (Oracle);break;/端口没有特定类别if(porttype.equals(0)ThreadScan.Result.append(n);elseThreadScan.Result.append(:+

13、porttype+n); catch (IOException e)/扫描完成后,显示扫描完成,并将“确定”按钮设置为可用if (i=MAX_port+Integer.parseInt(ThreadScan.maxThread.getText()ThreadScan.Result.append(n+扫描完成.);149基于多线程的java端口扫描器import .*;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;/*实现扫描的主体程序*/public class ThreadSca

14、npublic JFrame main=new JFrame(JAVA端口扫描器);/显示扫描结果public JTextArea Result=new JTextArea(,4,40);/滚动条面板public JScrollPane resultPane = new JScrollPane(Result,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);/输入主机名文本框public JTextField hostname=new JTextField(localhost

15、,8);/输入ip地址前3位的输入框public JTextField fromip1=new JTextField(0,3);/输入ip地址46位的输入框public JTextField fromip2=new JTextField(0,3);/输入ip地址79位的输入框public JTextField fromip3=new JTextField(0,3);/输入起始ip地址最后4位的输入框public JTextField fromip4=new JTextField(0,3);/输入目标ip地址最后4位的输入框public JTextField toip=new JTextFiel

16、d(0,3);/输入最小端口的输入框public JTextField minPort=new JTextField(0,4);/输入最大端口的输入框public JTextField maxPort=new JTextField(1000,4);/输入最大线程数量的输入框public JTextField maxThread=new JTextField(100,3);/错误提示框public JDialog DLGError=new JDialog(main,错误!);public JLabel DLGINFO=new JLabel();public JLabel type=new JLa

17、bel(请选择:);/扫描类型public JRadioButton radioIp = new JRadioButton(IP地址:);public JRadioButton radioHost = new JRadioButton(主机名:,true);/单选框组public ButtonGroup group = new ButtonGroup();public JLabel P1=new JLabel(端口范围:);public JLabel P2=new JLabel();public JLabel P3=new JLabel();public JLabel Pdot1 = new

18、JLabel(.);public JLabel Pdot2 = new JLabel(.);public JLabel Pdot3 = new JLabel(.);public JLabel TNUM=new JLabel(线程数:);public JLabel RST=new JLabel(扫描结果: );public JLabel con=new JLabel( );/定义按钮public JButton OK = new JButton(确定);public JButton Submit = new JButton(开始扫描);public JButton Cancel = new JB

19、utton(退出);public JButton saveButton = new JButton(保存扫描结果);/菜单栏public JMenuBar myBar = new JMenuBar();public JMenu myMenu = new JMenu(文件(F);public JMenuItem saveItem = new JMenuItem(保存扫描结果(S);public JMenuItem exitItem = new JMenuItem(退出(Q);public JMenu myMenu2 = new JMenu(帮助);public JMenuItem helpIte

20、m = new JMenuItem(阅读);public void main(String args)main.setSize(500,400);main.setLocation(300,300);main.setResizable(false);main.setLayout(new GridBagLayout();main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);DLGError.setSize(300,100);DLGError.setLocation(400,400);/添加“菜单栏”myMenu.add(saveItem);myMe

21、nu.add(exitItem);myMenu2.add(helpItem);myBar.add(myMenu);myBar.add(myMenu2);main.setJMenuBar(myBar);/设置热键myMenu.setMnemonic(F); saveItem.setMnemonic (S); /为“另存为”组件设置快捷键为ctrl+ssaveItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_S,InputEvent.CTRL_MASK); exitItem.setMnemonic(Q); exitItem.setAc

22、celerator (KeyStroke.getKeyStroke (KeyEvent.VK_E,InputEvent.CTRL_MASK); /采用表格包型布局Container mPanel = main.getContentPane();GridBagConstraints c = new GridBagConstraints();c.insets = new Insets(10,0,0,10);c.gridx = 0;c.gridy = 0;c.gridwidth = 10;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConst

23、raints.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 = GridBagConstraints.CENTER;mPanel.add(radioIp,c);c.gridx = 1;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagCons

24、traints.CENTER;mPanel.add(fromip1,c);c.gridx = 2;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(Pdot1,c);c.gridx = 3;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(fromip2,c);c

25、.gridx = 4;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(Pdot2,c);c.gridx = 5;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(fromip3,c);c.gridx = 6;c.gridy = 1;c.gridwidth = 1

26、;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(Pdot3,c);c.gridx = 7;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(fromip4,c);c.gridx = 8;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.an

27、chor = GridBagConstraints.CENTER;mPanel.add(P2,c);c.gridx = 9;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(toip,c);c.gridx = 0;c.gridy = 2;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(

28、radioHost,c);c.gridx = 1;c.gridy = 2;c.gridwidth = 3;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(hostname,c);c.gridx = 0;c.gridy = 3;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(P1,c);c.gridx = 1;c.gridy = 3;c.g

29、ridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(minPort,c);c.gridx = 2;c.gridy = 3;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(P3,c);c.gridx = 3;c.gridy = 3;c.gridwidth = 1;c.fill = GridBagConstraints.

30、BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(maxPort,c);c.gridx = 0;c.gridy = 4;c.gridwidth = 1;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(TNUM,c);c.gridx = 1;c.gridy = 4;c.gridwidth = 3;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENT

31、ER;mPanel.add(maxThread,c);c.gridx = 0;c.gridy = 5;c.gridwidth = 3;c.fill = GridBagConstraints.VERTICAL;c.anchor = GridBagConstraints.CENTER;mPanel.add(Submit,c);c.gridx = 3;c.gridy = 5;c.gridwidth = 3;c.fill = GridBagConstraints.VERTICAL;c.anchor = GridBagConstraints.CENTER;mPanel.add(saveButton,c)

32、;c.gridx = 6;c.gridy = 5;c.gridwidth = 4;c.fill = GridBagConstraints.VERTICAL;c.anchor = GridBagConstraints.CENTER;mPanel.add(Cancel,c);c.gridx = 0;c.gridy = 6;c.gridwidth = 10;c.fill = GridBagConstraints.BOTH;c.anchor = GridBagConstraints.CENTER;mPanel.add(RST,c);/设置文本区域可以换行Result.setLineWrap(true)

33、;/设置文本区域不可编辑Result.setEditable(false);c.gridx = 0;c.gridy = 7;c.gridwidth = 10;c.gridheight = 4;c.fill = GridBagConstraints.VERTICAL;c.anchor = GridBagConstraints.CENTER;mPanel.add(resultPane,c);Container dPanel = DLGError.getContentPane();dPanel.setLayout(new FlowLayout(FlowLayout.CENTER);dPanel.ad

34、d(DLGINFO);dPanel.add(OK);Submit.addActionListener(new SubmitAction();Cancel.addActionListener(new CancleAction();OK.addActionListener(new OKAction();/实现保存功能saveItem.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) JFileChooser fc=new JF

35、ileChooser();int returnVal=fc.showSaveDialog(null);/点击“保存”if(returnVal = 0)File saveFile=fc.getSelectedFile();try FileWriter writeOut = new FileWriter(saveFile);writeOut.write(ThreadScan.Result.getText();writeOut.close();catch (IOException ex) System.out.println(保存失败);/点击“取消”elsereturn;);/实现退出功能exit

36、Item.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) System.exit(0););/实现帮助功能helpItem.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) new AboutDialog(););saveButton.addActi

37、onListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) JFileChooser fc=new JFileChooser();int returnVal=fc.showSaveDialog(null);/点击“保存”if(returnVal = 0)File saveFile=fc.getSelectedFile();try FileWriter writeOut = new FileWriter(saveFile);writeOut.wri

38、te(ThreadScan.Result.getText();writeOut.close();catch (IOException ex) System.out.println(保存失败);/点击“取消”elsereturn;);main.setVisible(true);/*实现“取消”功能*退出程序*/class CancleAction implements ActionListenerpublic void actionPerformed (ActionEvent e)System.exit(0);/*实现“确定”功能*完成扫描*/class SubmitAction implements ActionListenerpublic void actionPerformed (ActionEvent a)int minPort;int maxPort;int maxThread;int ip1 = 0;int ip2 =

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1