我正在尝试将SNMP扫描与我的应用程序集成,并已深入研究Google以尝试查找示例等。因此,我遇到了SNMPSharpNet DLL,它允许我使用来自{{的SNMP开始联系设备3}}网站。
但是,我有两个相似的问题:
我尝试引用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并尝试修复为什么它会因一般错误而不断出错吗?
任何帮助表示感谢。
答案 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.Walk
和Messenger.BulkWalk
方法(看起来类似),也显示了如何进行WALK操作。