我有一些问题:
在我的系统(例如windows)中,有许多DLL扩展代理附加了snmp服务
当请求来到服务snmp“Snmp.exe”时,它会将请求发送给所有代理还是只发送一个?
我如何知道哪些人可以回答此请求?
由于
答案 0 :(得分:1)
主代理的工作是处理SNMP的注册,每个DLL都会注册它能够提供的信息。 SNMP中的信息在OID表示的树结构下注册。代理非常聪明,可以根据被询问的传入OID知道哪个DLL(或子代理)能够提供请求。
您可以考虑阅读描述“AgentX”协议的RFC2741。虽然这涉及协议而不是DLL,但它在底层工作的基本方式应该非常相似。
答案 1 :(得分:1)
@Wes回复没问题。这只是一个补充。如“How to add an SNMP extension agent to the NT registry”中所述,您可以在以下所示的注册表项中找到DLL扩展:
Windows Server NT4到Windows Server 2003 R2(Workstatio,W2K,XP):
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SNMP\Parameter\ExtensionAgents
开始使用Windows 2008(Vista):
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SNMP\Parameters\ExtensionAgents
每个DLL公开SnmpExtensionInit
函数,该函数将supportedView报告为OID。
BOOL WINAPI SnmpExtensionInit (DWORD dwTimeZeroReference,
HANDLE *hPollForTrapEvent,
AsnObjectIdentifier *supportedView);
我编写了一个包装器程序,只需加载DLL并调用该函数来报告响应,如果需要,可以下载并尝试slxSNMPInfo。对不起,该网站是法语,但EXE文件中的字符串是英文。