为Windows编写SNMP代理:选择SnmpAPI.Lib还是MgmtAPI.lib?

3

我需要为我们公司的产品在Windows上编写一个SNMP代理。

SnmpApi.lib - 我的理解是,SnmpApi.lib允许您从头开始创建完整的代理,并可能需要更多的工作。然而,它会占用SNMP端口并不允许其他代理运行,并且编码时间会更长。

MgmtAPI.lib - 这个库将允许您创建一个扩展到已经运行的Windows SNMP服务的代理,似乎是一种更优雅的方法来创建Windows代理。但是,我很难找到官方MS文档/示例如何编写这样一个代理。我还在另一个论坛上看到说这可能被弃用了。

我看到过一本Oreilly的书叫做“Windows NT SNMP”,但我听说它使用了弃用的库或技术。我不知道这是否正确。

我也看到过像SNMP++这样的库,它使用SnmpAPI.lib来创建代理,但这似乎不如通过MgmtAPI.lib让系统上的多个子代理更加优雅。

几个问题:

我听说MgmtAPI.lib是遗留/弃用的。这是真的吗?

创建Windows SNMP代理的最佳实践是什么?

我应该使用哪个库?

还有其他建议吗?

谢谢!

1个回答

2
默认的Windows SNMP堆栈和框架在功能上非常有限。不幸的是,您最好的解决方案可能在其他地方(其中有许多外部库和堆栈)。如果您想要一个模块化的并允许子代理的堆栈,那么请查看支持AgentX协议的堆栈。这是一种标准化的SNMP子代理协议,将允许多个子代理连接到主代理。
但无论您做什么,请选择支持SNMPv3并使用其中的安全性的堆栈。
如果您想要一个已知在Windows上运行良好的随机堆栈示例,请尝试Net-SNMP,它在“替换Windows上的SNMP堆栈”人群中相当受欢迎。但我也有偏见并与该项目相关联,所以我会结束并说:“没有太大关系;选择任何支持AgentX和SNMPv3的堆栈即可”。

谢谢,Wes。你知道Net-SNMP是否支持MS SNMP代理服务支持的标准Windows MIB吗?我很想转换到Net-SNMP,但我不确定这对我是否可行。实际上,我正在使用Net-SNMP和smilint来完成我的一些MIB工作。 - EhevuTov
1
它不支持任何MS特定的MIB,但它支持更多MS本身支持的标准MIB。最坏的情况是,如果您在不同的端口上运行MS代理,您实际上可以让Net-SNMP主代理为任何Net-SNMP不支持的内容进行“代理”。请参阅“proxy”上的snmpd.conf手册页面。 - Wes Hardaker
我可能会尝试一下。目前,我正在编写我的MIB并尝试在C++子代理DLL中获取一个良好设计的数据结构来表示MIB。这非常令人沮丧和耗时。我是否可以更轻松地使用Net-SNMP套件创建Net-SNMP子代理和MIB编译器?我的经理也担心看不到MS代理当前报告的标准RFC MIB。 - EhevuTov
好的,对两个运行snmpwalk命令并比较差异即可。您可以在10分钟内完成此操作,并为您的经理提供相当详细的报告。 - Wes Hardaker
Wes,我做到了。我喜欢我看到的东西。现在我正在探索如何制作一个类似于IFTables的简单MIB,并使用AgentX构建扩展子代理。你知道将MIB转换为C、C++或Perl代码的简单方法吗?这将是理想的并节省时间。我的数据结构用于模拟我们的设备似乎是最棘手的问题。感谢您的专业知识!如果您愿意,我会把它变成一个SO问题,让您来回答。 - EhevuTov
1
Net-SNMP附带的“mib2c”程序可以将MIB表转换为多种格式(“c”不应该是它的名称...它应该被命名为“mib2anything”)。请参阅Net-SNMP维基以获取想法和示例。 - Wes Hardaker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接