jinsuyihao 2018-12-28 21:13 采纳率: 0%
浏览 584

java 使用snmp v3 协议,采集不到结果?为啥

Synchronize message from 135.251.218.92/161
request:GET[reqestID=1256933277, errorStatus=0, errorIndex=0, VBS[1.3.6.1.2.1.1.5.0 = Null]]
response:REPORT[reqestID=0, errorStatus=0, errorIndex=0, VBS[1.3.6.1.6.3.15.1.1.3.0 = 266]]
getUserObject:UserTarget[address=135.251.218.92/161,version=3,timeout=1000,retries=5,securityLevel=3,securityModel=3,securityName=MD5DES,preferredTransports=null, authoritativeEngineID=]

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 14:18
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在使用Java进行SNMPv3协议的采集时,可能会遇到无法获取数据的情况。这可能有以下几种原因:

    1. 认证问题:如果使用的用户名和密码不正确,或者SNMP服务端口设置错误,也可能导致采集失败。

      snmp.get(
          new SnmpString("1.3.6.1.2.1.1.5.0", "public"),
          new SnmpInteger("1.3.6.1.2.1.1.4.0", "public"),
          new SnmpInteger("1.3.6.1.2.1.1.5.0", "public")
      );
      
    2. 权限问题:如果没有足够的权限访问目标设备或指定的数据项,则无法成功获取数据。

      try {
          snmp.setCommunity(new String("public"));
          snmp.setPrivilege(new String("read"));
          // ...其他配置...
      } catch (SnmpException e) {
          e.printStackTrace();
      }
      
    3. 时间同步问题:如果SNMP服务的时间与被采集设备的时间不同步,也会导致数据采集失败。

      snmp.setTimeSync(new Integer(1));
      
    4. 网络连接问题:如果网络连接不稳定或中断,也可能导致数据采集失败。

      try {
          snmp.connect(new String("135.251.218.92"), new Integer(161), new String("public"));
      } catch (IOException | SnmpException e) {
          e.printStackTrace();
      }
      
    5. SNMP版本问题:如果使用的SNMP版本不支持采集特定数据项,也可能导致采集失败。

      snmp.setVersion(new Integer(3));
      

    解决这些问题的方法如下:

    • 确保使用的SNMP版本是支持采集所需数据项的。
    • 检查SNMP服务端口是否正确设置为161(默认值)。
    • 配置正确的用户名、密码和安全模型。
    • 确保网络连接稳定且无中断。
    • 如果是SNMPv3版本,请确保已启用MD5加密算法,并设置了适当的密钥长度。

    以下是一个完整的示例,用于获取指定的SNMP数据:

    try {
        // 创建一个SNMP对象
        Snmp snmp = new Snmp();
    
        // 设置SNMP版本为3
        snmp.setVersion(new Integer(3));
    
        // 设置SNMP服务地址和端口号
        snmp.setAddress(new String("135.251.218.92"));
        snmp.setPort(new Integer(161));
    
        // 设置用户信息
        snmp.setUsername(new String("public"));
        snmp.setPassword(new String("password"));
    
        // 连接SNMP服务器
        snmp.connect();
    
        // 获取数据项
        int value = snmp.get(new SnmpInteger("1.3.6.1.2.1.1.4.0", "public"));
    
        // 打印数据
        System.out.println(value);
    } catch (IOException | SnmpException e) {
        e.printStackTrace();
    }
    

    请注意,这段代码仅作为参考,实际使用时需要根据具体环境调整参数和方法。

    评论

报告相同问题?