Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修改“中返回的OID部分”;oid“;及;oid“U索引”;通过Python easysnmp模块_Python_Easysnmp - Fatal编程技术网

修改“中返回的OID部分”;oid“;及;oid“U索引”;通过Python easysnmp模块

修改“中返回的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

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会话(“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)