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