2008 03 24 18 32 [firefox] 在 proxy.pac 中 myIpAddress() 只會傳回一組 IP

之前就發現在 firefox 的 proxy.pac 裡,
呼叫 myIpAddress() 只會傳回一組 IP ,
像我的電腦因為有安裝 VMware ,
所以有多組 IP address,
而 myIpAddress() 只會傳回第一組 IP ,
會變成所寫的 proxy.pac 很難由 IP 去區分。

今天因為同事也在寫他自己的 proxy.pac ,
所以我也順便再找一下有沒有關於這個問題的解答。
很幸運的,在 firefox 的目錄下找到 nsProxyAutoconfig.js 這個檔案。
基本上,在執行 proxy.pac 之前會先執行這隻 js 檔,
而裡面剛好 myIPAddress 就寫在這裡面。
所以,我就可以更改這個檔案,
來讓 myIPAddress 可以傳回所有的 IP address。


function myIpAddress() {
var IPs = new Array();
try {
var nsrecord = dns.resolve(dns.myHostName, 0);
while (nsrecord.hasMore()) {
IPs.push(nsrecord.getNextAddrAsString());
}
} catch (e) {
return '127.0.0.1';
}
return IPs.join("|");
}

以下是我自己在用的 proxy.pac 。

function FindProxyForURL(url, host)
{
var myIP = myIpAddress().split('|');
var ip;

if (isInNet(host, "192.168.0.0","255.255.255.0")) {
return "DIRECT";
}
if (isInNet(host, "127.0.0.1","255.255.255.255") ) {
return "DIRECT";
}

while (ip = myIP.shift()) {
if (isInNet(ip, "10.1.0.0", "255.255.0.0") ) {
return "SOCKS 127.0.0.1:3128";
}
}
return "DIRECT";
}


參考資料:
http://qingbo.org/archives/103.html