1

コマンドインターフェイスとしてSNMPエージェントを実行するこのハードウェアとソフトウェアのテスト対象の自動統合テストを作成しようとしています。テストのセットアップは次のようになります。Fitnessをテストランナーとして使用し、PyFitを使用してPythonでテストを記述できるようにしています。次に、Pythonバインディングでnetsnmpを使用してSNMPコマンドを送信します。これはかなりうまくいきます。

ただし、スイートを実行しようとすると、SNMPエージェント(テスト対象)が再起動され(通常は別のシミュレートされた時間に)、netsnmpの内部であらゆる種類の興味深いエラーが発生します。

コミュニティ名やコンテキスト名などのnetsnmpライブラリ内に多くのグローバル状態が保存されており、問題があるのは、SNMPv3でのリプレイ攻撃を防ぐために使用されるEngineTimeとEngineBootCntです。これにより、エージェントは私のsnmpコマンドを拒否します。

私の問題は、内部のグローバル状態がリセットされるように、(Pythonバインディングから)netsnmpライブラリを再初期化する方法です。Pythonバインディングのnetsnmp.Sessionオブジェクトは、パラメーターEngineTimeとEngineBootsを取り、それらを0に設定するとリセットされるはずですが、実際にはそうはならないようです。また、リセットする必要のある他のグローバル状態がそこにあるかどうかもわかりません。

純粋なpythonsnmpライブラリpysnmpを使用するようにテストを書き直す必要があると思う時点ですが、それを避けたいと思っていました。

4

1 に答える 1

1

engineTimeとengineBootsの値は、SNMPv3が逆方向に進まないことを要求しているため、おそらく混乱しているものです。ゼロから再起動し、ブートカウントをインクリメントしないエージェントがある場合(これは違法ですが、テストでは、なぜそうするのかがわかりました)、ブートと時間の内部概念をリセットする必要があります。

ただし、これらを0と0に設定しても、これらがデフォルトであると想定されるため、役に立ちません。代わりに、それらの1つを「1」に変更する必要があります。これにより、オーバーライド句が実際に値を使用するようにトリガーされます。時間を1に設定して試してみてください。うまくいくと思います(うまくいかない場合は、代わりに両方を1に設定して試してください)。

于 2010-10-19T12:25:29.197 に答える