24小时热门版块排行榜    

查看: 259  |  回复: 0
当前主题已经存档。

aisingioro

金虫 (正式写手)


[资源] 【原创】多线程端口扫描(Java)【已搜无重复】

最近复习Java,准备考试,写了个多线程端口扫描的小程序,请大家指教。
源代码如下:
===============================================
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;


class scanPort extends Thread{
    String host;
    int startPort;
    int endPort;
    int tag;
    display d;
   
    volatile boolean runStatus;
        
    scanPort(String h,int sp,int ep,int tg,display dis){
        super();
        host=h;
        startPort=sp;
        endPort=ep;
        tag=tg;
        d=dis;
        runStatus=true;
    }
    public synchronized void goRun()  {
            try{
                   runStatus=true;
             notify();
         //    System.out.println("notify");
            }catch(Exception e){
                    System.out.println(e.toString());
            }
    }

    public synchronized void goWait() throws InterruptedException{
            try{
           while (runStatus==false){
              wait();
           }
        }catch(Exception e){
                    System.out.println(e.toString());
            }
    }   
    public void  run(){
        for(int i=startPort;i<=endPort;i++){
            try{
                goWait();
                Socket s=new Socket(host,i);
                synchronized (d.jTextArea1){
                    d.jTextArea1.setText(d.jTextArea1.getText()+"Host:"+host.toString()+" Port: "+i+" is Opening."+tag+"线程"+"\n");
                }               
            }
            catch(IOException  e){
                synchronized (d.jTextArea1){
                    d.jTextArea1.setText(d.jTextArea1.getText()+"Host:"+host.toString()+" Port: "+i+" is Closed."+tag+"线程"+"\n");
                }               
            }
            catch(InterruptedException e){
                System.out.println(e.toString());
            }
        }
    }
}
class display extends JFrame {

    int threadNumber;
    int start;
    int end;
    String host;
    scanPort s[];
    int status;
   
   
    JButton jButton1;
    JButton jButton2;
    JButton jButton3;
    JLabel jLabel1;
    JLabel jLabel2;
    JLabel jLabel3;
    JLabel jLabel4;
    JMenu jMenu1;
    JMenuBar jMenuBar1;
    JMenuItem jMenuItem1;
    JScrollPane jScrollPane1;
    JTextArea jTextArea1;
    JTextField jTextField1;
    JTextField jTextField2;
    JTextField jTextField3;
   
    selectThreadNumber se;
   
