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

扫描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放到curPing(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));elseping.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));}}

1. 利用Ping比较愚蠢, 但是相对简单些

2. 如果Ping 成功后, 用nbtstat还可以得到主机名, 当前用户名, MAC地址…一切尽在掌握中 🙂

无论身处何处,只要有一颗放松而美好的心态,生活便是美好!

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

相关文章:

你感兴趣的文章:

标签云: