当前位置: 代码迷 >> Java相关 >> Java的snmp获取网络速度有关问题 (有很多源码snmpv1v2v3通适)
  详细解决方案

Java的snmp获取网络速度有关问题 (有很多源码snmpv1v2v3通适)

热度:6794   发布时间:2013-02-25 21:45:18.0
Java的snmp获取网络速度问题 (有很多源码snmpv1v2v3通适)
代码很长,先说问题:
第一,如何读取mib库,这里只是传了OID值,我觉得方法应该是这三种 get,getnext,walk,但是假设我想获取 网络输入速度 网络输出速度 发送包数 接收包数 ,改如何获取,因为有时候是叶子节点的直接用get,不是叶子节点的 walk,那个oid.索引 明白的说详细点。。
第二,snmp版本问题我一直是测试v1 v2的,v3还没测试,还要加论证,加密才能获取相关信息?。。晕。。
第三,请高手帮忙测试一下,为什么我总是得到的结果是超时///

谢谢!!!!

用到的包 snmp4j log4j
snmp4j下载地址:
http://www.snmp4j.org/html/download

Java code
//第一步测试Main方法://Java codepublic class MainSnmpWalk{    static Logger log = Logger.getLogger(MainSnmpWalk.class);    public MainSnmpWalk(){    }    public static void main(String[] args) throws InterruptedException{//建立一个SNMPv2c PDU,它会从system(1.3.6.1.2.1.1)OID开始游走//        SnmpWalk walk = new SnmpWalk("192.168.100.10","1.3.6.1.2.1.1.5.0");//物理位置//        SnmpWalk walk = new SnmpWalk("127.0.0.1",".1.3.6.1.2.1.25.2.2");//RAM//        SnmpWalk walk = new SnmpWalk("127.0.0.1","1.3.6.1.2.1.25.2.3.1.6");//Hard Disk//        SnmpWalk walk = new SnmpWalk("127.0.0.1",".1.3.6.1.2.1.25.5.1.1.1");//CPU Utilization//        SnmpWalk walk = new SnmpWalk("127.0.0.1","1.3.6.1.2.1.25.1");//也含本机物理总内存        //cpu:1.3.6.1.2.1.25.5.1.1.1        //memory:1.3.6.1.2.1.25.5.1.1.2 //得到的是每个进程的的内存使用值        //1.3.6.1.2.1.25.3.3.1.2.1 //一个比较通用的看设备CPU利用率的OID值。取最后一分钟的平均值。        // Linux下可以.1.3.6.1.2.1.25.2和.1.3.6.1.2.1.25.5这两个值试试        //====================================================        //.1.3.6.1.4.1.311.1.1.3.1.1.1.2.0//        SnmpWalk walk = new SnmpWalk("10.8.0.90","1.3.6.1.2.1.1.1");//系统描述//        SnmpWalk walk = new SnmpWalk("127.0.0.1","1.3.6.1.2.1.25.1.7.0");//本机物理总内存//        SnmpWalk walk = new SnmpWalk("127.0.0.1",".1.3.6.1.2.1.25.4.2.1.2");//列出系统进程//        SnmpWalk walk = new SnmpWalk("127.0.0.1",".1.3.6.1.4.1.77.1.2.25.1.1");//列出系统用户列表//        SnmpWalk walk = new SnmpWalk("127.0.0.1",".1.3.6.1.4.1.77.1.4.1");//列出域名(工作组)//        SnmpWalk walk = new SnmpWalk("127.0.0.1",".1.3.6.1.2.1.25.6.3.1.2");//列出安装的软件//        SnmpWalk walk = new SnmpWalk("127.0.0.1",".1.3.6.1.2.1.25.3.3.1.2");        //SnmpWalk walk = new SnmpWalk("127.0.0.1",".1.3.6.1.2.1.25.4.2.1.2");//当前进程列表        //可用的内存数量: .1.3.6.1.4.1.311.1.1.3.1.1.1.2.0        //磁盘利用率的OID: .1.3.6.1.4.1.311.1.1.3.1.1.5.1.3.0        //CPU的利用率: .1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.1.48.0        //发送的字节数(包括组帧字符): 1.3.6.1.2.1.2.2.1.16.1        //收到的字节数(包括组帧字符): 1.3.6.1.2.1.2.2.1.10.1        //cpuPercentProcessorTime .1.3.6.1.4.1.311.1.1.3.1.1.2.1.3        //memoryAvailableKBytes (OID: .1.3.6.1.4.1.311.1.1.3.1.1.1.29)        //memoryAvailableMBytes (OID: .1.3.6.1.4.1.311.1.1.3.1.1.1.30)//==================================================================================//        log.debug("Doing SNMPv2 walk..");        //1.3.6.1.2.1.1.6.0//          SnmpWalk walk = new SnmpWalk("192.168.100.57","1.3.6.1.2.1.1.4.0");//1.3.6.1.2.1.1.5.0//          String str = walk.doWalk();//          log.debug("主方法str: "+ str);//==================================================================================        /**         * 在Windows操作系统上默认是没有安装snmp协议的,需要安装snmp,安装细节较简单,这里不再描述         * 1.在Windows上安装好了snmp之后,它默认是不支持SNMPv3的,需要重新安装一个SNMPv3的代理         * 2.在Windows上直接安装软件:snmpv3agent setup.exe并配置好安全名称(用户)、认证协订、认证密码、保密协定以及保密密码         * 3.设置好了之后,在代码里直接相对应就OK了.         */        //.1.3.6.1.4.1.77.1.2.25.1.1 //1.3.6.1.2.1.1.5.0        // 用来设定安全名称(用户)、认证协订、认证的通行密码、保密协定以及保密的通行密码        log.debug("doing snmpv3 walk..");        //建立一个snmpv3c pdu,它会以kschmidt做为安全名称,md5做为认证协定//        SnmpWalk walk = new SnmpWalk("192.168.100.10","1.3.6.1.2.1.1.6.0","zmq","MD5","mysnmpzmq","DES","mysnmpzmq");//        String str3 = walk.doWalk();//        log.debug("主方法str: "+ str3);//          SnmpWalk walk = new SnmpWalk("192.168.100.11","1.3.6.1.2.1.1.6.0","zmq","MD5","mysnmpzmq","DES","mysnmpzmq");        SnmpWalk walk2 = new SnmpWalk("192.168.100.10","1.3.6.1.2.1.1.1.0"); //.1.3.6.1.2.1.2.3.1.6        String str3 = walk2.doWalk();//        String str4 = walk2.doWalk();//          log.debug("主方法str: "+ str3);        System.out.println("---result---"+str3);//          System.out.println("---result2---"+str4);    }}//第二步:类SnmpWalk.javapublic class SnmpWalk {      public static final int WALK = 1;      private SnmpUtil _util = null;      //会建立一出一个SNMPv2c walk命令,引数是"执行agent的主机"以及"我们想要游走之OIDs的前缀(prefix)"      public SnmpWalk(String host, String oid){        _util = new SnmpUtil(host,oid,false,0);        _util.setOperation(WALK);      }      //会建立出一个SNMPv3 walk命令,前两个引数与上面建构式一样,其它引数则与SNMPv3的安全设定有关      public SnmpWalk(String host, String oid, String user, String authProtocol, String authPasshrase, String privProtocol, String privPassphrase) {          _util = new SnmpUtil(host,oid,user,authProtocol,authPasshrase,privProtocol,privPassphrase,false,0);          _util.setOperation(WALK);      }      public String doWalk() {        return _util.sendAndProcessResponse();      }}
  相关解决方案