Java实现ping及 snmp ping

转自:http://www.blogjava.net/javagrass/archive/2011/05/20/350688.html
一.Java实现
Java实现ping用Java来Ping机器,有两个做法。一个是传统的调用命令行执行Ping命令的做法。这种做法的好处是速度快,比较可靠。缺点 是,不同的操作系统,甚至Windows的不同版本,其执行和返回结果格式都可能不同,造成跨平台的不便以及代码的啰嗦。第二个方法自然就是使用大家都熟 知的Java 5提供的InetAddress的isReachable方法。这个函数并非使用ICMP的ping,而是仅仅用TCP连一下7号端口而已。参考代 码:
public static boolean ping(String ip) {
        try { 
            InetAddress ipaddress = InetAddress.getByName(ip); 
            return ipaddress.isReachable(2000); 
        } catch (Exception ex) { 
            ex.printStackTrace(); 
            return false; 
        } 
    } 

二.SNMP实现ping
所谓SNMP Ping其实就是用SNMP去get一个非常基本的OID看对方有无反应。如果能够返回数据,说明这是一个SNMP节点,可以通过SNMP配合MIB库去 获取更多的业务数据。例如磁盘、CPU、内存、端口力量等等基本的信息,都有相关的SNMP MIB进行定义。

SnmpContextv2c context = new SnmpContextv2c(ip, 161); 
context.setCommunity("public"); 
BlockPdu pdu = new BlockPdu(context); 
pdu.setRetryIntervals(new int[] { 1000 }); 
String sysUpTime = "1.3.6.1.2.1.1.3.0"; 
pdu.addOid(sysUpTime); 
Object result = pdu.getResponseVariable(); 

代码中用v2c,并假设community是public,超时时间1秒。获取sysUpTime也就是设备启动时间。如果有返回,认为节点存在且SNMP协议已启动。

你可能感兴趣的:(java实现)