技术开发 频道

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

  【IT168技术文档】

  扫描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));   }   }
0
相关文章