2017-07-25 13 views
0

私のラップトップで開発したスクリプトはうまく動作しますが、リモートサーバ上では私が期待していたものを返せません。異なるマシンで異なる値を返すPySNMP

私のサーバーは、この出力を持っている:

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リターンを作ることができるものかわからない - しかし、(サーバー上の)古いバージョンのようです私のラップトップに「新しい」バージョンよりもずっと良い出力がありますか?

明らかなものがありませんか?

答えて

1

あなたはMibVariableオブジェクト(またはそれ以降のpysnmpバージョンでObjectType)のデフォルトstr表現はマイナー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))' 
+0

おかげで、私は終わりました同様の方法を使って模倣します。 –

+0

私はあなたの究極の目標は何ですか?返される正確なSNMPタイプを知る必要がありますか? –

+0

いいえ、私は本質的にすべての値を取り戻すためにそのOIDを歩いてみようとしています。私はそのテーブルで見つけようとしている検索文字列を持っています。OIDの最後の部分は、私が探しているもののインデックスです。 –

関連する問題