[[PageOutline]] [[TitleIndex(TipAndDoc/network/proxy,format=group)]] = proxy pac file = * 注意 * localhostなどについても、個別に設定しないとプロクシ経由で接続しようとする -> プロクシサーバが動いているノードのlocalhostに接続しようとする * [http://ash.jp/freebsd/proxy_auto.htm プロキシの自動設定方法] * [http://findproxyforurl.com/pac-functions/ PAC Functions « FindProxyForURL - PAC & WPAD Resource] > dnsDomainIs > shExpMatch > isInNet > myIpAddress > dnsResolve > isPlainHostName > localHostOrDomainIs > isResolvable > dnsDomainLevels > weekdayRange > dateRange > timeRange > alert * [http://findproxyforurl.com/debug-pac-file/ Debug PAC File « FindProxyForURL - PAC & WPAD Resource] * [http://support.microsoft.com/kb/274204/ja .Pac ファイル内の shExpMatch 関数が正規表現をサポートしていません。] > .Pac ファイルの正規表現オブジェクトの次のコード例に示します。 > {{{#!javascript > var regexpr = /[a-zA-Z]{4}.microsoft.com/; > if(regexpr.test(host)) > }}} * [http://memocache.blogspot.jp/2011/07/ip.html メモcache: 自動プロキシ設定スクリプトで楽にIP制限を乗り越える] * 自動設定ファイルをローカルではなく、ウェブサーバ上にphpとして設置している例 == myIpAddress == * [http://d.hatena.ne.jp/hirose31/20070823/1187852191 proxy.pacでのmyIpAddress() - (ひ)メモ] * [http://slashdot.jp/journal/370502/ 自動プロキシ設定スクリプトの myIpAddress() の動作 | witchの日記 | スラッシュドット・ジャパン] > {{{#!javascript > function FindProxyForURL(url, host) { > alert(myIpAddress()); > return "DIRECT"; > } > }}} == test on Firefox/IE/Chrome == * Firefox 17 * エラーコンソール(Ctrl+Shift+J) > メッセージ でalertメッセージを確認できる * 依然として、myIpAddress()でIPv6が帰ってくる模様 {{{ PAC-alert: fe80::XXXX:YYYY:ZZZZ:ABCD%10 }}} * [http://support.mozilla.org/ja/questions/804868 myIpAddress() Returns IPv6 Address in Firefox 4 proxy.pac file | Firefox Support Forum | Mozilla サポート] * VPN接続しても変わらず(メトリック調整も無視?) * IE 9 * myIpAddress()はIPv4のアドレスを正しく返す * VPN接続によるデフォルトゲートウェイの変化にも追従(メトリック設定によってゲートウェイが変化しない場合は元のまま) * ゲートウェイが変化すると、iexplorer.exe再起動無しでプロクシ設定の再読込も行われる * ネットワークに変化がない状態でpacファイルを更新しても、再起動するまで反映されない模様 * [http://www.admintech.jp/wiki.cgi?page=%A5%D7%A5%ED%A5%AD%A5%B7%BC%AB%C6%B0%C0%DF%C4%EA%A5%D5%A5%A1%A5%A4%A5%EB%A4%CETIP プロキシ自動設定ファイルのTIP - Admintech.jp] > return DIRECTを記述すると、Direct接続先はイントラネットとなります。 > * [http://www.atmarkit.co.jp/fwin2k/experiments/ieproxy/ieproxy_02.html @IT:検証:IEの自動Proxy設定とセキュリティ・ゾーン 2.イントラネット・ゾーン] > ある種の自動構成スクリプトを使うと(正確には「return "DIRECT"」を実行すると)、本来「インターネット ゾーン」となるべきサイトが「イントラネット ゾーン」となってしまうのは、 ... これは“仕様”である * Chrome 23 * alertの確認方法が不明 * myIpAddress()はIPv4のアドレスを正しく返す模様 * IE 9と同様に、ゲートウェイ変更時には、chromeの再起動無しにプロクシ設定の再読み込みが行われる * [http://yuichi.tea-nifty.com/blog/2008/12/googlechrome-c0.html GoogleChrome に独立したプロキシ設定: な○の 屋] * {{{--proxy-pac-url}}}によるpacファイルの指定は、インターネットオプション > 接続 > LANの設定 > 自動構成スクリプト よりも優先される == example == * chrome-proxy.pac {{{#!javascript function useProxy(host) { if ( dnsDomainIs(host, "mitty.jp") || dnsDomainIs(host, "tsukuba.ac.jp") ) { return true; } return false; } function detectNet(ipaddr) { if (isInNet(ipaddr, "192.168.0.0", "255.255.255.0")) { // maybe local if (isInNet(dnsResolve("some.host.example.jp"), "192.168.0.0", "255.255.255.0")) { return 'LOCAL'; } else { return 'UNKNOWN'; } } if (isInNet(ipaddr, "192.168.100.0", "255.255.255.0")) { return 'GUEST'; } return 'UNKNOWN'; } var localnet = detectNet(myIpAddress()); function FindProxyForURL(url, host) { if (! useProxy(host)) { return "DIRECT"; } if (localnet == 'LOCAL') { return "PROXY proxy.local.example.net:8080"; } if (localnet == 'GUEST') { // alternative port return "HTTPS proxy.example.net:8443"; } return "HTTPS proxy.example.jp:443"; } }}} * HTTPSを使用しているので、chrome専用 * see also [./squid#forwardproxywithSSL] * mitty.jp, tsukuba.ac.jpで終わるドメインに対してのみプロクシを使用 * 現在のネットワークをmyIpAddress()から判断し、プロクシを切り替えている * 特定のFQDN(some.host.example.jp)がプライベートIPに名前解決できるかで確認を取っている