使用pysnmp setCmd时,无法在标准mib HrSystemDate中设置dateAndTime。我用八位字符串设置其他mib没问题,唯一的问题是日期/时间设置,它也是八位字符串格式。 我不确定我缺少什么。 请告知如何通过pysnmp setCmd设置日期/时间。
我可以使用以下值格式'2019-04-04,09:18:32.0,+ 13:0',
在Windows命令中使用snmpset设置日期和时间例如snmpset -v3 -l authPriv -u snmpAdmin -a SHA -A“ password” -x AES -X“ password” -n terminal 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相同的输入类型,但是我对如何做到这一点一无所知。谢谢!
答案 0 :(得分:0)
您必须让pysnmp以人性化的形式获取时间戳并将其转换为一系列八位位组。格式信息包含在SNMPv2-TC :: DateAndTime TEXTUAL-VENVEN:
中DISPLAY-HINT "2d-1d-1d,1d:1d:1d.1d,1a1d:1d"
要使pysnmp使用此功能,可以在准备SNMP命令时传递MIB对象名称(HOST-RESOURCES-MIB::hrSystemDate
而不是OID:
...
ObjectType(ObjectIdentity('HOST-RESOURCES-MIB', 'hrSystemDate'), value)
对于SNMP GET,它的工作原理类似,但相反。
答案 1 :(得分:0)
对于仅日期/时间八位字节字符串的简单解决方案,我执行了以下操作: 我必须使用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函数