2017-06-12 14 views
0

私は、Pythonのpysnmpモジュールを使用してsnmpデータを取得したいと思います。私はコマンドラインを使用してSNMPデータを取得していましたが、今はpysnmpモジュールを使用してそれを読み取る必要があります。pysnmpを使ってSNMPデータを取得する方法は?

SNMPコマンド -

snmpwalk -v 1 -c public <ip address>:<port> xyz::pqr 

私は上記のようなコマンドを使用していました。私はエラーに直面しています

import netsnmp 

def getmac(): 
    oid = netsnmp.VarList(netsnmp.Varbind('.1.3.6.1.2.1.17.7.1.2.2.1.2')) 
    res = netsnmp.snmpgetbulk(oid, Version = 1, DestHost='ip', 
          Community='pub') 
    return res 

print getmac() 

- - 輸入netsnmp今、私は以下のようなものを試してみました。いいえモジュールnetsnmp

誰でも私はどのようにsnmpのデータをsnmpサーバーからpythonで得ることができますか?

答えて

1

pysnmpではなく、netsnmpモジュールを使用しているようです。

あなたがpysnmpを使用したい場合は、this exampleは助けることがあります。

from pysnmp.hlapi import * 

for (errorIndication, 
    errorStatus, 
    errorIndex, 
    varBinds) in nextCmd(SnmpEngine(), 
          CommunityData('public', mpModel=0), 
          UdpTransportTarget(('demo.snmplabs.com', 161)), 
          ContextData(), 
          ObjectType(ObjectIdentity('1.3.6.1.2.1.17.7.1.2.2.1.2'))): 
    if errorIndication or errorStatus: 
     print(errorIndication or errorStatus) 
     break 
    else: 
     for varBind in varBinds: 
      print(' = '.join([x.prettyPrint() for x in varBind])) 

がUPDATE:

上記のループが反復ごとにOID値を取得します。より効率的にデータをフェッチしたい場合は、より多くのOIDをクエリーに埋め込みます(多くの形式ではObjectType(...)の形式)。

また、nextCmdコールをbulkCmdlike thisに変更することで、GETBULK PDUタイプに切り替えることができます。

from pysnmp.hlapi import * 

for (errorIndication, 
    errorStatus, 
    errorIndex, 
    varBinds) in bulkCmd(SnmpEngine(), 
     CommunityData('public'), 
     UdpTransportTarget(('demo.snmplabs.com', 161)), 
     ContextData(), 
     0, 25, # fetch up to 25 OIDs one-shot 
     ObjectType(ObjectIdentity('1.3.6.1.2.1.17.7.1.2.2.1.2'))): 
    if errorIndication or errorStatus: 
     print(errorIndication or errorStatus) 
     break 
    else: 
     for varBind in varBinds: 
      print(' = '.join([x.prettyPrint() for x in varBind])) 

GETBULKコマンドのサポートが最初にあなたはSNMP v1の上でそれを使用することはできませんでのSNMP V2C、で導入されたことを覚えておいてください。

+0

ご返信ありがとうございます。あなたのスニペットを試みましたが、すべてのデータが取得されませんでした。どんなアイデア、なぜそれが好き? – kit

+0

@IIya Etingof-一度に複数のOIDデータを取得する方法は何ですか? – kit

+0

@kit私の答えが更新されました。これが必要なものかどうか教えてください –

関連する問題