au Wi-Fi および wi2 系公衆無線LAN接続用 Bookmarklet

後編です
認証系を解析した詳細は、前編の d:id:RobinEgg:20120617 に記載しています。

d:id:RobinEgg:20120617 で書いた内容だと、その気になれば OS に関係なく Javascript で認証系組めますよね、ということでざっと書いてみた。動作確認が取れているのは、 KDDI 系の公衆無線LANサービス(wi2/au_Wi-Fi/UQ-WiFi) です。

wi2 系ではログインページ内 XML を切り出して都度読み込ませていますが、 au_wi-fi ではリダイレクト中のレスポンスボディを読み取るのが難しいため、認証 URL を決め打ちにしています。このため、仕様変更があると使えなくなる可能性が高いです。

実際に使用される場合は、

https://auwifi-signup.auone.jp/su2/?{"mac_addrs":["***大文字MACアドレス***"],"manufacturer":"Windows","model":"7","request_type":"0"}

にアクセスして取得した ID およびパスワードで、

  var userid = '***USERID***';
  var pass = '***PASS***';

の部分だけを書き換えてください。

アクセスポイントに接続後、適当なページへアクセスした際に表示される、サービスへのログインページ、あるいは「接続ツールによるログインが必要です」というメッセージ画面にて実行してください。

javascript: (function(){
  var userid = '***USERID***';
  var pass = '***PASS***';

  var authURI;
  var domain = document.domain.substring(document.domain.length - 9);

  if(domain == 'wi2.ne.jp'){
    var de = document.documentElement.innerHTML;
    if(de.indexOf('WISPAccessGatewayParam') < de.indexOf('LoginURL')){
      authURI = de.split('LoginURL')[1].replace(/(^\s+)|(\s+$)|(<)|(>)|(\/$)/g, '');
    }else{
      return;
    }
  }else if(domain == '.kddi.com'){
    authURI = 'https://' + location.host + '/smartlogin';
  }else{
    return;
  }

  if(userid.substr(userid.length - 3) != '@au'){userid += '@au';}
  var ce = function(en, ev){
    var inp = document.createElement('input');
    inp.type = 'hidden';
    inp.name = en;
    inp.value = ev;
    return inp;
  };
  var f = document.createElement('form');
  with(f){
    method = 'post';
    action = authURI;
    id = 'authBookmarkletForm';
    appendChild(ce('UserName', userid));
    appendChild(ce('Password', pass));
  }

  document.body.appendChild(f);
  document.getElementById('authBookmarkletForm').submit();

}())

これで、評価の微妙な純正アプリを入れるまでもなく、快適な無限インターネットを楽しめます。良かったですね。