Proxy

代理 - Pac 文件 - 帶有 myAdresse() 的 ipv6?

  • May 12, 2015

我正在嘗試為我的 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 腳本中使用。

引用自:https://serverfault.com/questions/691360