PySNMP在不同的机器上返回不同的值

2024-04-20 00:13:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在笔记本电脑上开发的一个脚本在那里运行良好,但在远程服务器上它并没有返回我所期望的结果。你知道吗

我的服务器有以下输出:

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的返回方式不同于小版本,但是旧版本(在服务器上)似乎比我笔记本电脑上的“新”版本有更好的输出?你知道吗

我是不是漏掉了什么明显的东西?你知道吗


Tags: import服务器defaultfor笔记本电脑smigccmib
1条回答
网友
1楼 · 发布于 2024-04-20 00:13:14

您是对的,str对象的默认MibVariable表示(或在以后的pysnmp版本中的ObjectType)在次要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))'

相关问题 更多 >