我有以下成功的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标志。
我正在尝试修改我的键,这是32个字符的十六进制字符串,使用binascii模块中的各种函数,但这感觉就像咆哮错误的树。我的代码已经可以使用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标志?
-3k
和-3m
选项在当代pysnmp API中不易实现。
但是,pysnmp依赖于vanilla MIB对象来处理所有事情,包括它自己的配置。这意味着如果SNMP-USER-BASED-SM-MIB(或任何其他MIB)中有一个对象拿着你需要的键 - 那个对象可以很容易地accessed and modified。
如果你想追求这个想法,可能是一个GitHub问题将是一个处理它的好地方...