【问题标题】:Getting Generic Errors Trying To SNMP To Cisco Switches Using SNMPSharpNET使用 SNMPSharpNET 尝试 SNMP 到 Cisco 交换机时出现一般错误
【发布时间】:2014-10-15 01:33:42
【问题描述】:

我正在尝试将 SNMP 扫描与我的应用程序集成,并已深入 Google 以尝试查找示例等。因此,我遇到了 SNMPSharpNet DLL,它允许我开始使用来自 @987654321 的 SNMP 联系设备@网站。

但是,我有两个类似的问题:

  1. 我试图参考this 网站来确定在尝试扫描 Cisco Catalyst 2960 交换机时使用什么 oID,但它什么也没返回(没有错误也没有结果)。我可以让它正常工作(拉一切)的唯一方法是使用 1 的 oID。然后开始将所有东西拉出开关,所以我可以用它作为参考来确定特定的 oID所需数据。

  2. 这让我想到了我的下一个问题.... 使用 1 的 oID 似乎确实有效,但是,通过它的一部分错误,“代理响应错误”并没有真正告诉我什么。我每次在不同设备上尝试 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 并尝试解决为什么它会不断出错并出现一般性错误?

任何帮助表示感谢。

【问题讨论】:

    标签: vb.net snmp snmpsharpnet


    【解决方案1】:

    如果你碰巧知道什么是 MIB 浏览器,用它来检查标准 MIB 文档,然后你会发现“iso”的 OID 是大多数 OID 的根。这保证了您的 WALK 操作确实会转储出您想要的项目。

    我没有 Cisco Catalyst 2960,因此无法完全重现您所说的“它什么也没返回”的意思。不要指望设备实现 OIDVIEW 等网站中的每个 OID 列表,因为您应该始终求助于设备手册和供应商材料。

    我检查了 snmpsharpnet 文档,发现您的代码是从那里派生的。遗憾的是,米兰未能提供 WALK 功能,http://www.snmpsharpnet.com/?page_id=108 列出的代码片段可能会产生误导,因此您会得到第二个问题。

    预计会出现 SNMP 错误,因为 GET-NEXT 应该遇到 NoSuchName 错误以指示所有可用的 OID 都已转储。但是,来自 snmpsharpnet 的示例代码并没有告诉其用户这是意料之中的事情。基于 GET-BULK 的 WALK 示例是正确的,因为不会出现 NoSuchName 错误。

    (虽然不是广告)供您参考,#SNMP 有其 Messenger.WalkMessenger.BulkWalk 方法(看起来很相似),它们还显示了如何进行 WALK 操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多