    public display() {
           
           threadNumber=1;
           status=0;
           
           jButton1=new JButton("开始扫描");
           jButton2=new JButton("暂停扫描");
           jButton3=new JButton("停止扫描");
           jLabel1=new JLabel("请输入要扫描的IP地址:");
           jLabel2=new JLabel("开始端口:");
           jLabel3=new JLabel("结束端口:");
           
           jMenuBar1=new JMenuBar();
           jMenu1=new JMenu("设置");
           jMenuItem1=new JMenuItem("设置线程数:");
           jMenu1.add(jMenuItem1);
           jMenuBar1.add(jMenu1);
           
           jTextArea1=new JTextArea();
           jScrollPane1=new JScrollPane(jTextArea1);
                                 
           jTextField1=new JTextField();
           jTextField2=new JTextField("0");
           jTextField3=new JTextField("65535");   
           
           this.add(jMenuBar1);
           this.add(jLabel1);
           this.add(jTextField1);
           this.add(jLabel2);
           this.add(jTextField2);
           this.add(jLabel3);
           this.add(jTextField3);
           this.add(jButton1);
           this.add(jButton2);
           this.add(jButton3);
           this.add(jScrollPane1);
           
           this.setLayout(null);
           jMenuBar1.setSize(300, 20);
           jMenuBar1.setLocation(0, 0);
           jLabel1.setSize(150, 20);
           jLabel1.setLocation(0,30);
           jTextField1.setSize(140, 20);
           jTextField1.setLocation(150,30);
           jLabel2.setSize(80,20);
           jLabel2.setLocation(0,60);
           jTextField2.setSize(60,20);
           jTextField2.setLocation(70,60);
           jLabel3.setSize(80,20);
           jLabel3.setLocation(150,60);
           jTextField3.setSize(60,20);
           jTextField3.setLocation(220,60);
           jButton1.setSize(90,20);
           jButton1.setLocation(5, 90);
           jButton2.setSize(90,20);
           jButton2.setLocation(100, 90);
           jButton3.setSize(90,20);
           jButton3.setLocation(195, 90);
           jScrollPane1.setSize(300,150);
           jScrollPane1.setLocation(0,120);   
           
           jButton1.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                   jButton1ActionPerformed(e);                  
               }
           });
           
           jButton2.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                   jButton2ActionPerformed(e);
               }
           });
           
           jButton3.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                   jButton3ActionPerformed(e);
               }
           });
           
           jMenuItem1.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                   jMenuItem1ActionPerformed(e);
               }
           });           
    }   
     
    private void jButton1ActionPerformed(ActionEvent evt) {                                         
        s=new scanPort[threadNumber];
        host=jTextField1.getText();
        end=Integer.parseInt(jTextField3.getText());
        start=Integer.parseInt(jTextField2.getText());
        int theNumberOfPort=end-start+1;
        int everyThread[][]=new int[threadNumber][2];
        for(int i=0;i             everyThread[0]=(theNumberOfPort/threadNumber)*i+start;
            if((everyThread[0]+theNumberOfPort/threadNumber-1)<=end){
                everyThread[1]=everyThread[0]+theNumberOfPort/threadNumber-1;
            }
            else{
                everyThread[1]=end;
            }
            s=new scanPort(host,everyThread[0],everyThread[1],i+1,this);
            s.start();
        }                     
    }   
    private void jButton2ActionPerformed(ActionEvent evt) {
        if(status==0){
          jButton2.setText("继续扫描");
          status=1;
          for(int i=0;i                s.runStatus=false;               
          }
       }
       else{
         jButton2.setText("暂停扫描");
         status=0;   
         for(int i=0;i             
              s.goRun();                                    
        }
      }  
  }
    private void jButton3ActionPerformed(ActionEvent evt) {
        status=0;
        for(int i=0;i                 s.stop();
         }
    }
   
    private void jMenuItem1ActionPerformed(ActionEvent evt){
        selectThreadNumber sel=new selectThreadNumber(this);
        sel.addWindowListener(new WindowAdapter(){
            public void widnowClosing(WindowEvent e){
                System.exit(0);
            }
        });
        sel.show();  
    }
   
    public static void main(String args[]) {
      display dis=new display();
      dis.setTitle("PortScaner");
      dis.setSize(300, 300);
      dis.addWindowListener(new WindowAdapter(){
          public void windowClosing(WindowEvent e){
              System.exit(0);
          }
      });
      dis.show();
    }
}      

    class selectThreadNumber extends JFrame{
        JComboBox numberOfThread;
        JLabel lb1;
        JButton btn1;
        JButton btn2;
        int thNum;
        display d;
        
        selectThreadNumber(display dis){
           d=dis;
           
           lb1=new JLabel("请选择线程数: ");
           btn1=new JButton("确定");
           btn2=new JButton("取消");
            
           numberOfThread=new JComboBox();
           numberOfThread.addItem("1");
           numberOfThread.addItem("2");
           numberOfThread.addItem("3");
           numberOfThread.addItem("4");
           numberOfThread.addItem("5");
           numberOfThread.addItem("6");
           numberOfThread.addItem("7");
           numberOfThread.addItem("8");
           numberOfThread.addItem("9");
           numberOfThread.addItem("10");
           numberOfThread.addItem("11");
           numberOfThread.addItem("12");
           numberOfThread.addItem("13");
           numberOfThread.addItem("14");
           numberOfThread.addItem("15");
           numberOfThread.addItem("16");
           
           this.setLayout(null);
           this.add(lb1);
           this.add(numberOfThread);
           this.add(btn1);
           this.add(btn2);
           lb1.setSize(150,20);
           lb1.setLocation(10,10);
           numberOfThread.setSize(100,20);
           numberOfThread.setLocation(170,10);
           btn1.setSize(70,20);
           btn1.setLocation(30,50);
           btn2.setSize(70,20);
           btn2.setLocation(180,50);
           this.setSize(300, 100);
           this.setTitle("Select thread number");
           
           btn1.addActionListener(new ActionListener(){
               public void actionPerformed(ActionEvent e){
                   btn1ActionPerformed(e);
               }
           });
           
           
           btn2.addActionListener(new ActionListener(){
               public void actionPerformed(ActionEvent e){
                   btn2ActionPerformed(e);
               }
           });
        }
        
        private void btn1ActionPerformed(ActionEvent evt){
            thNum=numberOfThread.getSelectedIndex()+1;   
            this.setVisible(false);
            d.threadNumber=thNum;
        }
        private void btn2ActionPerformed(ActionEvent evt){
            this.dispose();
        }
    }
