跳至主要内容

PAC (Proxy auto-config) 語法

資訊

如果文件有錯誤或您有建議,請在Mudfish論壇(https://forums.mudfish.net)留言。這裡提到的範例和解釋是透過翻譯或參考以下網站的內容而編寫的。

對於 Mudfish 瀏覽器擴展,它支援 PAC (Proxy auto-config) 檔案格式。

PAC 函式​

支援PAC格式的瀏覽器通常支援以Netscape指定的標準格式呈現的功能。

然而,這些功能通常在sandbox內運行,因此運行在嚴格限制的環境中。例如查看User Agent資訊就完全被屏蔽了。

以下是 sandbox 環境中允許的功能的描述。

dnsDomainIs​

檢查 Hostname,如果匹配,則傳回 true。通常用於檢查特殊個體hostname。

   // 若 hostname 為 google.com 或其子網域(如 maps.google.com、www.google.com),
// 瀏覽器直接連線,不經過代理伺服器。

if (dnsDomainIs(host, "google.com"))
return "DIRECT";

shExpMatch​

將 Hostname 或 URL 與 shell 表達式指定的字串進行比較,如果匹配,則傳回 true。

   // 所有符合 .local 結尾 hostname 的請求直接連線,不經過代理伺服器。

if (shExpMatch(url, "*.local"))
return "DIRECT";

// 連線至 vpn.domain.com,或存取 http://abcdomain.com/folder/ 下的
// 任何資料夾或檔案時,直接連線,不經過代理伺服器。

if (shExpMatch(host, "vpn.domain.com") ||
shExpMatch(url, "http://abcdomain.com/folder/*"))
return "DIRECT";

isInNet​

此函式檢查 hostname 的 IP 位址是否位於指定子網路中;如果是,則傳回 true。若傳入的是主機名稱,會先透過 DNS 解析將其轉換為 IP 位址。

   // 若 hostname 經 DNS 解析後的 IP 位址屬於指定的網段,則直接連線。

if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";

myIpAddress​

返回我目前電腦的 IP 位址。

   // 若本機 IP 屬於指定網段,則透過代理伺服器 10.10.5.1 的 8080 連接埠傳送請求。

if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0"))
return "PROXY 10.10.5.1:8080";

dnsResolve​

透過DNS resolving將hostname轉換為IP位址。

   // 若請求的 host IP 屬於指定範圍,則直接連線。

if (isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0") ||
isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0") ||
isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))
return "DIRECT";

isPlainHostName​

如果 hostname 不包含任何 .(點)字元,則傳回 true。例如,它指的是類似http://intranet的東西,通常可以在存取內網網址時使用。

   // 若使用者請求的是單純主機名稱(例如 http://intranet/ 或
// http://webserver-name01/),則直接連線。

if (isPlainHostName(host))
return "DIRECT";

localHostOrDomainIs​

檢查 Hostname,如果 hostname 部分匹配,則傳回 true。

   // 若請求的 hostname 為 "www" 或 "www.google.com",則直接連線。

if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";

isResolvable​

Hostname 轉換為 IP 位址,如果成功,則傳回 true。

如果網域名稱無法正確解析,瀏覽器可能會暫時停止回應。請謹慎使用此功能。

   // 若 DNS 伺服器可解析請求的 hostname,則透過 proxy1.example.com 傳送請求。

if (isResolvable(host))
return "PROXY proxy1.example.com:8080";

dnsDomainLevels​

檢查 Hostname 並傳回其中 .(點)字元的數量。例如,它可用於指定內部網路 Web 伺服器作為例外。

   // 若 hostname 包含至少一個 .(點),則透過 proxy1.example.com 連線;
// 否則直接連線。

if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

weekdayRange​

根據時間創建rule時可以使用。例如,當您只想在特定日期返回 proxy 設定時,可以使用它。

   // 週一至週五透過 proxy1.example.com 連線,其餘時間直接連線。

if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

dateRange​

根據時間創建rule時可以使用。例如,當您只想將 proxy 應用到特定月份時,可以使用它。


// 一月至三月透過 proxy1.example.com 連線,其餘月份直接連線。

if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

timeRange​

當您只想在特定時間使用 proxy 時,可以使用此功能。

   // 僅在上午 8 點至下午 6 點使用 proxy1.example.com,其餘時間直接連線。

if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

alert​

首次定義 PAC 格式時不存在此函數,但它是在 Internet Explorer 和 Firefox 瀏覽器中為 troubleshooting 定義的函數。

   // 將 DNS 解析結果輸出至瀏覽器的錯誤主控台。

resolved_host = dnsResolve(host);
alert(resolved_host);