0

私は自分のアプリケーションで SNMP スキャンに統合しようとしており、Google を調べて例などを見つけようとしました。このWeb サイトからの SNMP を使用してデバイスに接続できるようにする SNMPSharpNet DLL に出会いました。

ただし、同様に関連する2つの問題があります。

  1. このWeb サイトを参照して、Cisco Catalyst 2960 スイッチをスキャンしようとするときに使用する oID を判断しようとしましたが、何も返されませんでした (エラーも結果もありません)。正しく動作させる (すべてをプルする) 唯一の方法は、oID 1 を使用することでした。これにより、スイッチからすべてをプルバックするように設定されるため、特定の 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 を使用して、一般的なエラーで継続的にエラーが発生する理由を修正できますか?

どんな助けでも感謝します。

4

1 に答える 1

0

MIB ブラウザが何であるかをたまたま知っている場合は、それを使用して標準 MIB ドキュメントを調べてみると、「iso」の OID が使用されているほとんどの OID のルートであることがわかります。これにより、 WALK 操作が実際に必要なアイテムをダンプすることが保証されます。

私は Cisco Catalyst 2960 を持っていないので、「何も返さなかった」という意味を正確に再現できませんでした。デバイスが OIDVIEW などのサイトにあるすべての OID リストを実装することを期待しないでください。常にデバイスのマニュアルとベンダーの資料を参照する必要があります。

snmpsharpnet のドキュメントを確認したところ、あなたのコードはそこから派生したものであることがわかりました。悲しいことに、Milan は WALK 機能を提供できませんでした。また、 http: //www.snmpsharpnet.com/?page_id=108 にリストされているコード フラグメントは誤解を招く可能性があるため、2 番目の質問が表示されます。

GET-NEXT が NoSuchName エラーをヒットして、使用可能なすべての OID がダンプされたことを示す必要があるため、SNMP エラーが予想されます。ただし、snmpsharpnet のサンプル コードでは、これが予期されることであるとユーザーに伝えていません。NoSuchName エラーが発生しないため、GET-BULK ベースの WALK サンプルは正しいです。

(広告ではありませんが) 参考までに、#SNMP には、 WALK 操作を行う方法も示すメソッドMessenger.WalkMessenger.BulkWalkメソッド (似ているように見えます) があります。

于 2014-10-16T13:44:54.090 に答える