我的网络中有一个 squid + diladele 代理盒。我已设置一个 PAC 文件,该文件应执行以下操作:
1)如果客户端的 IP 地址属于当前网络(192.168.0.0/24)并尝试访问网络外部的资源,请使用代理。2)如果客户端尝试访问内部资源,则直接访问并绕过代理
以下是我目前所写的内容
// If the IP address of the local machine is within a defined
// subnet, send to a specific proxy.
if (isInNet(myIpAddress(), "192.168.0.0", "255.255.255.0"))
return "PROXY 192.168.0.253:3128";
// If the requested website is hosted within the internal network, send direct.
if (isPlainHostName(host) ||
shExpMatch(host, "*local") ||
isInNet(dnsResolve(host), "192.168.0.0","255.255.0.0") ||
isInNet(dnsResolve(host), "127.0.0.1", "255.255.255.255")||
shExpMatch(host,"localhost"))
return "DIRECT";
// DEFAULT RULE: All other traffic, use below proxies, in fail-over order.
return "DIRECT";
一切都很完美,然而,当我尝试访问资源时localhost
(我的设备上有一个灯堆栈),由于某种原因,我被重定向到我的代理 Web 界面(192.168.0.253)。
我究竟做错了什么?
答案1
这或许能解释一下正在发生的事情:
if (isInNet(myIpAddress(), "192.168.0.0", "255.255.255.0"))
return "PROXY 192.168.0.253:3128";
“myIpAddress 函数经常被报告给出不正确或不可用的结果,例如 127.0.0.1,即本地主机的 IP 地址。删除系统主机文件(例如 Linux 上的 /etc/hosts)上任何引用机器主机名的行可能会有所帮助,而行 127.0.0.1 localhost 可以并且应该保留。在 Internet Explorer 9 上,isInNet("localHostName", "second.ip", "255.255.255.255") 返回 true 并且可以用作解决方法。myIpAddress 函数假定设备具有单个 IPv4 地址。如果设备具有多个 IPv4 地址或具有 IPv6 地址,则结果不确定。”
https://en.wikipedia.org/wiki/Proxy_auto-config#The_PAC_File