動機
別記事 で Wi-Fi 打刻について調べていたとき、この事例 を通して snmpwalk
を用いた接続機器の情報取得に興味を持ったため。
環境構築
今回、自宅ネットワーク上にある Raspberry Pi を SNMP マネージャとして稼働させ、MIB を受信する方針とする。download-mibs もしておく。
1
2
3
4
sudo apt-get install snmpd
sudo apt-get install snmp
sudo apt install snmp-mibs-downloader
sudo download-mibs
ufw を用いて、SNMP に用いられるポート 161, 162 を開けておく。SSH で作業をしているので、22 番ポートも開ける。
1
2
3
4
5
sudo ufw default deny
sudo ufw allow 22
sudo ufw allow 161
sudo ufw allow 162
sudo ufw enable
また、デフォルトの設定に記載されている public
では .1.3.6.1.2.1.1
と .1.3.6.1.2.1.25.1.1
以下しか閲覧できないようになっている (こちら を参照) ため、全てのサブツリーを閲覧できるように private という community を用意しておく。具体的には、/etc/snmp/snmpd.conf
を編集し、以下の一行を追加する。
1
rocommunity private 127.0.0.1 .1
上記の設定後、snmpd を再起動。
1
sudo service snmpd restart
接続されている機器の private IP や Mac Address を取得する
MIB の OID は階層構造になっている (こちら を参照)。ここでは、試しに Table ipNetToPhysicalTable
を取得してみることにする。
1
snmpwalk -v 2c -c private 127.0.0.1 .1.3.6.1.2.1.4.35.1
これにより、以下のような出力を得ることができる。
1
2
3
4
5
6
7
IP-MIB::ipNetToPhysicalPhysAddress.2.ipv4."192.168.11.1" = STRING: xx:xx:xx:xx:xx:xx
IP-MIB::ipNetToPhysicalPhysAddress.2.ipv4."192.168.11.8" = STRING: xx:xx:xx:xx:xx:xx
IP-MIB::ipNetToPhysicalPhysAddress.3.ipv4."192.168.11.12" = STRING: xx:xx:xx:xx:xx:xx
...(中略)...
IP-MIB::ipNetToPhysicalState.2.ipv4."192.168.11.1" = INTEGER: reachable(1)
IP-MIB::ipNetToPhysicalState.2.ipv4."192.168.11.8" = INTEGER: stale(2)
IP-MIB::ipNetToPhysicalState.2.ipv4."192.168.11.12" = INTEGER: delay(3)