2026年8月アーカイブ

● 背景
2010年とかそれ以前は、いわゆる一般家庭向けのルータ、BB(ブロードバンド)ルータは、設定管理画面にアクセスするのに、HTTP Basic認証を使っていた。ので、curlなどのコマンドを使って一発でいろいろできた。
2010年中ばからは、さすがに HTTP Basic認証はないだろうということで、ID/PASSWORDをPOSTしてセッションクッキーをもらってアクセスするものが増えてきた。ので、例えば下記の記事のように、Cookieを保持するHTTP Clientを動かして対応することになる。
AndroidスマホでWi-Fiルータを定期再起動!Termux+Pythonで自動化
https://qiita.com/kamajiro/items/41d14f92c407aa06c087

● この記事のお題
たまたま使うことになった BUFFALOのWSR-1500AX2L は、さらにもう一歩踏み込んでいて、セッションIDやセッションクッキーはもちろん必要として、パスワードをPOSTするときにクライアントで暗号化して送る必要がある、という中身になっていた。スクリプトなどから利用しようと思った場合に、もう一段階しきいが高くなった。

● 実装の中身
作ったスクリプトがあまりにも汚いので、文章でのみメモっておくことにする
- 1) Cookieをtmpで保持するHTTP clientを作る
- 2) /login_time.html へ GET でアクセスして session_num を記録する
- 3) /login.html へ、下記を添えてPOSTする
----- nosave_Username - ユーザID
----- nosave_encryptedPassword - 後述する
----- MobileDevice - 0 固定でいい
----- nosave_session_num - 2)で記録したもの
- 4) /index.html へ GET でアクセスして sessionID を記録し、以後アクセスするときの Cookie に追加する
- 5) 例えば /info.html へアクセスすれば、WAN側のIPアドレスなどの機器情報を取得できる

● nosave_encryptedPasswordの補足
ルータはクライアントに jsencrypt.min.js を配信することで、クライアントがログインするときにクライアントにパスワードを RSA暗号(PKCS#1 v1.5 パディング) で暗号化させてからPOSTさせる。公開鍵は login.html に固定値でベタ書きされている。パディングありの方式なので、同じ文字列を同じ鍵で暗号化しても毎回異なる結果を得るが、秘密鍵を持つ側は復号化すればそれらが同じものであると判断できる。つまり、1回ChromeブラウザなどでログインしてそのときのPOSTのペイロードをダンプして記録しておけば、スクリプトからは毎回この同じダンプしたものを使うだけで良くなる。なので、先の 3) について、正しくダンプして記録しさえすれば nosave_encryptedPassword は固定値で問題ない。

このアーカイブについて

このページには、2026年8月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2026年7月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.9.0