Proxy
代理 - Pac 文件 - 帶有 myAdresse() 的 ipv6?
我正在嘗試為我的 Squid 製作代理 pac 文件。例如,如果使用者在我的網路中或如果他在家,我想更改重定向,並且我嘗試使用**myAdress()**函式來實現。
我已經測試了這個 PAC,我們可以在 PAC 中使用大部分功能:http: //findproxyforurl.com/debug-pac-file/ 。
function FindProxyForURL(url, host) { debugPAC ="PAC Debug Information\n"; debugPAC +="-----------------------------------\n"; debugPAC +="Machine IP: " + myIpAddress() + "\n"; <-----| debugPAC +="Hostname: " + host + "\n"; if (isResolvable(host)) {resolvableHost = "True"} else {resolvableHost = "False"}; debugPAC +="Host Resolvable: " + resolvableHost + "\n"; debugPAC +="Hostname IP: " + dnsResolve(host) + "\n"; if (isPlainHostName(host)) {plainHost = "True"} else {plainHost = "False"}; debugPAC +="Plain Hostname: " + plainHost + "\n"; debugPAC +="Domain Levels: " + dnsDomainLevels(host) + "\n"; debugPAC +="URL: " + url + "\n"; // Protocol can only be determined by reading the entire URL. if (url.substring(0,5)=="http:") {protocol="HTTP";} else if (url.substring(0,6)=="https:") {protocol="HTTPS";} else if (url.substring(0,4)=="ftp:") {protocol="FTP";} else {protocol="Unknown";} debugPAC +="Protocol: " + protocol + "\n"; // Reduce volume of alerts to a useable level, e.g. only alert on static text pages. if (!shExpMatch(url,"*.(js|xml|ico|gif|png|jpg|jpeg|css|swf)*")) {alert(debugPAC);} return "DIRECT"; }
但是在輸出上,我有 ipv6 地址?!
PAC-alert: PAC Debug Information ----------------------------------- Machine IP: fe80::xxx:xxx:xxxx:xxxx <-----| Hostname: download.cdn.mozilla.net Host Resolvable: True Hostname IP: 93.184.221.133 Plain Hostname: False Domain Levels: 3 URL: http://download.cdn.mozilla.net/pub/firefox/releases/37.0.2/update/win32/fr/firefox-37.0.2.complete.mar Protocol: HTTP
這正常嗎?還是有另一種獲取使用者 ipv4 地址的方法?如果是這樣,我不能像這樣進行測試:
if ( isInNet(myAddress, "10.0.0.0","255.0.0.0") ) ?
謝謝你的幫助
該
myIpAddress
函式基於主機只有一個地址的假設。這從來都不是一個有效的假設。更好的選擇是返回 IP 地址列表的函式。微軟似乎已經推出了他們自己的擴展來做到這一點。
myIpAddress
返回提供最有用資訊的地址是有意義的。但是,您不能依賴它。有報導稱myIpAddress
有時會返回127.0.0.1
,這大多是無用的。在您的情況下,它顯然也沒有做出最佳選擇,因為連結本地地址包含的對 PAC 腳本有用的資訊少於本地或全域地址。而且我猜在您的情況下,主機確實至少有一個本地或全域地址,它可能會返回。
總的來說,我最好的建議是編寫
FindProxyForURL
它不需要知道主機的 IP 地址(或者讓服務於 PAC 腳本的伺服器通過伺服器端腳本將客戶端的 IP 地址嵌入到腳本中)。如果您的大部分使用者執行支持 Microsoft擴展的瀏覽器,您還可以添加一個
FindProxyForURLEx
函式,該函式利用myIPAddressEx
dnsResolve
由於在進行 DNS 解析時可能會阻止瀏覽器,因此也不建議在 PAC 腳本中使用。