免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1387 | 回复: 0
打印 上一主题 下一主题

多线程扫描器java实现 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-10 23:33 |只看该作者 |倒序浏览


import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
//java版扫描器实现
/**
* @author 黎声
*
*/
public class Scan extends JFrame implements ActionListener{
    JLabel jl1 = new JLabel("IP");
    JLabel jl2 = new JLabel("端口范围");
    JLabel jl3 = new JLabel("-");
    JLabel jl4 = new JLabel("线程数");
    JTextField jtf1 = new JTextField(10);
    JTextField jtf2 = new JTextField(4);
    JTextField jtf3 = new JTextField(4);
    JTextField jtf4 = new JTextField(3);
    JButton jb = new JButton("开始扫描");
    JPanel jp1 = new JPanel();
    JPanel jp2 = new JPanel();
    JTextArea jta = new JTextArea();
   
    //定义线程组对象,方便对多个线程进行管理
    ThreadGroup tg = new ThreadGroup("g1");
   
    public Scan()
    {
        jtf1.setText("127.0.0.1");
        jtf2.setText("0");
        jtf3.setText("10000");
        jtf4.setText("100");
        jta.setEditable(false);
        jp1.add(jl1);
        jp1.add(jtf1);
        jp1.add(jl2);
        jp1.add(jtf2);
        jp1.add(jl3);
        jp1.add(jtf3);
        jp1.add(jl4);
        jp1.add(jtf4);
        jp2.add(jb);
        
        this.add(jp1,BorderLayout.NORTH);
        this.add(new JScrollPane(jta));
        this.add(jp2,BorderLayout.SOUTH);
        
        jb.addActionListener(this);
        
        this.setTitle("扫描器");
        this.setResizable(false);
        this.setSize(500,300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
   
    public void actionPerformed(ActionEvent e) {
        
        if(jb.getText().equals("开始扫描"))
        {
            jb.setText("停止扫描");
            jta.setText("");
            SmRunnable.flag = true;
            //启动线程
            int num = Integer.parseInt(jtf4.getText());
            
            for(int i=0;inum;i++)
            {
                Thread t = new Thread(tg,new SmRunnable(i,this));
                t.start();
            }
            Check t1 = new Check();
            t1.start();
        }
        else
        {
            //点击停止扫描按钮
            jb.setText("开始扫描");
            SmRunnable.flag = false;
            jta.append("用户取消操作! ");
        }
    }
   
    //检查所有用户线程是否结束线程类
    class Check extends Thread
    {
        public void run()
        {
            while(true)
            {
                if(tg.activeCount()==0)
                {
                    jb.setText("开始扫描");
                    jta.append("扫描完毕!");
                    return;
                }
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
   
    public static void main(String[] args) {
        Scan scan = new Scan();
    }
   
}
//扫描线程类
class SmRunnable implements Runnable
{
    int threadno;//线程号
    static int threadnum; //线程数
    static Scan scan;
    static boolean flag = true;
   
    public SmRunnable(int threadno,Scan scan)
    {
        this.threadno = threadno;
        SmRunnable.scan = scan;
    }
    public void run() {
        int min = Integer.parseInt(scan.jtf2.getText());
        int max = Integer.parseInt(scan.jtf3.getText());
        int threadnum = Integer.parseInt(scan.jtf4.getText());
        for(int i=min+threadno;imax;i+=threadnum)
        {
            try {
                Socket socket = new Socket(scan.jtf1.getText(),i);
                scan.jta.append("ip:"+scan.jtf1.getText()+" 端口"+i+"开放\n");
            }catch (Exception e) {
                //e.printStackTrace();
            }
            
            if(flag==false) break; //停止线程
        }
    }
   
}



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/62780/showart_493199.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP