RV-230SEの情報を取得するshell script
/usr/local/bin/chkgwipという名前で、次のようなシェルプログラムを作ってみた。
RV-230SEのファームウェアの更新によって、Web画面のメッセージの表示形式が変わってしまい、下記のスクリプトではIPアドレスの情報を拾えなくなった。新しいバージョンは“RV-230SEの情報を取得するシェルスクリプト Ver.2”に載せておいた。
1 #! /bin/sh 2 3 # chkgwip Ver 0.0000000001 (2008/03/27) 4 # Copyright (C) 2008 Adsaria 5 6 # This program is free software; you can redistribute it and/or 7 # modify it. This program is distributed in the hope 8 # that it will be useful, but WITHOUT ANY WARRANTY. 9 10 CMD=`basename $0` 11 12 GATEWAY_IP_FILE=/var/local/gatewayip 13 14 #################### Environment dependent variables 15 GATEWAY_USER=******** 16 GATEWAY_PASSWORD=******** 17 MAIL_TO=********@********.jp 18 MAIL_SUBJECT="RV-230SE_Report" 19 ZIP_PASSWORD=******** 20 #################### 21 22 TMP_FILE=/tmp/${CMD}_$$.txt ; rm -f $TMP_FILE 23 TMP_ZIP_FILE=${TMP_FILE}.zip 24 25 MessageAndLog () { 26 # echo "$1" 27 logger "$1" 28 } 29 30 wget -q -O "$TMP_FILE" \ 31 --http-user="$GATEWAY_USER" \ 32 --http-password="$GATEWAY_PASSWORD" \ 33 'http://ntt.setup/cgi-bin/main.cgi?mbg_webname=status' 34 35 if [ $? -ne 0 ]; then 36 MessageAndLog "$CMD: Can not connect to the gateway." 37 rm -f $TMP_FILE 38 exit 1 39 fi 40 41 sed -i -e "1,/^WAN IP/d" $TMP_FILE 42 WAN_IP=`head -1 $TMP_FILE | awk -F '[:<>]' '{print $4}'` 43 44 sed -i -e "1,/^Peer IP/d" $TMP_FILE 45 PEER_IP=`head -1 $TMP_FILE | awk -F '[:<>]' '{print $4}'` 46 47 sed -i -e "1,/^DNS Server/d" $TMP_FILE 48 DNS_SERVER=`head -1 $TMP_FILE | awk -F '[:<>]' '{print $4}'` 49 50 SEND_MAIL=no 51 if [ -f $GATEWAY_IP_FILE ]; then 52 PREV_WAN_IP=`head -1 $GATEWAY_IP_FILE` 53 if [ "$PREV_WAN_IP" != "$WAN_IP" ]; then 54 MessageAndLog "$CMD: New gateway IP address: $WAN_IP" 55 SEND_MAIL=yes 56 echo $WAN_IP > $GATEWAY_IP_FILE 57 else 58 MessageAndLog "$CMD: gateway IP address is unchanged." 59 fi 60 else 61 SEND_MAIL=yes 62 echo $WAN_IP > $GATEWAY_IP_FILE 63 fi 64 65 if [ $SEND_MAIL = "yes" ]; then 66 rm -f $TMP_FILE 67 echo "$CMD:New gateway IP address: $WAN_IP" >> $TMP_FILE 68 echo " New peer IP address: $PEER_IP" >> $TMP_FILE 69 echo " New dns IP address: $DNS_SERVER" >> $TMP_FILE 70 zip -q -P "$ZIP_PASSWORD" - $TMP_FILE > $TMP_ZIP_FILE 71 echo "Gateway IP address have been changed." | \ 72 mutt -s "$MAIL_SUBJECT" -a $TMP_ZIP_FILE -- $MAIL_TO 73 fi 74 75 rm -f $TMP_FILE 76 rm -f $TMP_ZIP_FILE 77 exit 0
もともと、RV-230SEという機種に依存したプログラムなので汎用性はあまり考えずに各種パラメータもハードコーディングしてしまった。(汎用性を高めるのあれば、ユーザ名やメールアドレスは引数で渡すべきだろう。)ただし、環境に依存する変数は15〜19行目にまとめてあるので、ここを変えればある程度の環境には対応できると思う。
コマンドライン・インタフェースを持ったルータであればtelnet(ssh)を使ってもう少し柔軟にやり取りできるが、WebインタフェースをしかないとwgetでターゲットなるHTMLページを持ってくるしかないだろう(30行目)。(ポート80番に対してtelnetを使ってHTMLページを取得する方法もあるが、wgetを使ったほうが楽だ。)この方法だと、一旦ページを取得して、人間が解析してプログラムを組む必要がある(41〜48行目)。ファームウェアのアップデートなどでページの構成が変わった場合にはプログラムを変更する必要があるかも知れない。ただ、基本的には同じ方法で他の機器にも応用はできる。