.pacスクリプト文法

6434 ワード

PACスクリプトの作成
adappt from internet; 一つのPACファイルは実はテキストファイルで、一番簡単なフォーマットはFindProxyFor URLというJScript関数を含んでいます.IEは二つの変数を導入してこの関数を呼び出します.一つはユーザがブラウズしたアドレスURLの全パスです.一つはこのURLの中のホスト名の部分です.このFindProxyFor URL関数には三つの可能な文字列の戻り値があります.一つは「DIRECT」です.直接接続して、代理を通しません.第二は「PROXY proxyaddr:port」であり、その中のproxyaddrとportはそれぞれ代理の住所と代理のポートである.三は「SOCKS socksaddr:port」であり、その中でsocksaddrとportはそれぞれsocksエージェントのアドレスとポートであり、一つの自動代理ファイルは複数の選択の組み合わせとすることができ、その中にはセミコロン(;)で区切られている.
function FindProxyForURL(url,host)
{
if (host == "www.mydomain.com")
return "DIRECT";

return "PROXY myproxy:80;
PROXY myotherproxy:8080;
DIRECT";
}
 
以下はプロキシシナリオで使用可能な関数と説明です.(英語が下手な友達は直接にジャンプして応用を見ます.):PAC Helper Functions Domains Is(host,domann)Returns true if the host is parts of the specified doman、false others.is InNet(hostname,Restine the).returns true if the hostname iswithinthe subnet speciifed bythe IP address and the subnet mask,false othewise. isPlainHostName(host)Returns stststinininininininine e the the dots the hostininininininstname,falsheheshshshshshshshshshshshshshshshshshshshsheeeeeeeeeeeeeeeeeeeeeffffs the ststinininininininininininininininininininininininininininininininininininininininlです.false otherswise. local HostOrDommanIs Returns true the host maches(host、domann)the host postpotion of the doman、or if the Host and domail potitions of the domaman、false thethethethethethethe wise.ininininininststststststinininininininininininininininininininstststststststststinininininininininininininininininststststststststststststststinininininininininininininininininininininininininininininin. dnsResolive(host)Returns a streing containing the IP address of the specified host.myIPAddres()Returns a streing containing the local machine's IP address.shExpMatch Returns true the supplied URL Liturn spechereReturns true if the current date falls within the dates speciiiifininparmList、false othewise.timeRangee Returns true the current time falls withininthe times speciiified inininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininparmList、false otherswise.以下は各関数の応用例です.a、isPlainHostName(host)は、この例ではローカルホストと判定されます.http://myservername/ 直接接続する場合は、プロキシを使用します.
function FindProxyForURL(url, host)
{
if (isPlainHostName(host))
return "DIRECT";
else
return "PROXY proxy:80";
}
 
b、dns DomainIs、local HostOrDomainIs、本例では、訪問ホストがドメインとドメイン名に属するかどうかを実証します.company.comドメインのホスト名に属する場合、ドメイン名はcompany.comとhome.comの直接接続ではなく、代理アクセスを使用します.
function FindProxyForURL(url, host)
{
if ((isPlainHostName(host) ││
dnsDomainIs(host, ".company.com")) &&
!localHostOrDomainIs(host, "www.company.com") &&
!localHostOrDomainIs(host, "home.company.com"))

return "DIRECT";
else
return "PROXY proxy:80";
}
 
c、isResolovable(host)は、本例ではホスト名がdnsサーバによって解析されているかどうかを実証し、直接アクセスできるなら、代理でアクセスする.
function FindProxyForURL(url, host)
{
if (isResolvable(host))
return "DIRECT";
else
return "PROXY proxy:80";
}
 
d、isInNet(host,「-」,「」)は、この例では、IPにアクセスするかどうかのデモがあるサブネットワーク内で行われていますが、直接にアクセスする場合は、プロキシを通じて、例として清華IPセグメントのホームページにアクセスします.プロキシは不要です.
function FindProxyForURL(url, host)
{
if (isInNet(host, "166.111.0.0", "255.255.0.0"))
return "DIRECT";
else
return "PROXY proxy:80";
}
 
