Python で SNMP
2019-6-13 4:00 JST
github のサンプル・ソースがすべて。ありがとう。誰か。
pysnmp をインストールしてサンプル動かします。もー簡単です。対象は社内の BROTHER のプリンタ2つ。API が2つあるみたいですが、どっちでも OK.自分の環境に合わせるためには IP アドレスと OID を設定するだけ。差分だけ掲載します。
$ pip3 install pysnmp $ git clone https://github.com/thinkAmi-sandbox/PySNMP-sample
get_request.py
OID_MARKER_PROCESS_COLORANTS = "1.3.6.1.2.1.1.5.0"
IP = "192.168.0.119"
PORT = 161
SNMP_COMMUNITY = "public"
OID
この情報(OID)あさるのが大変でした。プリンタは RFC3805 がすべて。hrPrinterStatus(1.3.6.1.2.1.25.3.5.1.1.1)で稼働状態がhrPrinterDetectedErrorState(1.3.6.1.2.1.25.3.5.1.2.1)でエラー状態がわかります。OCTET STRING のビット0が一番左です。注意(ネットオーダ?)。プリンタのさらなる情報は RFC2790 です(RFC1514 の書き直し版)。
BROTHER のプリンタ
とはいえ実際のプリンタの状況を見ないと何とも言えません。iso.3.6.1.2.1.43 (プリンタの諸設定) を snmpwalk で全部 walk して一枚プリントしてから diff で差をとります。iso.3.6.1.2.1.43.10.2.1.4.1.1 がどうやらプリント枚数みたいです。なお、BROTHER ふる~~~いのプリンタは -v 1でないと返事をしてくれませんでした。
> apt install --dry-run snmp <中略> snmp はすでに最新バージョン (5.7.3+dfsg-1.8ubuntu3.1) です。 アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 198 個。 $ snmpwalk -v 2c -c public 192.168.0.XXX iso.3.6.1.2.1.43 $ diff all0.txt all1.txt <いろいろ略> 513,514c513,514 < iso.3.6.1.2.1.43.10.2.1.4.1.1 = Counter32: 5139 < iso.3.6.1.2.1.43.10.2.1.5.1.1 = Counter32: 238 --- > iso.3.6.1.2.1.43.10.2.1.4.1.1 = Counter32: 5140 > iso.3.6.1.2.1.43.10.2.1.5.1.1 = Counter32: 239 <いろいろ略>
リンク集
誰かが書いた PySNMP のサンプル。 ありがとう、誰か。
そして誰かが訳した rfc3805。
そして誰かが訳した rfc2790。
そして誰かサービスしている OID の一覧。
そして誰かが訳した rfc1157。