PySNMP 在不同的机器上返回不同的值
PySNMP returning different values on different machines
我在我的笔记本电脑上开发的脚本在那里运行良好,但在远程服务器上它并不是我所期望的return。
我的服务器有这样的输出:
Python 2.7.5 (default, Jun 17 2014, 18:11:42)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pysnmp
>>> print pysnmp.__version__
4.2.5
>>>
>>> from pysnmp.entity.rfc3413.oneliner import cmdgen
>>> cmdGen = cmdgen.CommandGenerator()
>>>
>>> errorIndication, errorStatus, errorIndex, varBindTable = cmdGen.nextCmd(
... cmdgen.CommunityData('communitystringhere'),
... cmdgen.UdpTransportTarget(('10.10.10.10', 161)),
... '1.3.6.1.2.1.2.2.1.2',
... lookupNames=True, lookupValues=True)
>>>
... for varBindTableRow in varBindTable:
... for val in varBindTableRow:
... print val
...
(MibVariable(ObjectName(1.3.6.1.2.1.2.2.1.2.1)), OctetString('fxp0'))
(MibVariable(ObjectName(1.3.6.1.2.1.2.2.1.2.4)), OctetString('lsi'))
(MibVariable(ObjectName(1.3.6.1.2.1.2.2.1.2.5)), OctetString('dsc'))
(MibVariable(ObjectName(1.3.6.1.2.1.2.2.1.2.6)), OctetString('lo0'))
[Output truncated...]
结果是 MibVariable 和 OctetString。
在我的笔记本电脑上,我得到以下信息:
Python 2.7.10 (default, Feb 7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pysnmp
>>> print pysnmp.__version__
4.3.2
>>>
>>> from pysnmp.entity.rfc3413.oneliner import cmdgen
>>> [code ommitted, same as above...]
...
SNMPv2-SMI::mib-2.2.2.1.2.1 = fxp0
SNMPv2-SMI::mib-2.2.2.1.2.4 = lsi
SNMPv2-SMI::mib-2.2.2.1.2.5 = dsc
SNMPv2-SMI::mib-2.2.2.1.2.6 = lo0
[Output truncated...]
我不确定是什么让 pysnmp return 有所不同,除了次要版本 - 但旧版本(在服务器上)似乎比 'newer' 有更好的输出我笔记本电脑上的版本?
我是不是遗漏了什么明显的东西?
你是对的,MibVariable
对象的默认 str
表示(或 ObjectType
在后来的 pysnmp 版本中)在次要的 pysnmp 版本之间发生了变化...
你能在 varBind
上给 .prettyPrint()
打电话吗?它有望在不同的 pysnmp 版本中产生统一的表示:
for varBindTableRow in varBindTable:
for varBind in varBindTableRow:
print(varBind.prettyPrint())
作为技巧,您可以像这样模仿旧的 str
表示:
...
>>> varBind = varBinds[0]
>>> name, value = varBind
>>> '%s(%s(%s), %s(%s))' % (
type(varBind).__name__,
type(name).__name__,
name,
type(value).__name__,
value
)
'ObjectType(ObjectIdentity(1.3.6.1.2.1.1.1.0), DisplayString(Linux zeus 4.8.6.5-smp #2 SMP Sun Nov 13 14:58:11 CDT 2016 i686))'
我在我的笔记本电脑上开发的脚本在那里运行良好,但在远程服务器上它并不是我所期望的return。
我的服务器有这样的输出:
Python 2.7.5 (default, Jun 17 2014, 18:11:42)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pysnmp
>>> print pysnmp.__version__
4.2.5
>>>
>>> from pysnmp.entity.rfc3413.oneliner import cmdgen
>>> cmdGen = cmdgen.CommandGenerator()
>>>
>>> errorIndication, errorStatus, errorIndex, varBindTable = cmdGen.nextCmd(
... cmdgen.CommunityData('communitystringhere'),
... cmdgen.UdpTransportTarget(('10.10.10.10', 161)),
... '1.3.6.1.2.1.2.2.1.2',
... lookupNames=True, lookupValues=True)
>>>
... for varBindTableRow in varBindTable:
... for val in varBindTableRow:
... print val
...
(MibVariable(ObjectName(1.3.6.1.2.1.2.2.1.2.1)), OctetString('fxp0'))
(MibVariable(ObjectName(1.3.6.1.2.1.2.2.1.2.4)), OctetString('lsi'))
(MibVariable(ObjectName(1.3.6.1.2.1.2.2.1.2.5)), OctetString('dsc'))
(MibVariable(ObjectName(1.3.6.1.2.1.2.2.1.2.6)), OctetString('lo0'))
[Output truncated...]
结果是 MibVariable 和 OctetString。
在我的笔记本电脑上,我得到以下信息:
Python 2.7.10 (default, Feb 7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pysnmp
>>> print pysnmp.__version__
4.3.2
>>>
>>> from pysnmp.entity.rfc3413.oneliner import cmdgen
>>> [code ommitted, same as above...]
...
SNMPv2-SMI::mib-2.2.2.1.2.1 = fxp0
SNMPv2-SMI::mib-2.2.2.1.2.4 = lsi
SNMPv2-SMI::mib-2.2.2.1.2.5 = dsc
SNMPv2-SMI::mib-2.2.2.1.2.6 = lo0
[Output truncated...]
我不确定是什么让 pysnmp return 有所不同,除了次要版本 - 但旧版本(在服务器上)似乎比 'newer' 有更好的输出我笔记本电脑上的版本?
我是不是遗漏了什么明显的东西?
你是对的,MibVariable
对象的默认 str
表示(或 ObjectType
在后来的 pysnmp 版本中)在次要的 pysnmp 版本之间发生了变化...
你能在 varBind
上给 .prettyPrint()
打电话吗?它有望在不同的 pysnmp 版本中产生统一的表示:
for varBindTableRow in varBindTable:
for varBind in varBindTableRow:
print(varBind.prettyPrint())
作为技巧,您可以像这样模仿旧的 str
表示:
...
>>> varBind = varBinds[0]
>>> name, value = varBind
>>> '%s(%s(%s), %s(%s))' % (
type(varBind).__name__,
type(name).__name__,
name,
type(value).__name__,
value
)
'ObjectType(ObjectIdentity(1.3.6.1.2.1.1.1.0), DisplayString(Linux zeus 4.8.6.5-smp #2 SMP Sun Nov 13 14:58:11 CDT 2016 i686))'