【发布时间】:2019-04-03 21:55:27
【问题描述】:
使用 pysnmp setCmd 时,我无法在标准 mib HrSystemDate 中设置 dateAndTime。我用八进制字符串设置其他 mib 没有问题,唯一的问题是日期/时间设置也是八进制字符串格式。 我不确定我错过了什么。 请告知如何通过 pysnmp setCmd 设置日期/时间。
我可以在 windows 命令中使用 snmpset 设置日期和时间,使用这个值格式 '2019-04-04,09:18:32.0,+13:0',
例如snmpset -v3 -l authPriv -u snmpAdmin -a SHA -A“密码”-x AES -X“密码”-n 终端 192.168.0.5 .1.3.6.1.2.1.25.1.2.0 = 2019-04-04,09: 18:32.0,+13:0
在推理中,我还可以在格式、日期和时间和八进制字符串上设置它 我还不能发图片,所以这里是链接。 ireasoning
片段
code
def setSnmpV3string(ip, context='terminal', oid='.1.3.6.1.4.1.2509.8.29.2.15.1.2.1',value=''):
errorIndication, errorStatus, errorIndex, varBinds = next(
setCmd(SnmpEngine(),
UsmUserData('snmpAdmin', 'password', 'password',
authProtocol=usmHMACSHAAuthProtocol,
privProtocol=usmAesCfb128Protocol),
UdpTransportTarget((ip, 161),),
ContextData(contextName=context),
ObjectType(ObjectIdentity(oid), OctetString(value) ))
)
values = ' = '
if errorIndication:
print(errorIndication)
elif errorStatus:
print('%s at %s' % (errorStatus.prettyPrint(),
errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
else:
for varBind in varBinds:
values = ' = '.join([x.prettyPrint() for x in varBind])
print(values)
return values.split(' = ')[1]
控制台输出
OctetString(value)
<OctetString value object at 0x615ba90 tagSet <TagSet object at 0x502ca70 tags 0:0:4> subtypeSpec <ConstraintsIntersection object at 0x4fef090 consts <ValueSizeConstraint object at 0x4fe0b70 consts 0, 65535>> encoding iso-8859-1 payload [2019-04-04,10:27:41.0,+12:0]>
errorStatus
<Integer value object at 0x6106970 tagSet <TagSet object at 0x4ff59b0 tags 0:0:2> namedValues <NamedValues object 0x54d36b0 enums noError=0, tooBig=1, noSuchName=...Writable=17, inconsistentName=18> payload [commitFailed]>
我假设 pySnmp 需要与 iReasoning 相同的输入类型,但我不知道如何去做。谢谢!
【问题讨论】:
-
在数据包级别,发送的是原始字节,而不是日期时间字符串。您必须根据 RFC 文档进行一些转换。
-
谢谢我刚刚发现我必须使用 strut pack 将日期时间字符串转换为字节。像这样,
struct.pack('>HBBBBBBcBB', 'yyyy', 'mm','dd','H','M','S',0,b'+',time_offset,0)将是 b'\x07\xe3\x04\x04\x0b\x02!\x07+\r\x00' 并且可以发送到上面的 snmpV3string 函数 -
然后发布您自己的答案并接受它。
-
好的。回答我自己的问题需要 48 小时。