龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

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

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
扫描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 Commo

  扫描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));
  
  }
  
  }
  
精彩图集

赞助商链接