===============================================
保存为scaner.java
jdk1.6.0编译通过并正确运行!

[ Last edited by bslt on 2009-4-14 at 18:00 ]
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 aisingioro 的主题更新
☆ 无星级 ★ 一星级 ★★★ 三星级 ★★★★★ 五星级
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 0854电子信息求调剂 +3 α____ 2026-03-22 3/150 2026-03-22 21:28 by zhq0425
[考研] 328求调剂,英语六级551,有科研经历 +6 生物工程调剂 2026-03-17 10/500 2026-03-22 20:22 by edmund7
[考研] 招08考数学 +4 laoshidan 2026-03-20 8/400 2026-03-22 19:56 by 小皮蛋酱
[考研] 寻找调剂 +4 倔强芒? 2026-03-21 4/200 2026-03-22 16:14 by 木托莫露露
[考研] 一志愿 西北大学 ,070300化学学硕,总分287,双非一本,求调剂。 +3 晨昏线与星海 2026-03-20 3/150 2026-03-22 16:00 by ColorlessPI
[考研] 275求调剂 +6 shansx 2026-03-22 8/400 2026-03-22 15:27 by barlinike
[考研] 311求调剂 +3 26研0 2026-03-20 3/150 2026-03-22 14:46 by ColorlessPI
[考研] 085600材料与化工306 +4 z1z2z3879 2026-03-21 4/200 2026-03-21 23:44 by ms629
[考研] 材料学硕333求调剂 +3 北道巷 2026-03-18 3/150 2026-03-21 18:17 by 学员8dgXkO
[考研] 274求调剂 +10 S.H1 2026-03-18 10/500 2026-03-20 23:51 by JourneyLucky
[考研] 材料专硕英一数二306 +7 z1z2z3879 2026-03-18 7/350 2026-03-20 23:48 by JourneyLucky
[考研] 308求调剂 +3 阿姐阿姐家啊 2026-03-18 3/150 2026-03-20 23:24 by JourneyLucky
[考研] 085600材料与化工 +8 安全上岸! 2026-03-16 8/400 2026-03-20 22:13 by luoyongfeng
[考研] 329求调剂 +9 想上学吖吖 2026-03-19 9/450 2026-03-20 22:01 by luoyongfeng
[考研] 材料学硕297已过四六级求调剂推荐 +11 adaie 2026-03-19 11/550 2026-03-20 21:30 by laoshidan
[考研] 一志愿中国海洋大学,生物学,301分,求调剂 +5 1孙悟空 2026-03-17 6/300 2026-03-19 23:46 by zcl123
[考研] 生物学调剂招人!!! +3 山海天岚 2026-03-17 4/200 2026-03-19 21:34 by 怎么释怀
[考研] 材料与化工求调剂 +7 为学666 2026-03-16 7/350 2026-03-19 14:48 by 尽舜尧1
[考研] 328求调剂,英语六级551,有科研经历 +4 生物工程调剂 2026-03-16 12/600 2026-03-19 11:10 by 生物工程调剂
[考研] 333求调剂 +3 文思客 2026-03-16 7/350 2026-03-16 18:21 by 文思客
信息提示
请填处理意见