我有以下成功的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类的authKey
和privKey
参数实际上是在设置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标志?
答案 0 :(得分:1)
在现代pysnmp API中,-3k
和-3m
选项并不容易实现。
但是,pysnmp依赖于香草MIB对象进行所有操作,包括其自身的配置。这意味着,如果SNMP-USER-BASED-SM-MIB(或任何其他MIB)中有一个按住您需要的键的对象-该对象很容易accessed and modified。
如果您要追求这个想法,也许是GitHub问题将是解决它的好地方...