修改“中返回的OID部分”;oid“;及;oid“U索引”;通过Python easysnmp模块
Python模块返回SNMP OID分为两部分:修改“中返回的OID部分”;oid“;及;oid“U索引”;通过Python easysnmp模块,python,easysnmp,Python,Easysnmp,Python模块返回SNMP OID分为两部分:OID和OID\u index。例如,如果我遍历ipAddressIfIndex.ipv4(.1.3.6.1.2.1.4.34.1.3.1)OID: 来自easysnmp导入会话的>> >>>会话=会话(hostname=“r1”、community=“public”、version=2、use\u long\u names=True、use\u sprint\u value=True) >>>bulkwalk会话(“ipAddressIfInde
OID
和OID\u index
。例如,如果我遍历ipAddressIfIndex.ipv4
(.1.3.6.1.2.1.4.34.1.3.1
)OID:
来自easysnmp导入会话的>>
>>>会话=会话(hostname=“r1”、community=“public”、version=2、use\u long\u names=True、use\u sprint\u value=True)
>>>bulkwalk会话(“ipAddressIfIndex.1”)
[,
/*为简洁起见,将删除输出的其余部分*/
>>>
…然后,oid
是.iso.org.dod.internet.mgmt.mib-2.ip.ipAddressTable.ipAddressEssentry.ipAddressFindex
(或.1.3.6.1.2.1.4.34.1.3
)而oid\u id
是1.4.192.0.2.1
。我想将返回的oid
向右移动两位,以便oid\u id
是192.0.2.1
。这可能吗?我已经尝试了session.bulkwalk(“ipAddressIfIndex.1.4”)
,session.bulkwalk((“ipAddressIfIndex”,“1.4”))
,session.bulkwalk(“.1.3.6.1.2.1.4.34.1.3.1.4”)
并使用了各种会话参数,如使用长名称
或使用枚举
,但我无法修改此行为
这显然不是什么大问题,因为我可以读取最后四个字段(例如,
oid_index.split('..)[-4:
),但可能有一个技巧可以在easysnmp返回的oid
和oid_index
之间移动“行”。您可以使用正则表达式提取信息
import re
regex = re.compile(r'(?:\d+\.){3}\d+$')
tuple('{}/{}'.format(regex.search(item.oid).group(0), item.value)
for item in system_items)
或者您可以使用PySNMP
class SNMPVariable(object):
def __init__(self, value, oid):
self.value = value
self.oid = oid
#example
s1 = SNMPVariable('255.255.255.0', 'iso.3.6.1.2.1.4.21.1.11.10.10.2.0')
prtin('{}/{}'.format(regex.search(s1.oid).group(0), s1.value)
检查此项为什么要将
oid\u索引
右移2?因为oid\u id
的最后四个整数是我感兴趣的IPv4地址。在上面的示例中,IPv4地址将是192.0.2.1
。
class SNMPVariable(object):
def __init__(self, value, oid):
self.value = value
self.oid = oid
#example
s1 = SNMPVariable('255.255.255.0', 'iso.3.6.1.2.1.4.21.1.11.10.10.2.0')
prtin('{}/{}'.format(regex.search(s1.oid).group(0), s1.value)