au の公衆無線LANにログインする
au wifi 接続ツールはバックグラウンドで起動してたり、SSIDの監視をしてアレコレ出来なかったりして不便だったりする。
そこで、やっぱりスクリプトでログインする手順を実行して自動実行したいよねと。
wi2 のau ログイン
- au id でログインするには?
- wi2 にログインするに
- 実際にログイン
- ログアウトするには?
1. au id でログインするには?
au ID で au-Wifi を使うには、 au IDがあって、LTEフラットの契約がアレば月額無料になっているはず。なので、au ID がアレばログインが出来る。
ただし、他のキャリアと違って、 au は緩やかなID統合なので、au からWiFI用の専用ログインIDを発酵してもらうことになる。
au のログイン取得は 「公衆Wifiの認証情報について - eggshell blue」 にかかれている通り、一旦、専用のURLにJSONデータを生Qeury_StringとしてGETする必要がある。
https://auwifi-signup.auone.jp/su2/?{"mac_addrs":["***大文字MACアドレス***"],"manufacturer":"Windows","model":"7","request_type":"0"}
実際にアクセスすると、au ID へのログイン画面が表示される。
au ID でログインすると、JSONデータで認証に必要なデータが取得できる。
このURLはMACアドレスの登録・削除・などをまとめてとり行うことが出てきて便利。
ID取得用スクリプト
#!/usr/bin/env ruby # # require 'mechanize' require 'uri' au_id = ARGV.shift au_pw = ARGV.shift unless au_id && au_pw then str =<<-"EOS" Usage : ruby #{File.basename(__FILE__)} au_ID au_ID用パスワード comment : au IDにログインして、au Wifi で使うID/パスワードを取得する 出力サンプル {"code"=>"N22", "device_num"=>"04", "max_device_num"=>"04", "passwd"=>"xxxxxxxxx", "user_id"=>"xxxxxxxxxx"} wi2 系を利用するときは、user_id に @au を追記して、\#{user_id}@au とすること EOS puts str exit end params ={} params["mac_addrs"] = [ `ifconfig en0| grep ether`.split.last.upcase.gsub(":", "") ] if RUBY_PLATFORM =~ /darwin/i then # Macアドレスから製造元は見てる気がする。なのでAppleと明示する params["manufacturer"] = "Apple" params["model"] = "Mac OSX" else # Windowsとかその他 params["manufacturer"] = "Windows" params["model"] = "7" end params["request_type"] = "0" ## ?{"mac_addrs":["***大文字MACアドレス***"],"manufacturer":"Windows","model":"7","request_type":"0"} query_str = params.to_json query_str= URI.encode_www_form_component( query_str ) uri = 'https://auwifi-signup.auone.jp/su2/' uri = uri + "?" + query_str puts "ID取得専用uri => #{uri}" ## login and get_id m = Mechanize.new m.get uri f = m.page.form f.field_with( :name=>/loginAliasId/i).value = au_id f.field_with( :type=>/pass/i).value f.field_with( :type=>/pass/i).value = au_pw btn = f.button_with(:name=>/btn_login/) m.submit(f,btn) body = m.page.body info = JSON.load(body) pp info
au は、ezweb のSMTPでも同じように、IDを別IDにマッピングする手法をとっている。意外と硬い実装で、個人的には好きだ。やっぱりいちばん信頼できるキャリアは今はKDDIだと思う。
2. wi2 にログインするには?
取得した、IDに @au をつけることで、Wi2にログインすることが出来る。
たとえば、私の場合、IDを取得すると次のような結果が得られる。
$ > ruby ruby au_wifi_inspect_login_id.rb au_id au_id_passwod {"code"=>"N22", "device_num"=>"04", "max_device_num"=>"04", "passwd"=>"JZxxxxx", "user_id"=>"24xxxxx"}
ここに記載されている、user_id と passwd がau Wifi 専用のログインIDになる。
ただし、wi2 にログインするときは @au をつけるので、実際にログインで使うのは次のIDになる。
"user_id"=>"24xxxxx@au" "passwd"=>"JZxxxxx",
ここまでで、手作業によるログインが可能になるが、どうせなら、更にWi系も自動化してしまいたい。
3. 実際にログインする
ID/PWが準備出来たので、これをつかってWi2に接続する
具体的には、このページを自動送信することになる。
自動送信するスクリプト
#!/usr/bin/env ruby require 'Mechanize' m = Mechanize.new id = ARGV.shift pw = ARGV.shift unless id.match(/@au$/) then str <<-"EOS" ログインIDは、au one にログインして取得するように 取得したID@au で指定する EOS end m.get "http://qiita.com" ## てきとうなところへリクエスト f = m.page.forms[0] f.field_with(:type=>/tex/i).value = id f.field_with(:type=>/pass/i).value = pw f.submit print m.page.body
4. ログアウトするには?
ログインしたら、ログアウトもしたくなるが、ログアウトはログインページにアクセスすれば、ログアウトのリンクが表示されるのでクリックすればOK
これで、au 系のWifiをどこからでも使える。
Wi2 と au_WiFi は殆ど同じ場所で提供されているので、wi2 さえアレば接続できるようになる。
参考資料
http://d.hatena.ne.jp/RobinEgg/searchdiary?word=au%20%20wi2%20wifi
au Wi-Fi および wi2 系公衆無線LAN接続用 Bookmarklet - eggshell blue
公衆Wifiの認証情報について - eggshell blue
関連エントリ
PCからDoCoMo Wifiを使う方法。 - それマグで!
Wifi監視して公衆無線LANに自動ログインする。 - それマグで!