leo-net認証スクリプト
今住んでいる家がレオパレスさんの所で、leonetの認証が面倒くさいので認証スクリプトを書いた。
leonetの認証
leonetでは、未認証の状態で任意のURLへアクセスすると認証用のページへリダイレクトされる(たぶん、ルータによって)。そのページで認証を済ませると、leonetのウェブサイトにリダイレクトされる。認証はbasic認証だと思う。そして、一定時間通信がなかった場合、再度認証を求められる。何時間だったのかは調べてませんw。
もし万が一、このスクリプトを利用される場合
自己責任のもとで使用して下さい。
初期版
これは、どこかのサイト(忘れた)でleonetの認証にwget使ったらいいんじゃねということが書いてあったので、それを参考にして書いたもの。
#!/bin/sh # leonet認証スクリプト # filename : leonet_auth.sh # date : 21-Jan-2011 # author : furu # Input your id & password. id= pass= wget --http-user=${id} --http-password=${pass} http://www.google.co.jp/ rm index.html echo "index.htmlを削除しました.\n" echo "認証が完了しました!" read uho
改良?版
(以下、セキュリティうんぬんの所は間違ったことを書いているかもしれないので、間違っていればご指摘下さい。)
初期版のスクリプトでは、認証してようがしてまいがwgetを実行してしまうので、指定したURLにユーザIDとパスワードを送信してしまいセキュリティ的に危ないんじゃないかと思った。
そこで、インターネットにつながっているかどうかを確認し、つながっていなければwgetを使って認証をする、つながっていれば何もしないという機能を付け足すことにした。
インターネットにつながっているかどうかの確認はステータスコードで確認するものとし、ステータスコードはcurlの-IオプションでHTTPヘッダーを取得、それをファイルに書き出して、そのファイルをgrepでステータスコードがPETTERN(ここでは、^HTTP/1.1 200 OK)に一致するかどうかを調べる。grepした結果、PETTERNに一致するのものが見つかれば特殊変数$?に0が、見つからなければ1が入るので、それをif文に利用して、wgetを実行するかどうかを分岐させる。
WEB+DB PRESSのシェルスクリプトの特集(いつのかは忘れた)をすこーし参考にさせていただきました。
#!/bin/sh # leonet認証スクリプト(improved) # filename : leonet_auth_improved.sh # date : 8-April-2011 # author : furu # Input your id & password. ID= PASS= SERVER="www.google.co.jp" PETTERN="^HTTP/1.1 200 OK" # mktemp -t : /tmp/ 以下にtmp.XXXXXXXXXXを作成 # 下のじゃ動かない。tmplogfileには'mktep -t tmp.XXXXXXXXXX'が文字列で入る。 # tmplogfile='mktemp -t tmp.XXXXXXXXXX' || exit 1 touch tmp # get http header for $SERVER curl -I ${SERVER} > tmp 2> /dev/null grep "${PETTERN}" tmp > /dev/null 2>&1 if [ ${?} -eq 0 ] then echo "${SERVER} -> OK\n" echo "Authentication has been done.\n" else echo "${SERVER} -> NG\n" echo "start authentication ..." wget --http-user=${ID} --http-password=${PASS} http://www.google.co.jp/ 2> /dev/null rm index.html echo "Authentication was completed!\n" fi rm tmp # Wait. read uho
はまったところ
スクリプトを実行すると↓のメッセージが出てif文がうまく動かなかった。
[: 42: missing ]
42とかあるから42行目にあるfiが原因なのかなーとか思ってたけど、
これは
if [ $? -ep 0]
と0と]の間にスペースがないことが原因だった。
スペースを忘れずに!
参考:http://d.hatena.ne.jp/hatappo/20100219/1266569445
うまくいかなかったところ
mktempうんぬんのところ。