当我使用SNMP4J模拟snmpv3的GET PDU时,我发现尽管我在变量绑定列表中添加了一个不存在的OID,但我仍然得到了有效的响应。
但是当协议时版本 v1 ,我收到错误代码2 ,表示没有这样的名称'。
当协议版本为 v2c 时,我没有获得错误,并且返回的vb列表大小为1,并且列表(0)变量绑定' s语法是异常,这意味着"没有这样的对象"。
因此我可以在使用v1或v2c时弄清楚它是否存在,但是当它的v3时,我得到了以下响应:
<!doctype html>
<html ng-app="sortApp">
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular-animate.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/2.0.1/ui-bootstrap-tpls.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body ng-controller="mainController">
<div class="col-md-12">
<input type="text" ng-model="selected" uib-typeahead="c.country for c in countries | filter:$viewValue | limitTo:8" class="form-control">
<pre ng-bind-template="Model: {{selected | json}}"></pre>
</div>
</body>
</html>
** xx是一个数字。
代码是:
SNMP-USER-BASED-SM-MIB::usmStatsUnknownEngineIDs.0 = Counter32: xx
所以我的问题是:
(1)v3的这种行为是否正确实现?为什么我没有得到某种错误?
(2)如何使用SNMP4J测试OID是否存在?
答案 0 :(得分:1)
您正在接收所谓的 SNMP REPORT PDU 。会发生什么情况是代理从管理器接收请求PDU并确定缺少某些重要的安全属性,如engine_id
,engine_boots
和engine_time
,并发回一个REPORT以通知管理员。管理员应完全按照https://tools.ietf.org/html/rfc5343中详细描述的所谓SNMP引擎发现程序处理REPORT PDU。
答案 1 :(得分:0)
对于问题1,当我设置securityName&amp; userTarget的securityLevel,它工作正常。
userTarget.setSecurityName(new OctetString(_V3_USERNAME));
userTarget.setSecurityLevel(SecurityLevel.AUTH_PRIV);
对于问题2,它与版本1&amp; 2c现在。
参考:rfc3414:
3)如果msgAuthoritativeEngineID字段的值在 securityParameters是未知的: a)执行发现的非权威SNMP引擎可以 可选地在其本地配置中创建新条目 数据存储(LCD)并继续处理; 要么 b) usmStatsUnknownEngineIDs计数器递增,并且 错误指示(unknownEngineID)与OID和 递增计数器的值返回给调用 模块。