curlで無線LANルータ(AtermWR9500N)を再起動させる

 2016-10-13
ボタンポチ!でルータの再起動できると、たまーに役に立つ場面があるのでscriptを作っておくとたまーに便利です。
 
curlでルータを再起動するシリーズの三つ目。
  1. curlでWR-4100Nの再起動をさせてみる
  2. curlでBBR-4MGを再起動させてみる
  3. curlで無線LANルータ(AtermWR9500N)を再起動させる ←いまここ


いつものようにパケットを捕まえてみて、同じようなパケットを投げつければオッケーです。
パケットを確認するにはwiresharkがあれば充分ですが、たとえばfirefoxのLive HTTP Headersなどのアドオンでのキャプチャ結果からも推測できますです。


Aterm WR9500N用の再起動スクリプト

#!/bin/bash -f

CURL="/usr/bin/curl"
ROUTER_ADDR="192.168.64.1"
USER_NAME="root_user_name"
PASS_WORD="root_user_password"



### GET SESSION_ID
SESSION_ID=`${CURL} -s -m 5 http://${USER_NAME}:${PASS_WORD}@${ROUTER_ADDR}/index.cgi/reboot_main |\
grep 'SESSION_ID' | tail -1 | cut -d "'" -f 8 `

### reboot ROUTER
${CURL} -s -m 5 -d DUMMY="" -d DISABLED_CHECKBOX="" -d CHECK_ACTION_MODE=0 -d SESSION_ID="${SESSION_ID}" \
http://${USER_NAME}:${PASS_WORD}@${ROUTER_ADDR}/index.cgi/reboot_main_set > /dev/null 2>&1


やってること

購入後しばらくは、postで再起動を指定しつつ、ユーザとパスワードを送付してやればそれで再起動できていたのですが、ファームウェアの更新でセッションIDを必要とする仕様に変わりました。
なので、最初に真っ当にログイン画面を取得して、そこに含まれるセッションIDを入手しています。


最初のcurlコマンドでセッションIDを入手しています。IDそのものはただ単にhtmlに平文で書かれているので、grepして行を絞り、tail -1で1行だけ取り出し、cutでIDの部分だけ切り出しています。

最後に、入手したセッションIDを使用する形で再起動のリクエストを発行しています。


ルータのwebインターフェースにログインする → 再起動の操作にて再起動させる という流れのパケットを順番に見ていけば真似っこするのはそう難しくないと思います。



今回はセッションIDがhtmlに平文で書かれていたので単に文字列を切り出してきて利用しましたが、モノによってはログイン時のcookie情報が必要になったりするものもあります。その場合は、ログイン時のcookieを-cオプションで取っておき、再起動リクエストを発行する際に-bオプションでそのcookieを利用する形にすれば大抵はオッケーですね。

例:
## get cookie
curl -s -m 5 -L -c /tmp/login_cookie -d hogehoge="login suruyo" \
http://username:passowrd@router-addr/login

### reboot
curl -s -m 5 -L -b /tmp/login_cookie -d hogehoge="reboot sitaiyo" \
http://username:password@router-addr/reboot

### clean
\rm -f /tmp/login_cookie




 
コメント












管理者にだけ表示を許可する
トラックバック
トラックバックURL:
http://wbbwbb.blog83.fc2.com/tb.php/255-1ce8f1dd
≪ トップページへこのページの先頭へ  ≫