[解決済み] PySNMP による snmpwalk
2022-02-17 07:49:33
質問
以下のSNMPコマンドの動作を再現したいのですが。
snmpwalk -v2c -cpublic 192.168.0.10 1.3.6.1.2.1.25.2.3.1.3
このように出力されます。
iso.3.6.1.2.1.25.2.3.1.3.1 = STRING: "Physical memory"
iso.3.6.1.2.1.25.2.3.1.3.3 = STRING: "Virtual memory"
iso.3.6.1.2.1.25.2.3.1.3.6 = STRING: "Memory buffers"
iso.3.6.1.2.1.25.2.3.1.3.7 = STRING: "Cached memory"
iso.3.6.1.2.1.25.2.3.1.3.8 = STRING: "Shared memory"
iso.3.6.1.2.1.25.2.3.1.3.10 = STRING: "Swap space"
iso.3.6.1.2.1.25.2.3.1.3.31 = STRING: "/"
iso.3.6.1.2.1.25.2.3.1.3.37 = STRING: "/run"
iso.3.6.1.2.1.25.2.3.1.3.39 = STRING: "/dev/shm"
iso.3.6.1.2.1.25.2.3.1.3.40 = STRING: "/run/lock"
iso.3.6.1.2.1.25.2.3.1.3.41 = STRING: "/sys/fs/cgroup"
iso.3.6.1.2.1.25.2.3.1.3.59 = STRING: "/tmp"
iso.3.6.1.2.1.25.2.3.1.3.60 = STRING: "/run/cgmanager/fs"
iso.3.6.1.2.1.25.2.3.1.3.61 = STRING: "/run/user/112"
iso.3.6.1.2.1.25.2.3.1.3.63 = STRING: "/run/user/0"
そこで、次のコードを試してみました。
#!/usr/bin/env python3
from pysnmp.hlapi import *
def walk(host, oid):
for (errorIndication,errorStatus,errorIndex,varBinds) in nextCmd(SnmpEngine(),
CommunityData('public'), UdpTransportTarget((host, 161)), ContextData(),
ObjectType(ObjectIdentity(oid))):
if errorIndication:
print(errorIndication, file=sys.stderr)
break
elif errorStatus:
print('%s at %s' % (errorStatus.prettyPrint(),
errorIndex and varBinds[int(errorIndex) - 1][0] or '?'),
file=sys.stderr)
break
else:
for varBind in varBinds:
print(varBind)
walk('192.168.0.10','1.3.6.1.2.1.25.2.3.1.3')
で、問題は、不要なOIDを大量に返してしまうことです...。
を使ったりと、いろいろと試してみました。
getCmd()
関数がありますが、なかなか思い通りにいきません。
外部からの
snmpwalk
コマンドを使用することができますが、Pythonモジュールを使用して解決策を見出すことを希望します。
何かいい方法はないでしょうか?
どのように解決するのですか?
を渡してみてください。
辞書モード
キーワード引数を
nextCmd()
. 例えば、以下のようになります。
for (errorIndication,
errorStatus,
errorIndex,
varBinds) in nextCmd(SnmpEngine(),
CommunityData('public'),
UdpTransportTarget((host, 161)),
ContextData(),
ObjectType(ObjectIdentity(oid)),
lexicographicMode=False):
...
これにより、SNMPウォークに与える初期OIDに上限を設定する効果があります(ここで言う不要なOIDとは、プレフィックスから外れるOIDのことだと仮定します)。
関連
-
[解決済み】`jupyter notebook`実行時のエラー(No such file or directory)
-
[解決済み] Pythonで "filter "オブジェクトの長さを求める方法
-
[解決済み] PyCharmでpython 3.4を使用する際にInvalid Python SDK Errorが発生する。
-
[解決済み] OpenBLAS blas_thread_init: pthread_create: リソースが一時的に利用できない
-
[解決済み] Python 3 の requests.get でデータを取得する前にページがロードされるのを待つ
-
[解決済み] Python3.7でpip3 psycopg2を実行しようとするとエラー: pg_config executable not foundが発生します。
-
[解決済み] python3 で cv2 をインポートするには?
-
[解決済み] Python SSL証明書検証エラー
-
[解決済み] シンタックスエラーと変数アノテーションのターゲットが不正であるというエラーが発生します。どうすれば直せますか?[クローズド]
-
[解決済み] Python 3 のバイト列変数を通常の文字列に変換するにはどうすればよいですか?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 raise TypeError(repr(o) + " is not JSON serializable")
-
[解決済み] シンタックスエラーと変数アノテーションのターゲットが不正であるというエラーが発生します。どうすれば直せますか?[クローズド]
-
[解決済み] TypeError: append() に 1 つの必須位置引数がない: 'values'
-
[解決済み] Python 3 で complex を float に変換できない。
-
[解決済み] Python 3 の requests.get でデータを取得する前にページがロードされるのを待つ
-
[解決済み] PySNMP による snmpwalk
-
[解決済み] xml.parsers.expat.ExpatError: 整形式でない(無効なトークン)。
-
[解決済み] ImportError: libcublas.so.9.0: 共有オブジェクトファイルを開くことができない
-
[解決済み] python3のdateutil.parserの代わりとなるものは何ですか?
-
[解決済み] テキストファイルに辞書を書き込む?