![Proxy.pac myIpAddress() 返回本地地址而不是以太网适配器](https://linux22.com/image/487567/Proxy.pac%20myIpAddress()%20%E8%BF%94%E5%9B%9E%E6%9C%AC%E5%9C%B0%E5%9C%B0%E5%9D%80%E8%80%8C%E4%B8%8D%E6%98%AF%E4%BB%A5%E5%A4%AA%E7%BD%91%E9%80%82%E9%85%8D%E5%99%A8.png)
这有点像第二部分从这里。
当客户端通过 VPN 接入我的网络时,他们会被分配一个 IP 地址,从而从 DHCP 获得 252 选项。然后自动检测会抓取此文件
我本质上需要的是一种让 proxy.pac 确定客户端是否处于 VPN 连接上的方法,以便它可以为它们解析 DIRECT。
所以如果我做一个简单的var myIp = myipAddress()然后只需从这些固定地址列表中匹配它,就可以解决。但是 myIpAddress() 函数似乎正在获取机器的本地 IP(例如:192.168.10.1)而不是网络适配器。在我的情况下,本地地址是我的 MS Loopback,这是我的一些本地虚拟机所需要的。如果我禁用我的 Loopback 适配器,它就会开始解析正确的地址。这不是一个理想的解决方法。
那么我该如何从正确的适配器解析我想要的 IP 地址呢?
- 我目前一直在从本地机器进行此测试。
- 我知道这不是一个封闭的VPN解决方案,这只是目前已经决定的。
提前致谢...
答案1
不幸的是,在 Windows 中让 myIpAddress() 返回正确的地址做涉及更改 NIC 的优先级(在 Windows XP 中,这是在“网络连接”对话框的“高级”菜单的“高级设置...”对话框中)。
这是其他人遇到的问题,与您所看到的类似:http://www.geurtsrus.com/gerke/2005/01/proxy-auto-configuration-blues.html
您最好检测需要代理的 IP 地址,而不是不需要代理的 IP 地址(即公司内的本地子网),否则就假定是 DIRECT。
另一种方法是将不同的 PAC DHCP 选项传递给 VPN 上的客户端。如果您的 VPN 用户来自专用子网,这可能很容易,但如果他们来自 LAN 子网,则可能不太容易。
答案2
可以将 wpad.dat 重定向到 wpad.aspx 并使用 ASP 查找 IP 地址:
<%
Dim strClientIP As String
strClientIP = Request.UserHostAddress()
%>
function FindProxyForURL(url, host)
{
//proxy definition
var UseProxy = "PROXY x.x.x.x:8080"
if (isPlainHostName(host)) {return "DIRECT"; }
if (isInNet("<%Response.Write(strClientIP)%>", "x.x.1.0", "255.255.255.0"))
return UseProxy;
else
return "DIRECT";
}
答案3
您使用的是什么浏览器?基于 Mozilla 的浏览器存在此问题,但这些问题无法轻易解决,因为函数调用最初是在假设系统是单宿主的情况下定义的(除非您与物理网络断开连接,并且仅在环回上运行,否则这是完全错误的)。