24小时热门版块排行榜    

Znn3bq.jpeg
查看: 262  |  回复: 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 的主题更新
☆ 无星级 ★ 一星级 ★★★ 三星级 ★★★★★ 五星级
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 291求调剂 +8 关忆北. 2026-04-11 8/400 2026-04-12 09:32 by 逆水乘风
[考研] 331求调剂 +5 王国帅 2026-04-11 5/250 2026-04-11 22:56 by 溪涧流水
[考研] 291分调剂 +5 上岸小莹加油 2026-04-09 6/300 2026-04-11 21:06 by 逆水乘风
[考研] 考研求调剂 +3 ban班小七 2026-04-11 3/150 2026-04-11 20:48 by may_新宇
[考研] 271求调剂 +21 2261744733 2026-04-11 21/1050 2026-04-11 20:19 by Angchemist
[考研] 085600材料与化工329分求调剂 +16 叶zilin 2026-04-10 16/800 2026-04-11 11:04 by may_新宇
[考研] 农业管理302分求调剂 +3 xuening1 2026-04-10 3/150 2026-04-11 10:18 by zhq0425
[考研] 298求调剂 +9 钉叮咚冬瓜 2026-04-07 11/550 2026-04-11 09:35 by zhq0425
[考研] 085402通信工程调剂,有4项学科竞赛国奖(电赛国二),硕士研究生调剂自荐信。 +5 m永o不v言o弃m 2026-04-09 5/250 2026-04-11 09:33 by zhq0425
[考研] 化学工程与技术324调剂 +23 孙常华 2026-04-09 25/1250 2026-04-11 00:07 by 骑牛渡寒江
[考研] 本科西工大 324求调剂 +4 wysyjs25 2026-04-10 4/200 2026-04-10 20:00 by 来看流星雨10
[考研] 284求调剂 +9 让我上岸吧阿西 2026-04-09 11/550 2026-04-10 19:18 by 靖jing
[考研] 已调剂 +18 柴郡猫_ 2026-04-09 19/950 2026-04-09 22:10 by 柴郡猫_
[考研] 284求调剂 +7 让我上岸吧阿西 2026-04-09 7/350 2026-04-09 18:59 by haironglove
[考研] 348求调剂 +3 candyyyi 2026-04-09 3/150 2026-04-09 17:20 by 段伟艳
[考研] 266调剂 +8 daya sun 2026-04-07 9/450 2026-04-08 20:27 by yutian743
[考研] 一志愿南京航空航天大学 材料与化工329分求调剂 +11 Mr. Z 2026-04-05 12/600 2026-04-08 16:15 by luoyongfeng
[考研] 本科生物信息学,总分362 求07 08调剂 +6 q小倩1210 2026-04-06 6/300 2026-04-07 19:40 by macy2011
[考研] 307求调剂 +3 Youth@@ 2026-04-07 3/150 2026-04-07 09:25 by 小黑不怕难
[考研] (调剂)一志愿报考哈尔滨工业大学0857资源与环境专业378分考生 +7 狠狠加油 2026-04-05 8/400 2026-04-06 16:52 by momo皓
信息提示
请填处理意见