witchの日記: 自動プロキシ設定スクリプトの myIpAddress() の動作
仕事上の都合でひさしぶりに proxy.pac 作ってたりするわけですが…
そのパソコンが特定のネットワーク(VPNなわけだけど)に繋がっている時だけ有効になる proxyルールを作ろうとして、myIpAddress()を使ってみたら…
WindowsだとmyIpAddress()が自分のIPアドレスを調べるタイミングが期待はずれ(しかもFirefoxとIEで挙動が違う)だったり、MacOSX(Firefox)だとループバックアドレス返してくれたり(意味ないじゃんよ)してなかなか微妙。
なんか使い方間違ってるのかな…
参考:
Navigator Proxy Auto-Config File Format (from netscape.com)
JavaScript または JScript を使った自動プロキシ ファイルの例 (from microsoft.com)
サンプルプログラム (FindProxyForURL()のalert出力はFirefoxはJavaScriptコンソール、IEはメッセージBOXに出ます)
function FindProxyForURL(url, host) {
alert(myIpAddress());
return "DIRECT";
}
いろいろな局面での挙動
PCはBフレッツに繋がっている状態でテスト
- Windows (Firefox 1.5)
- VPN接続前 : 出力: Bフレッツ割り当てアドレス
- VPN接続後 : 出力: 10.64.XX.XXX (VPNクライアント割り当てアドレス)
- VPN切断後 : 出力: 10.64.XX.XXX (VPNクライアント割り当てアドレス) おいっ!
VPNに接続してしまうと、切断後も myIpAddress()がVPNのアドレスを返します。
一度、ブラウザを再起動するまでVPN側インターフェースが無くなったことに気付かない。
- Windows (Internet Explorer 6)
- VPN接続前 : 出力: Bフレッツ割り当てアドレス
- VPN接続後 : 出力: Bフレッツ割り当てアドレス おいっ!
VPN接続後は新しいウィンドウを開かないとVPN側インターフェースの存在に気付かない。
ウィンドウを開くときにネットワーク設定を評価するのかしらね。
同じことは、VPN切断時にも発生。
再起動がいらないところは Firefox よりまし。
- Mac OS X (Firefox 1.5)
- VPN接続前 : 出力: ループバックアドレス (127.0.0.1) おいおい… (- -;;
こんな状態で proxy.pacリリースしたらユーザーから苦情が来そう…
WindowsはまだしもMacOSXじゃ使えそうにないですね。
proxy.pac の中で ajax みたいなことできないかな…。
そうすればサーバ側から「きみのIPアドレスはフガホゲ」って返せるのに。
VPN接続時と切断時で同じサーバへのルーティング設定を変えているので必ず返事ができる&クライアントIPのチェックができる
…はず。
自動プロキシ設定スクリプトの myIpAddress() の動作 More ログイン