科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件扫描整个网段的多线程程序

扫描整个网段的多线程程序

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

扫描500个IP10秒钟左右, 一个IP等待0.3秒 用java写的过程编程,供参考:

作者:中国IT实验室 来源:中国IT实验室 2007年8月28日

关键字: 多线程

  • 评论
  • 分享微博
  • 分享邮件
扫描500个IP10秒钟左右, 一个IP等待0.3秒

用java写的过程编程,供参考:

package steeven;

import java.sql.*;

import java.io.*;

import java.util.*;

import java.text.*;

import javax.servlet.http.*;

public class Ip extends Common implements Runnable{

public String ip; // IP, 用户名, 主机名

ResultSet list; // 分页显示的记录集

public Ip cur; // 分页显示的当前记录

static public Hashtable ping = new Hashtable(); //ping 后的结果集

static int threadCount = 0; //当前线程的数量, 防止过多线程摧毁电脑

public Ip() {}

public Ip(String ip){

this.ip=ip;

Thread r = new Thread(this);

r.start();

}

public static void Ping(String ip) throws Exception{

//最多30个线程

while(threadCount>30)

Thread.sleep(50);

threadCount +=1;

Ip p = new Ip(ip);

}

public void PingAll() throws Exception{

threadCount =0;

ping = new Hashtable();

while(next()) //next()对所有局域网Ip放到cur

Ping(cur.ip);

//等着所有Ping结束

while(threadCount>0)

Thread.sleep(50);

}

public void run(){

try{

Process p= Runtime.getRuntime().exec ("ping "+ip+ " -w 300 -n 1");

InputStreamReader ir = new InputStreamReader(p.getInputStream());

LineNumberReader input = new LineNumberReader (ir);

//读取结果行

for (int i=1 ; i<7; i++)

input.readLine();

String line= input.readLine();

if (line.length()<17 || line.substring(8,17).equals("timed out"))

ping.put(ip,new Boolean(false));

else

ping.put(ip,new Boolean(true));

//线程结束

threadCount -= 1;

}catch (IOException e){}

}

public static void main(String[] args) throws Exception{

Ip ip= new Ip();

ip.PingAll();

java.util.Enumeration key = ping.keys();

String k;

while((k = (String)key.nextElement()) != null)

System.out.println(k+": "+ping.get(k));

}

}
查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章