それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

au-Wifi のWi2系の公衆無線LANにログインする手順と自動スクリプト

au の公衆無線LANにログインする

au wifi 接続ツールはバックグラウンドで起動してたり、SSIDの監視をしてアレコレ出来なかったりして不便だったりする。

そこで、やっぱりスクリプトでログインする手順を実行して自動実行したいよねと。

wi2 のau ログイン

  1. au id でログインするには?
  2. wi2 にログインするに
  3. 実際にログイン
  4. ログアウトするには?

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 へのログイン画面が表示される。

f:id:takuya_1st:20150717155038p:plain:w200

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 は、ezwebSMTPでも同じように、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に接続する

具体的には、このページを自動送信することになる。

f:id:takuya_1st:20150717155033p:plain:w200

自動送信するスクリプト

#!/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

f:id:takuya_1st:20150717155036p:plain:w200

これで、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に自動ログインする。 - それマグで!

PCからDoCoMo Wifiを使う方法。 - それマグで!

BB モバイルポイントに接続する方法まとめ - それマグで!