如题,谢谢了!!!
解决方案 »
- 200分求大家解决jasperreport通过APPLET客户端打印
- struts2 date校验器问题!在线等。。。。
- hibernate出现列名无效,怎么解决?
- 编译报错时,显示这句:Iterator itr=new Iterator();java.util.Iterator是抽象类,无法对其实例化,请教各位如何解决?
- 急啊???
- 程序常常报 setAttribute: Session already invalidated
- 一个书上的例子运行的时候有了错误但是不知道怎么解决请大侠们帮我看看,谢谢!!
- 编码与解码
- 急,请问高手在JSP用JDBC查询SQL后,乍样把查到的日期转为星期?
- 两个JSP+ORACLE的问题(高手请进!)
- google浏览器中不识别../的路径怎么办
- tomcat启动后spring自动关闭 Closing Spring root WebApplicationContext
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){}
}
}
}
我认为最好的方法是先ping,再取arp列表。
一个循环,把所有的ping都完成。当然,如果很多主机,你可以选择分几次做循环。
循环结束后,arp -a
这个命令会列出主机上保存的所有可到达的主机的信息。也就是说,无论主机是否响应ping,只要它开机,就能取得它的ip地址和mac地址。
xihui912:我运行实现不了!!!是为什么??谢谢
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){}
}
} }
(醉清风):结果不稳定,是因为ping本身就不稳定吗?还有就是想问下怎么能标示区别已经使用的IP和未使用IP?谢谢了!麻烦,很快就结贴给分!