2011-12-22 98 views
10

fdbテーブルから値のmacとvlanを取得する方法はpythonを使用していますか?バッシュのsnmpwalkワーク微細で
どのようにPythonでSNMPからデータを取得するのですか?

snmpwalk -v2c -c pub 192.168.0.100 1.3.6.1.2.1.17.7.1.2.2.1.2 

pysnmp:

import os, sys 
import socket 
import random 
from struct import pack, unpack 
from datetime import datetime as dt 

from pysnmp.entity.rfc3413.oneliner import cmdgen 
from pysnmp.proto.rfc1902 import Integer, IpAddress, OctetString 

ip='192.168.0.100' 
community='pub' 
value=(1,3,6,1,2,1,17,7,1,2,2,1,2) 

generator = cmdgen.CommandGenerator() 
comm_data = cmdgen.CommunityData('server', community, 1) # 1 means version SNMP v2c 
transport = cmdgen.UdpTransportTarget((ip, 161)) 

real_fun = getattr(generator, 'getCmd') 
res = (errorIndication, errorStatus, errorIndex, varBinds)\ 
    = real_fun(comm_data, transport, value) 

if not errorIndication is None or errorStatus is True: 
     print "Error: %s %s %s %s" % res 
else: 
     print "%s" % varBinds 

出力:[(のObjectName(1.3.6.1.2.1.17.7.1.2.2.1.2)、NoSuchInstance ( ''))]

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 = 2, DestHost='192.168.0.100', 
          Community='pub') 
    return res 

print getmac() 

出力:( '27'、 '27'、 '25'、 '27'、 '27'、 '27'、 '24'、 '27'、 '25'、 '18'、 '4'、 「27」「27」「25」「27」「27」「25」「27」「27」「27」「27」「27」「27」「 」「27」、 「27」「27」「27」「27」「27」「27」「27」「27」「27」「23」「 」「25」「27」「27」 「27」「27」「27」「27」「27」「25」「27」「27」「25」「27」「」「27」「27」「27」「27」「27」「27」「27」「27」「27」 「27」「27」「27」「27」「25」「27」「27」「」「27」「27」「27」「27」「27」 '27'、 '27'、 '27'、 '27'、 '27'、 '25'、 '25'、 '25'、 '7'、 '27'、 '27'、 '9' 「27」「27」「27」「27」「27」「27」「27」「25」「27」「20」「19」「27」「27」「」 「27」「27」「27」「27」「27」「27」「27」「27」「27」「 」「27」「11」「25」「27」「27」「27」「27」「27」 「27」「27」「27」「27」「27」「25」「27」「27」「27」「27」「27」「27」「27」「27」「27」「27」「27」 '27'、 '2 7 '、 「27」「27」「27」「27」「27」「2」「27」「5」「27」「0」「27」「27」 '、 '27'、'27 '、' 27 ')

Firsスクリプト(pysnmp)はNoSuchInstanceを返します。 2番目のスクリプト(netsnmp)は、ポートのリストを返しますが、macとvlanは返しません。どうしたの?

答えて

8

pysnmpの例では、GETNEXT(snmpwalk)ではなくSNMPGET(snmpget)を実行しています。あなたは、

​​

real_fun = getattr(generator, 'nextCmd') 

を変更する場合には有用な結果を見て開始します。 snmpwalksnmpbulkget振る舞いを異なる方法:あなたがsnmpwalkとPython net-snmpバインディングがつながる間の結果で見た矛盾のよう

snmpwalkと同じオプションを使用してコマンドラインからsnmpbulkgetを実行すると、python net-snmpの例と同じ結果が得られます。

あなたは、あなたのpython net-snmp例で

res = netsnmp.snmpwalk(oid, Version=2, DestHost='192.168.0.100', 
         Community='pub') 

res = netsnmp.snmpgetbulk(oid, Version=2, DestHost='192.168.0.100', 
          Community='pub') 

を次の行を更新する場合は、時に見るように、あなたは今のpython net-snmp例からの結果の同じリストを取得する必要がありますコマンドラインでsnmpwalkを実行します。

関連する問題