パケット定額を利用して自宅鯖でゴニョゴニョやってしまおうという計画の第1段。
まず、SNMP関係一式を入れなければなりません。とりあえず解説としてこのページがまとまってたのでそのまま借用。このページではMTRGを使っていますが、今回はsnmpマネージャは自作するので、SMNPサービスとMotherBoard Monitor 5、そしてSNMP Informantだけを入れればOKです。
次にSMNPマネージャですが、今回はPHPを使って書くことにします。PHPにはSMNPモジュールが含まれていますが、デフォルトでは無効になっているので、有効にしてやります。まずphp.iniの
の行のコメントアウトを外します。次に、php配布パッケージのextensionsディレクトリの中に入っている、php_snmp.dllをsystem32フォルダにコピーします。あとはApacheを再起動すればOK。
では肝心のソースです。
まぁ簡単に解説を。1行目でsmnpエージェントからデータを引っ張ってきています。第3引数の「
2行目。snmpwalkoid()で返される受信オクテット数は、「Counter32: 146940496」という形式になっています。欲しいのは数字の部分だけなのでsplitで分割するわけですが、なぜ配列の要素を指定しているかといいますと。
snmpwalkoidで返される受信オクテット数は、大抵2つ以上の要素のある配列になっています。これは要するにネットワークインターフェイスが2つ以上あるため(1つは127.0.0.1、つまり自分から自分へ。2つ目が実際のNIC)です。今回は実際のNICの受信オクテット数が知りたいので、配列の要素の1つを指定しています。
で、3行目でMB単位へ変換し、4行目で出力、と。
ちなみに、OIDわかんねーよウワァァンという方は、同じくこちらのページに解説があるMIBブラウザを使うとよろしいかと。
次にSMNPマネージャですが、今回はPHPを使って書くことにします。PHPにはSMNPモジュールが含まれていますが、デフォルトでは無効になっているので、有効にしてやります。まずphp.iniの
extension=php_snmp.dll
の行のコメントアウトを外します。次に、php配布パッケージのextensionsディレクトリの中に入っている、php_snmp.dllをsystem32フォルダにコピーします。あとはApacheを再起動すればOK。
では肝心のソースです。
$InOctets=snmpwalkoid("localhost","cru_central",".1.3.6.1.2.1.2.2.1.10");
$tmp=preg_split("/: /",$InOctets['.iso.3.6.1.2.1.2.2.1.10.16777220']);
$InOctets=$tmp[1]/(1024*1024);//MB単位に変換
printf("総受信バイト数は%.2fMBです。",$InOctets);
まぁ簡単に解説を。1行目でsmnpエージェントからデータを引っ張ってきています。第3引数の「
.1.3.6.1.2.1.2.2.1.10
」というのがOID、まぁsnmpでいうところの項目名みたいなものですが、これを指定しています。テキストフォーマットで書くと「.iso.org.dod.internet.mgmt.mib-2.interfaces.ifTable.ifEntry.ifInOctets
」という感じ。これで分かると思いますが、ネットワーク経由で受信したオクテット数(=バイト数)が取得できます。2行目。snmpwalkoid()で返される受信オクテット数は、「Counter32: 146940496」という形式になっています。欲しいのは数字の部分だけなのでsplitで分割するわけですが、なぜ配列の要素を指定しているかといいますと。
snmpwalkoidで返される受信オクテット数は、大抵2つ以上の要素のある配列になっています。これは要するにネットワークインターフェイスが2つ以上あるため(1つは127.0.0.1、つまり自分から自分へ。2つ目が実際のNIC)です。今回は実際のNICの受信オクテット数が知りたいので、配列の要素の1つを指定しています。
で、3行目でMB単位へ変換し、4行目で出力、と。
ちなみに、OIDわかんねーよウワァァンという方は、同じくこちらのページに解説があるMIBブラウザを使うとよろしいかと。
コメント