从OID检索pysnmp中自定义MIB的对象名

时间:2019-06-05 07:14:27

标签: python snmp pysnmp mib

我有一个连接到网络的设备,该设备使用带有各种“参数”的自定义.MIB文件。 我可以使用MIB浏览器并找到对象名称(例如“ powerSystemCompany”)的OID。

但是对于编写我的代码,我希望有一个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。

我希望我能说清楚一点,否则我想详细说明。

1 个答案:

答案 0 :(得分:0)

我认为您使事情复杂化了!加载相关MIB的简单SNMP GET命令就足够了:

<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<script src="plotly-latest.min.js"></script>
<script src="https://cdn.plot.ly/plotly-1.2.0.min.js"></script>

您可能还需要set up a path到ASN.1(非Python)MIB,以便pysnmp可以找到,加载和编译它们。