簡體   English   中英

在pysnmp中從自定義MIB的OID中檢索objectname

[英]Retrieving objectname from OID for custom MIB in pysnmp

我有一個連接到網絡的設備,它使用帶有各種“參數”的自定義.MIB文件。 我可以使用MIB瀏覽器找到對象名稱的OID,例如'powerSystemCompany'。

但是為了編寫我的代碼,我希望獲得一個get命令來看到類似的東西:

powerSystemCompany = CompanyName

代替:

SNMPv2-SMI::enterprises.12148.10.2.4 = CompanyName

據我所知,我需要以某種方式將我的MIB文件編譯為pysnmp mib或JSON格式,並使用檢索到的OID查找參數'powerSystemCompany'。

但我仍然無法使用mibdump.py或pysnmi來獲取.py或.json MIB。 當我嘗試使用mibdump.py時,我在Anaconda提示符中嘗試了以下內容:

mibdump.py --mib-source='C:\\User\\$user$\\Documents\\pysnmp_Project\\mibs' --destination-format='json'
python mibdump.py --mib-source='C:\\User\\$user$\\Documents\\pysnmp_Project\\mibs' --destination-format='json'

但第一個只在我的VScode編輯器中打開mibdump.py,第二個給出了錯誤:

'python" can't open file 'mibdump.py': [Errno 2] no such file or directory

我也嘗試過如下所示的pysnmi實現:

from pysmi.reader import FileReader
from pysmi.searcher import StubSearcher
from pysmi.writer import CallbackWriter
from pysmi.parser import SmiStarParser
from pysmi.codegen import JsonCodeGen
from pysmi.compiler import MibCompiler
# from pysmi import debug

# debug.setLogger(debug.Debug('reader', 'compiler'))

inputMibs = 'SNMPv2-SMI'
srcDirectories = 'C://User//$user$//Documents//pysnmp_Project//mibs'

def printOut(mibName, jsonDoc, cbCtx):
    print('\n\n# MIB module %s' % mibName)
    print(jsonDoc)

# Initialize compiler infrastructure
mibCompiler = MibCompiler(
    SmiStarParser(), JsonCodeGen(), CallbackWriter(printOut)
)

# search for source MIBs here
mibCompiler.addSources(*[FileReader(x) for x in srcDirectories])
# never recompile MIBs with MACROs
mibCompiler.addSearchers(StubSearcher(*JsonCodeGen.baseMibs))

# run recursive MIB compilation
results = mibCompiler.compile(*inputMibs)

print('\n# Results: %s' % ', '.join(['%s:%s' % (x, results[x]) for x in results]))

編輯:但這似乎卡在mibCompiler.compile(* inputMibs)上。 使用HTTP請求使用示例代碼只需幾秒鍾,而我已等待幾分鍾。

這樣做的目的是實驗室設備的自動化,它使用SNMP。

我希望自己清楚明白,否則我很想詳細說明。

我覺得你太復雜了! 加載相關MIB的簡單SNMP GET命令應該足夠:

from pysnmp.hlapi import *

errorIndication, errorStatus, errorIndex, varBinds = next(
    getCmd(SnmpEngine(),
           CommunityData('public'),
           UdpTransportTarget(('your.snmp.enabled.device.address', 161)),
           ContextData(),
           ObjectType(ObjectIdentity('YOUR-COMPANY-MIB', 'powerSystemCompany', 0)).addAsn1MibSource('file:///your/snmp/mibs/location')),
)

if errorIndication:
    print(errorIndication)
elif errorStatus:
    print('%s at %s' % (errorStatus.prettyPrint(),
                        errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
else:
    for varBind in varBinds:
        print(' = '.join([x.prettyPrint() for x in varBind]))

您可能還需要設置 ASN.1(非Python)MIB 的路徑 ,以便pysnmp可以查找,加載和編譯它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM