PythonバインディングからネットSNMPライブラリのすべてのグローバルな内部状態をリセットする

StackOverflow https://stackoverflow.com/questions/3940057

質問

コマンドインターフェイスとしてSNMPエージェントを実行するこのハードウェア+ソフトウェアテストの主題の自動統合テストを作成しようとしています。私たちのテストセットアップは次のようになります。フィットネスをテストランナーとして使用し、Pyfitを使用してPythonでテストを作成できます。次に、Pythonバインディングを使用してNetsNMPを使用してSNMPコマンドを送信します。これは非常にうまく機能します。

ただし、スイートを実行しようとすると、SNMPエージェント(被験者の主題)が再起動され(通常は異なるシミュレーション時間)、NetSNMPの内部があらゆる種類の興味深いエラーを取得します。

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

私の問題は、内部のグローバル状態がリセットされるように(Python Bindingsから)NetsNMPライブラリを再現するにはどうすればよいですか? pythonバインディングのnetsnmp.sessionオブジェクトは、パラメーターEnginetimeとEnginebootsを取り、それらを0に設定するとリセットされますが、実際にはそれはそうではないようです。また、リセットする必要がある他のグローバルな状態があるかどうかもわかりません。

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

役に立ちましたか?

解決

SNMPV3には後方に進む必要があるため、EnginetimeとEngineBootsの値はおそらくあなたをいじり上げているものです。ゼロから再起動していないエージェントがブーツカウントである場合(これは違法ですが、テストの下で、なぜそうするのかがわかりました)、ブーツと時間の内部概念をリセットする必要があります。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top