由于显然您正在使用 Windows 操作系统来处理 SNMP,因此您需要创建自定义 SNMP 扩展代理,以便将自定义 SNMP OID 和相应的陷阱添加到您的系统中。每个 OID 将逐字呈现一个变量,您可以在其中存储您的信息。这是此类 DLL 的一个示例。据我所知,MIB 文件仅在 Windows 中用作 SNMP 代理的参考,并且在不创建自定义 SNMP 代理的情况下不能用于添加新的 OID。
当您拥有自定义 SNMP 代理 DLL 时,您需要将其指向注册表。可以这样做(示例):
[HKEY_LOCAL_MACHINE\SOFTWARE\Symbol\MyAgent\CurrentVersion]
"Pathname"="C:\\MyCustomAgent\\MyAgent.dll"
;Add number of agent to the list (max num registered + 1)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ExtensionAgents]
"10"="SOFTWARE\\Symbol\\MyAgent\\CurrentVersion"
之后,您需要重新启动 SNMP 服务。如果一切正常,您将能够使用新的自定义 OID 来设置\获取一些数据。
为了读取\写入您的 SNMP 变量,您需要使用 SNMP 管理器。我通常使用Sharpsnmplib来做到这一点。还有一些 GUI 管理器在调试过程中会很有用,例如:iReasoning MIB Browser。
这是使用该库的示例代码:
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
// SNMP Lib references
using Lextm.SharpSnmpLib;
using Mono.Options;
using Lextm.SharpSnmpLib.Messaging;
using Lextm.SharpSnmpLib.Security;
...
List vList = new List();
ISnmpData data;
data = new OctetString("test"); // variable to add in to string OID
Variable test = new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.6.0"), data); // OID
vList.Add(test);
VersionCode versionH = VersionCode.V2; // SNMP protocol version to use
IPAddress ipH;
IPAddress.TryParse("127.0.0.1", out ipH);
IPEndPoint receiverH = new IPEndPoint(ipH, 161);
foreach (Variable variable in
Messenger.Set(versionH, receiverH, new OctetString("private"), vList, 10))// set variable
// Arguments: (ver of SNMP, IP, group, iList containing OID and variable, timeoout)
{
// output variable
}
...
您还可以在 technet 上阅读有关在 Windows 操作系统中使用 SNMP 的文章:链接。本文并不新鲜,但可能会帮助您了解如何在 Windows 中使用 SNMP。