使用SNMPSharpNET获取通用错误尝试使用SNMP到Cisco交换机

时间:2014-10-15 01:33:43

标签: vb.net snmp snmpsharpnet

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

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

  1. 我尝试引用this网站来确定在尝试扫描Cisco Catalyst 2960交换机时使用的oID,但它没有返回任何内容(没有错误也没有结果)。我能让它正常工作(拉动所有东西)的唯一方法是使用oID为1.然后启动将所有内容从交换机中拉回来,这样我就可以将它用作参考来确定特定的特定oID所需数据。

  2. 这引出了我的下一个问题....使用oID为1似乎确实有效,但是,通过它的一部分错误出现“代理响应错误”,这并不能说明我什么都有我每次都在不同的设备上尝试使用SNMP,而不是撤回所有数据。

  3. 我的代码如下所示:

    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并尝试修复为什么它会因一般错误而不断出错吗?

    任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

如果您碰巧知道什么是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操作。