Python で SNMP
IoTPython
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
<いろいろ略>

リンク集