0

snmpwalk を使用して Python でスクリプトを作成し、スイッチに接続されている現在のデバイスと、それらが使用しているポートを取得しようとしています (MAC アドレスを取得し、データベースを使用して IP またはホスト名に変換します) )。

さて、すべてうまくいっていますが、この情報の OID 番号がスイッチによって異なることに気付きました。

この OID を取得しようとしています: 1.3.6.1.2.1.17.4.3.1.2

これは正常に機能し、MAC とポート番号を取得します。

しかし、私のスイッチのいくつかにはこれがあります: 1.3.6.1.2.1.17.7.1.2.2 そして他のスイッチには: 1.3.6.1.2.1.17.4.3.1.2

私はそれについてかなり混乱しており、名前の代わりに OID 番号をうまく探しているかどうか疑問に思っています。とにかく、いくつかの名前 (sysUpTime など) を使用して情報を見つけようとしましたが、snmpwalk は名前では機能しません (少なくとも、私には機能せず、この情報を取得するためにどの名前を使用する必要があるかわかりません)。たとえば、私は試しました:

$ snmpwalk -v 1 -c public sea-kmSwitch dot1dTpFdbPort
dot1dTpFdbPort: Unknown Object Identifier (Sub-id not found: (top) -> dot1dTpFdbPort)

Pythonにsnmpモジュールがあることは知っていますが、適切なドキュメントと例(pysnmp、pynetsnmp)が見つからなかったため、Linuxコマンドを使用してスクリプトを実行しようとしました.

問題は、どの OID 番号を取得する必要があるかをどのように知ることができるかということです。任意の OID 名を使用できますか? そしてどうやって?

私の英語に感謝し、申し訳ありません。

4

1 に答える 1

1

MIB ファイルが配置されているパスと、使用する MIB ファイルのリストをエクスポートしていないため、プログラムは SNMP 名で動作しません。

NET-SNMP フレームワーク (snmpwalk コマンドなど) で Linux を使用する場合は、スクリプトを実行する前に、環境変数 MIBDIR と MIBS を設定してください。

export MIBDIR=<path_to_mib_files>
export MIBS=ENTITY-MIB:SNMPv2-TC:<any_other_mibs_you_need>

SNMP 名の形式で OID (つまり、1.3.6.1.2.1.1.6.0 の代わりに sysLocation.0) を使用してコマンドを呼び出す直前に、実行中にスクリプトでこれらの変数を直接エクスポートできます。

MIB 変数には、必要以上に幅広い MIB ファイルのセットを定義する必要があることに注意してください。これは、特定の MIB ファイルが RFC ベースの MIB ファイルを使用している可能性が高いためです。どの MIB ファイルをエクスポートする必要があるかを確認するには、関心のある MIB 内の IMPORTS セクションを調べてください。

それが役立つことを願っています。

于 2012-08-27T18:20:30.087 に答える