我正在尝试通过与pysnmp库的SNMP通信执行基本的set命令, 我的代码如下:
def snmp_set(self, oid, instance, value):
errorIndication, errorStatus, errorIndex, varBinds = self.cmdGen.setCmd(
cmdgen.CommunityData('public'),
cmdgen.UdpTransportTarget((self.ip_address, 161)),
((oid+'.'+instance), rfc1902.Unsigned32(value))
)
# Check for errors and print out results
if errorIndication:
print(errorIndication)
else:
if errorStatus:
print('%s at %s' % (
errorStatus.prettyPrint(),
errorIndex and varBinds[int(errorIndex)-1] or '?'
)
)
else:
for name, val in varBinds:
print('%s = %s' % (name.prettyPrint(), val.prettyPrint()))
我得到以下错误消息:
noaccess下' at(ObjectName(1.3.6.1.4.1.5835.5.2.6000.1.1.1.1.5.0),Gauge32(1350))
当我在同一个oid和同一个实例(0)上尝试get命令时,一切正常,我得到的值超出了我想要的MIB值。
所以我不明白为什么我的set命令不起作用,我尝试了http://pysnmp.sourceforge.net/的所有例子,没人工作。
我尝试将cmdgen.CommunityData('public')
替换为'private'
而不是'public'
,然后我收到'genError'
错误,而不是'noAccess'
。
我还尝试使用cmdgen.UsmUserData('usr-md5-des', 'authkey1', 'privkey1')
,但后来收到unknownUserName
消息。对于我的get命令,我使用cmdgen.CommunityData('public')
并且它工作正常。