我正在尝试将 SNMP 扫描与我的应用程序集成,并深入 Google 尝试查找示例等。因此,我遇到了 SNMPSharpNet DLL,它允许我开始使用来自 this 网站的 SNMP 联系设备.
但是,我有两个类似相关的问题:
我尝试参考this网站来确定在尝试扫描 Cisco Catalyst 2960 交换机时使用什么 oID,但它没有返回任何内容(没有错误,也没有结果)。 我可以让它正常工作(拉动所有内容)的唯一方法是使用 oID 1。然后,这将开始从交换机中拉回所有内容,这样我就可以使用它作为参考来确定特定的特定 oID。所需数据。
这引出了我的下一个问题......使用 oID 1 似乎确实有效,但是,在执行过程中会出现错误“代理响应错误”,这并没有真正告诉我任何信息。 我每次在不同设备上尝试 SNMP 时都会得到它,但它不会拉回所有数据。
我的代码如下所示:
Sub GetNextResult()
Dim host As String = "xx.xx.xx.xx"
Dim community As String = "public"
Dim requestOid() As String
Dim result As Dictionary(Of Oid, AsnType)
Dim rootOid As Oid = New Oid("1")
Dim nextOid As Oid = rootOid
Dim keepGoing As Boolean = True
requestOid = New String() {rootOid.ToString()}
Dim snmp As SimpleSnmp = New SimpleSnmp(host, community)
snmp.SuppressExceptions = False
If Not snmp.Valid Then
Console.WriteLine("Invalid hostname/community.")
Exit Sub
End If
While keepGoing
result = snmp.GetNext(SnmpVersion.Ver1, New String() {nextOid.ToString()})
If result IsNot Nothing Then
Dim kvp As KeyValuePair(Of Oid, AsnType)
For Each kvp In result
If rootOid.IsRootOf(kvp.Key) Then
Console.WriteLine("{0}: ({1}) {2}", kvp.Key.ToString(), _
SnmpConstants.GetTypeName(kvp.Value.Type), _
kvp.Value.ToString())
nextOid = kvp.Key
Else
keepGoing = False
End If
Next
Else
Console.WriteLine("No results received.")
keepGoing = False
End If
End While
End Sub
我想我的问题是:是否有某种参考资料可供我参考以获取特定信息所需的不同 oID 的列表? 或者如果不是,我可以继续使用 oID 1 并尝试修复为什么它不断出错并出现一般错误吗?
任何帮助表示感谢。
如果你知道什么是MIB浏览器,用它来查看标准MIB文档,然后你会发现“iso”的OID是大多数正在使用的OID的根。这保证了您的 WALK 操作确实转储了您想要的项目。
我没有 Cisco Catalyst 2960,因此无法准确重现您所说的“它没有返回任何内容”的意思。不要指望设备能够实现 OIDVIEW 等网站中的每个 OID 列表,因为您应该求助的始终是设备手册和供应商材料。
我检查了 snmpsharpnet 文档,发现您的代码是从那里派生的。遗憾的是 Milan 未能提供 WALK 函数,并且其文档中列出的代码片段可能会产生误导,因此您会遇到第二个问题。
SNMP 错误是预料之中的,因为 GET-NEXT 应该会遇到 NoSuchName 错误,以指示所有可用的 OID 均已转储。然而,snmpsharpnet 的示例代码并没有告诉用户这是可以预料到的。基于 GET-BULK 的 WALK 示例是正确的,因为不会出现 NoSuchName 错误。
(虽然不是广告)供您参考,#SNMP 有其
Messenger.Walk
和 Messenger.BulkWalk
方法(看起来相似),也展示了如何进行 WALK 操作。