自動構成されたプロキシを調べる

最近は企業内のネットワークでもプロキシサーバの自動構成を行っていることが多い。
ブラウザのプロキシの設定を変更しなくても、自動構成スクリプトに従ってネットワーク管理者の推奨するプロキシに接続してくれるので便利なのだけど、自分ではプロキシサーバのIPアドレスはわからない。


たとえばソフトウェア開発ツール「Eclipse」のアップデートに使用する「更新サーバ」に企業内ネットワークから接続する場合、多くの場合プロキシサーバの設定をしなければいけないが、Eclipseはプロキシの自動設定を行ってくれないので、自分でIPアドレスとポートを設定する必要がある。ところが、プロキシサーバのIPアドレスがわからないため更新サーバに接続できない場合がある。


そういうとき、自動構成スクリプトのURLを自分で設定した場合は、自動構成スクリプトの内容を見るとプロキシサーバを知ることができる。
たとえば自動構成スクリプト(PACファイル)のURLが「http://www.example.co.jp/proxy.pac」だった場合、ブラウザで直接PACファイルのURLを指定して参照すると、どのようにプロキシサーバが決まるのかがわかる。

function FindProxyForURL(url,host)
{ if (isInNet(host,"192.168.0.0","255.255.0.0")) return "DIRECT";
else return "PROXY 192.168.0.10:8080; DIRECT";
}

PACファイルはJavaScriptで記述されている。上記の場合ローカルアドレスの場合は直接参照し、それ以外の場合はプロキシサーバ(192.168.0.10:8080)を参照するように設定されている。


自動構成スクリプトを直接設定した場合でなくても、DNSを使ってWPAD(Web Proxy Auto-Discovery)が設定されている場合は、自動構成スクリプトの場所を類推することができる。
たとえばブラウザの動作しているクライアントPCのアドレスがpc.hoge.example.co.jpだった場合、自動更新スクリプトは下記のいずれかになっているはず。

DHCPを使ってWPADを構成した場合、どうしたら自動構成スクリプトの内容やプロキシを知ることができるかはよくわからない。接続中のプロキシがどこか、調べる方法があってもよさそうなものだけど...

接続先によってプロキシを変更する

逆に、自動構成スクリプトを自分で書いてやれば、接続先によってプロキシの切り替えができるようになる。

function FindProxyForURL(url, host)
{
if *1
return "PROXY proxy1:80";
else
return "PROXY proxy2:80";
}

たとえば上記の場合、

  • ローカルのドメイン(localdomain.com)内であれば直接接続する
  • 接続先ホストが*.comであればproxy1をプロキシサーバにする
  • それ以外はproxy2をプロキシサーバにする

となる

自動構成スクリプトは「file://c:\hoge\proxy.pac」のように指定できる場合もあるが、ブラウザによってはhttp://〜で記述しないと読んでくれないものがある。
このため、apacheなどのローカルWebサーバを立てて、そこに置いておくとよい。

http://127.0.0.1/proxy.pac

*1:isPlainHostName(host) || dnsDomainIs(host, ".localdomain.com"))) return "DIRECT"; else if (shExpMatch(host, "*.com"