Python Pysnmp-基本设置示例

Python Pysnmp-基本设置示例,python,snmp,pysnmp,Python,Snmp,Pysnmp,我正试图通过SNMP与库pysnmp通信来执行基本set命令, 我的代码如下: def snmp_set(self, oid, instance, value): errorIndication, errorStatus, errorIndex, varBinds = self.cmdGen.setCmd( cmdgen.CommunityData('public'), cmdgen.UdpTransportTarget((sel

我正试图通过SNMP与库pysnmp通信来执行基本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(对象名称(1.3.6.1.4.1.5835.5.2.6000.1.1.1.1.5.0),量规32(1350))

当我在同一个oid和同一个实例(0)上尝试get命令时,一切正常,我得到了与我的MIB相对应的值

所以我不明白为什么我的set命令不起作用,我尝试了所有的例子,没有人起作用

我试图用
'private'
而不是
'public'
替换
cmdgen.CommunityData('public')
,然后我得到一个
'GenerError'
错误,而不是
'noAccess'


我还尝试使用
cmdgen.UsmUserData('usr-md5-des','authkey1','privkey1')
,但随后我收到了一条
unknownUserName
消息。对于get命令,我使用了
cmdgen.CommunityData('public')
,它工作得很好。

您使用pysnmp发送SET命令(而不是为它们提供服务)?您是否已使用不同的SNMP管理器软件(例如,来自开源netsnmp的命令)在同一OID上成功尝试SNMP设置?我想问的是,您是否绝对确定OID在SNMP代理上是可写的?谢谢您的回答,是的,我使用了另一个管理器软件,我可以在同一OID上成功地执行set命令,而不是在python示例中尝试的。oid是可写的,但我的目的当然是使用pysnmp库。尝试另一种管理软件的目的只是为了澄清问题所在;由于对象可以使用另一个SNMP管理器软件进行设置,因此问题似乎更严重的是
pysnmp
客户端代码。我个人并不熟悉pysnmp,但我认为您可以尝试使用pysnmp和其他软件捕获网络数据包,并比较结果。这可能会暗示正在发生的变化。谢谢你的建议,我按照你的建议做了,我发现了问题所在。当您执行set命令时,community值被设置为private,因此我只添加了一个命令,以便在python中将community更改为
private
。我在前面执行此操作时遇到的异常“genError”是由于
值的格式导致的,与snmp无关。谢谢你的帮助!