如何使用PySNMP指定身份验证/私钥而不是密码短语?

时间:2019-04-25 16:06:19

标签: python snmp pysnmp

我有以下成功的net-snmp命令:

snmpget -v3 -l authPriv -3k $auth_key -3K $priv_key -u $user udp6:$ip 1.3.6.1.2.1.1.1.0

我一直试图在PySNMP中复制它,但是似乎密钥没有被接受。我感觉到UsmUserData类的authKeyprivKey参数实际上是在设置auth和priv口令,类似于net-snmp的-A和-X标志。

我正在尝试使用binascii模块中的各种功能来修改我的密钥(它们是32个字符的十六进制字符串),但是感觉就像是在拨错树。我的代码已经可以在SNMPv2上使用,但是用CommunityData换成UsmUserData才是问题所在。

from pysnmp.hlapi import *

IP = '::1/128'
OID = '1.3.6.1.2.1.1.1.0'
USER = 'my_user'
AUTH, PRIV = '', ''  # 32-character lowercase hex strings

error_indication, error_status, error_index, var_binds = next(
    getCmd(SnmpEngine(),
           UsmUserData(USER, authKey=AUTH, privKey=PRIV),
           Udp6TransportTarget((IP, 161)),
           ContextData(),
           ObjectType(ObjectIdentity(OID)))
)
print(error_indication)
print([x[1].prettyPrint() for x in var_binds])

输出:

Wrong SNMP PDU digest
[]

当我修改命令以使用CommunityData进行SNMPv2调用时,我得到的结果与net-snmp相同。我得到的实际输出是“错误的SNMP PDU摘要”和空的var_binds如何获取PySNMP以模拟-3k和-3K标志?

1 个答案:

答案 0 :(得分:1)

在现代pysnmp API中,-3k-3m选项并不容易实现。

但是,pysnmp依赖于香草MIB对象进行所有操作,包括其自身的配置。这意味着,如果SNMP-USER-BASED-SM-MIB(或任何其他MIB)中有一个按住您需要的键的对象-该对象很容易accessed and modified

如果您要追求这个想法,也许是GitHub问题将是解决它的好地方...