RV-230SEの情報を取得するシェルスクリプト Ver.2
リモートの拠点にSSHでアクセスできなくなっていた。いつの間にかグローバルIPアドレスが付け変わっていた。リモート拠点内のLinux PCからブロードバンドルータのWAN側アドレスを監視して変更があればメールを出すようにしていたのだが....。(詳しくは“グローバルアドレスの変更をメールで確認する”参照)
調べてみると、ブロードバンドルータ(NTTブランドのRV-230SE)のファームの自動更新の際に、IPアドレスの表示形式が変わったようだ。以前は英語での見出し(例えば“WAN IP”)だったのが日本語の見出し(“WAN側IPアドレス”)に変わっていた。自動運用ツールとか作っている人も居るんだから、安易に変えて欲しくないなぁ、と思いつつも、仕方ないのでシェルスクリプトを作り直した。
#! /bin/sh # chkgwip_RV-230SE Ver 0.0000000002 (2009/11/20) # Copyright (C) 2008-2009 Adsaria # This program is free software; you can redistribute it and/or # modify it. This program is distributed in the hope # that it will be useful, but WITHOUT ANY WARRANTY. CMD=`basename $0` GATEWAY_IP_FILE=/var/local/gatewayip #################### Environment dependent variables GATEWAY_USER="user" GATEWAY_PASSWORD="MY_PASSWORD" MAIL_FROM="SENDER@MAIL_ADDRESS" MAIL_TO="RECIVER@MAIL_ADDRESS" MAIL_SUBJECT="RV-230SE_Report" ZIP_PASSWORD="MY_ZIP_PASSWORD" #################### TMP_FILE="/tmp/${CMD}_`date +%Y%m%d%H%M%S`.txt" ; rm -f "$TMP_FILE" TMP_ZIP_FILE=${TMP_FILE}.zip : rm -f "$TMP_ZIP_FILE" TMP_HEADER_FILE=${TMP_FILE}.header : rm -f "$TMP_HEADER_FILE" MessageAndLog () { # echo "$1" logger "$1" } ##### Begin of router depended ################################################# wget -q -O - \ --http-user="$GATEWAY_USER" \ --http-password="$GATEWAY_PASSWORD" \ 'http://ntt.setup/cgi-bin/main.cgi?mbg_webname=status' \ | nkf -w > "$TMP_FILE" if [ $? -ne 0 ]; then MessageAndLog "$CMD: Can not connect to the gateway." rm -f $TMP_FILE exit 1 fi sed -i -e "1,/^WAN側IPアドレス/d" $TMP_FILE WAN_IP=`head -1 $TMP_FILE | sed -e 's/<[^>]*>:\([0-9.]*\).*/\1/'` sed -i -e "1,/^接続先IPアドレス/d" $TMP_FILE PEER_IP=`head -1 $TMP_FILE | sed -e 's/<[^>]*>:\([0-9.]*\).*>/\1/'` sed -i -e "1,/^DNSサーバアドレス/d" $TMP_FILE DNS_SERVER=`head -1 $TMP_FILE | sed -e 's/<[^>]*>:\([0-9.]*\).*>/\1/'` echo "WAN側IPアドレス $WAN_IP" > $TMP_FILE echo "接続先IPアドレス $PEER_IP" >> $TMP_FILE echo "DNSサーバアドレス $DNS_SERVER" >> $TMP_FILE ##### End of router depended ################################################### if [ -z "$WAN_IP" ]; then MessageAndLog "$CMD: Can not get IP address of the gateway." rm -f $TMP_FILE exit 1 fi NULL=`echo -n "$WAN_IP" | sed -e 's/^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$//'` if [ -n "$NULL" ]; then MessageAndLog "$CMD: IP address of the gateway is corrupted." rm -f $TMP_FILE exit 1 fi SEND_MAIL=no if [ -f $GATEWAY_IP_FILE ]; then PREV_WAN_IP=`head -1 $GATEWAY_IP_FILE` if [ "$PREV_WAN_IP" != "$WAN_IP" ]; then MessageAndLog "$CMD: New gateway IP address: $WAN_IP" SEND_MAIL=yes echo $WAN_IP > $GATEWAY_IP_FILE else MessageAndLog "$CMD: gateway IP address is unchanged." fi else MessageAndLog "$CMD: No GatewayIP file... Creating new file, IP address: $WAN_IP" SEND_MAIL=yes echo $WAN_IP > $GATEWAY_IP_FILE fi if [ $SEND_MAIL = "yes" ]; then echo "From: $MAIL_FROM" > $TMP_HEADER_FILE echo "To: $MAIL_TO" >> $TMP_HEADER_FILE echo "Subject: $MAIL_SUBJECT" >> $TMP_HEADER_FILE echo "" >> $TMP_HEADER_FILE zip -q -P "$ZIP_PASSWORD" - $TMP_FILE > $TMP_ZIP_FILE echo "Gateway IP address have been changed." | \ mutt -H "$TMP_HEADER_FILE" -a $TMP_ZIP_FILE fi rm -f $TMP_FILE rm -f $TMP_ZIP_FILE rm -f $TMP_HEADER_FILE exit 0