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