日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PAC文件解释-转载 小胡子哥的个人网站

發布時間:2024/3/12 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PAC文件解释-转载 小胡子哥的个人网站 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

詳解代理自動配置 PAC | 小胡子哥的個人網站

PAC,一個自動代理配置腳本,包含了很多使用 JavaScript 編寫的規則,它能夠決定網絡流量走默認通道還是代理服務器通道,控制的流量類型包括:HTTP、HTTPS 和 FTP。

它是一段 JavaScript 腳本:

function FindProxyForURL(url, host) {return "DIRECT"; }

上面就是一個最簡潔的 PAC 文件,意思是所有流量都直接進入互聯網,不走代理。

上面函數中,url?字段就是我們在瀏覽器地址欄輸入的待訪問地址,host?為該地址對應的 hostname,return?語句有三種指令:

  • DIRECT,表示無代理直接連接
  • PROXY host:port,表示走?host:port?的 proxy 服務
  • SOCKS host:port,表示走?host:port?的 socks 服務

而返回的接口可以是多個代理串聯:

return "PROXY 222.20.74.89:8800; SOCKS 222.20.74.89:8899; DIRECT";

上面代理的意思是,默認走?222.20.74.89:8800?的 proxy 服務;如果代理掛了或者超時,則走?222.20.74.89:8899?的 socks 代理;如果 socks 也掛了,則無代理直接連接。從這里可以看出 PAC 的一大優勢:自動容災。

PAC 提供了幾個內置的函數,下面一一介紹下:

dnsDomainIs

類似于?==,但是對大小寫不敏感,

if (dnsDomainIs(host, "google.com") || dnsDomainIs(host, "www.google.com")) {return "DIRECT"; }

shExpMatch

Shell 正則匹配,*?匹配用的比較多,可以是?*.example.com,也是可以下面這樣,

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

isInNet

判斷是否在網段內容,比如?10.1.0.0?這個網段,10.1.1.0?就在網段中,

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

myIpAddress

返回主機的 IP,

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

dnsResolve

通過 DNS 查詢主機 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

判斷是否為諸如?http://barret/,http://server-name/?這樣的主機名,

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

isResolvable

判斷主機是否可訪問,

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

dnsDomainLevels

返回是幾級域名,比如?dnsDomainLevels(barretlee.com)?返回的結果就是 1,

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

weekdayRange

周一到周五,

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

dateRange

一月到五月,

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

timeRange

八點到十八點,

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

alert

據說這個函數可以用來調試,不過我在 Chrome 上測試并未生效,

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

在 Windows 系統中,通過「Internet選項 -> 連接 -> 局域網設置 -> 使用自動配置腳本」可以找到配置處,下放的地址欄填寫 PAC 文件的 URI,這個 URI 可以是本地資源路徑(file:///),也可以是網絡資源路徑(http://)。

Chrome 中可以在「chrome://settings/ -> 顯示高級設置 -> 更改代理服務器設置」中找到 PAC 填寫地址。

需要注意的幾點:

  • PAC 文件被訪問時,返回的文件類型(Content-Type)應該為:application/x-ns-proxy-autoconfig,當然,如果你不寫,一般瀏覽器也能夠自動辨別
  • FindProxyByUrl(url, host)?中的 host 在上述函數對比時無需轉換成小寫,對大小寫不敏感
  • 沒必要對?dnsResolve(host)?的結果做緩存,DNS 在解析的時候會將結果緩存到系統中

總結

以上是生活随笔為你收集整理的PAC文件解释-转载 小胡子哥的个人网站的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。