java獲取局域網IP

 需要遍歷局域網IP的,大體分爲兩步::
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){} 
}    
} 
}


 

發佈了25 篇原創文章 · 獲贊 9 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章