Chinaunix首页 | 论坛 | 博客
  • 博客访问: 685407
  • 博文数量: 845
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 5015
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 16:22
文章分类

全部博文(845)

文章存档

2011年(1)

2008年(844)

我的朋友

分类:

2008-10-15 16:36:18

扫描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));

}

}
【责编:Peng】

--------------------next---------------------

阅读(193) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~