如题,谢谢了!!!

解决方案 »

  1.   

    1.得到局域网网段,可由自己机器的IP来确定 
    2.根据IP类型,一次遍历局域网内IP地址 
    JAVA类,编译之后直接运行便可以得到局域网内所有IP,具体怎样使用你自己编写相应代码调用便可 
    代码如下:: 
    package bean; import java.io.*; 
    import java.util.*; public class Ip{ 
    static public HashMap ping; //ping 后的结果集 
    public HashMap getPing(){ //用来得到ping后的结果集 
    return ping; 
    } //当前线程的数量, 防止过多线程摧毁电脑 
    static int threadCount = 0; public Ip() { 
    ping = new HashMap(); 

      
    public  void Ping(String ip) throws Exception{ 
    //最多30个线程 
    while(threadCount>30) 
    Thread.sleep(50); 
        threadCount +=1; 
        PingIp p = new PingIp(ip); 
        p.start(); 
    }  public void PingAll() throws Exception{ 
    //首先得到本机的IP,得到网段 
    InetAddress host = InetAddress.getLocalHost(); 
    String hostAddress = host.getHostAddress(); 
    int k=0; 
    k=hostAddress.lastIndexOf("."); 
    String ss = hostAddress.substring(0,k+1); 
    for(int i=1;i <=255;i++){  //对所有局域网Ip 
    String iip=ss+i; 
    Ping(iip); 
    } //等着所有Ping结束 
    while(threadCount>0) 
    Thread.sleep(50); 
    } public static void main(String[] args) throws Exception{ 
    Ip ip= new Ip(); 
        ip.PingAll(); 
        java.util.Set entries = ping.entrySet(); 
        Iterator iter=entries.iterator(); 
          
        String k; 
        while(iter.hasNext()){ 
    Map.Entry entry=(Map.Entry)iter.next(); 
    String key=(String)entry.getKey(); 
    String value=(String)entry.getValue(); if(value.equals("true")) 
    System.out.println(key+"-->"+value); 
        } 

    class PingIp  extends Thread{ 
    public String ip;          // IP 
    public PingIp(String ip){ 
    this.ip=ip; 
    } 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,"false"); 
    else 
    ping.put(ip,"true"); 
    //线程结束 
    threadCount -= 1; 
    }catch (IOException e){} 
    }    

    }
      

  2.   

    ping是不保险的。因为有的机器是不响应ping的。
    我认为最好的方法是先ping,再取arp列表。
    一个循环,把所有的ping都完成。当然,如果很多主机,你可以选择分几次做循环。
    循环结束后,arp -a
    这个命令会列出主机上保存的所有可到达的主机的信息。也就是说,无论主机是否响应ping,只要它开机,就能取得它的ip地址和mac地址。
      

  3.   

     
    xihui912:我运行实现不了!!!是为什么??谢谢
      

  4.   

    package com.huliang.fileupload;import java.io.*;  
    import java.net.InetAddress;
    import java.util.*;  public class Ip{  
    static public HashMap ping; //ping 后的结果集  
    public HashMap getPing(){ //用来得到ping后的结果集  
    return ping;  
    }  //当前线程的数量, 防止过多线程摧毁电脑  
    static int threadCount = 0;  public Ip() {  
    ping = new HashMap();  
    }  
       
    public void Ping(String ip) throws Exception{  
    //最多30个线程  
    while(threadCount>30)  
    Thread.sleep(2);  
      threadCount +=1;  
      PingIp p = new PingIp(ip);  
      p.start();  
    }   public void PingAll() throws Exception{  
    //首先得到本机的IP,得到网段  
    InetAddress host = InetAddress.getLocalHost();  
    String hostAddress = host.getHostAddress();  
    int k=0;  
    k=hostAddress.lastIndexOf(".");  
    String ss = hostAddress.substring(0,k+1);  
    for(int i=1;i <=255;i++){ //对所有局域网Ip  
    String iip=ss+i;  
    Ping(iip);  
    }  //等着所有Ping结束  
    while(threadCount>0)  
    Thread.sleep(50);  
    }  public static void main(String[] args) throws Exception{  
    Ip ip= new Ip();  
      ip.PingAll();  
      java.util.Set entries = ping.entrySet();  
      Iterator iter=entries.iterator();  
        
      String k;  
      while(iter.hasNext()){  
    Map.Entry entry=(Map.Entry)iter.next();  
    String key=(String)entry.getKey();  
    String value=(String)entry.getValue();  if(value.equals("true"))  
    System.out.println(key+"-->"+value);  
      }  
    }  
    class PingIp extends Thread{  
    public String ip; // IP  
    public PingIp(String ip){  
    this.ip=ip;  
    }  
    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"))  
    {System.out.println(ip+"不在网中");
    ping.put(ip,"false");  }
    else  
    ping.put(ip,"true");  
    //线程结束  
    threadCount -= 1;  
    }catch (IOException e){}  
    }   
    }  }
      

  5.   

    回复xihui912
     
    (醉清风):结果不稳定,是因为ping本身就不稳定吗?还有就是想问下怎么能标示区别已经使用的IP和未使用IP?谢谢了!麻烦,很快就结贴给分!