java怎么获取局域网内所有主机ip
关注:53 答案:2 mip版
解决时间 2021-01-27 21:31
提问者夢岭杺
2021-01-27 12:02
java怎么获取局域网内所有主机ip
最佳答案
二级知识专家风是甜的
2021-01-27 13:32
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);
}
全部回答
1楼假装安慰
2021-01-27 14:40
1.得到局域网网段,可由自己机器的ip来确定 (也可以手动获取主机ip-cmd-ipconfig /all)
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){}
}
}
}
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
→点此我要举报以上信息!←
推荐资讯
大家都在看