e、shExpMatch(host,「」)は、ホストドメイン名によって接続タイプを変更することを実証し、ローカルホスト、*.edu、*.comはそれぞれ異なる接続方式で接続されている.
function FindProxyForURL(url, host)
{
if (isPlainHostName(host))
return "DIRECT";
else if (shExpMatch(host, "*.com"))
return "PROXY comproxy:80";
else if (shExpMatch(host, "*.edu"))
return "PROXY eduproxy:80";
else
return "PROXY proxy:80";
}
 
f、url.substring()は、本例では、異なるプロトコルに従って異なるエージェントを選択することを実証し、http、https、ftp、gopherはそれぞれ異なるエージェントを使用する.
function FindProxyForURL(url, host)
{
if (url.substring(0, 5) == "http:") {
return "PROXY proxy:80";
}
else if (url.substring(0, 4) == "ftp:") {
return "PROXY fproxy:80";
}
else if (url.substring(0, 7) == "gopher:") {
return "PROXY gproxy";
}
else if (url.substring(0, 6) == "https:") {
return "PROXY secproxy:8080";
}
else {
return "DIRECT";
}
}
 
g、dnsResolive(host)は、ホストにアクセスするIPがあるかどうかを実証し、プロキシを使用する場合はそのまま接続します.
unction FindProxyForURL(url, host)
{
if (dnsResolve(host) == "166.111.8.237") {
return "PROXY secproxy:8080";
}
else {
return "PROXY proxy:80";
}
}
 
h、myIpAddress()は、ローカルIPがあるかどうかを実証し、プロキシを使用する場合は、直接接続を使用する.
function FindProxyForURL(url, host)
{
if (myIpAddress() == "166.111.8.238") {
return "PROXY proxy:80";
}
else {
return "DIRECT";
}
}
 
i、dns DomainLevels(Host)は、ホストにアクセスするドメイン名のクラス数は何級ですか?ドメイン名にいくつかの点があります.ドメイン名の中に点があれば、エージェントを通じてアクセスします.そうでなければ、直接接続します.
function FindProxyForURL(url, host)
{
if (dnsDomainLevels(host) > 0) { // if number of dots in host > 0
return "PROXY proxy:80";
}
return "DIRECT";
}
 
j、weekday Range()は、この例では、現在の日付の範囲を示して、使用エージェントを変更します.GMT時間の水曜日から土曜日なら、プロキシ接続を使用します.そうでなければ、直接接続します.
function FindProxyForURL(url, host)
{
if(weekdayRange("WED", "SAT", "GMT"))
return "PROXY proxy:80";
else
return "DIRECT";
}
 
k、最後の例は、プロキシをランダムに使用することをデモすることです.
function FindProxyForURL(url,host)
{
return randomProxy();
}

function randomProxy()
{
switch( Math.floor( Math.random() * 5 ) )
{
case 0:
return "PROXY proxy1:80";
break;
case 1:
return "PROXY proxy2:80";
break;
case 2:
return "PROXY proxy3:80";
break;
case 3:
return "PROXY proxy4:80";
break;
case 4:
return "PROXY proxy5:80";
break;
}
}
 
上の関数と例を使って説明すれば、より複雑で効果的な自動代理脚本が書けます.もちろん皆さんは頭が痛いと思いますか?大丈夫です.大海さんはもうproxy.pacファイルを書きました.ここにダウンロードして本機に置いてもいいです.直接インターネットで訪問してもいいです.本機に置いたら、例えばEディスクとカタログの下に置いてください.住所はfile://e:/proxy.pacというPROXYファイルを書いてください.05年12月にcernetが発表した無料IPと深セン大学が自分で定義したいくつかの無料ドメイン名に基づいて作成しました.主にisInNetとshExpMatchの二つの関数を使っています.友達は自分の必要に応じて変えられます.