Proxy.pac myIpAddress() 返回本地地址而不是以太网适配器

Proxy.pac myIpAddress() 返回本地地址而不是以太网适配器

这有点像第二部分从这里

当客户端通过 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 的浏览器存在此问题,但这些问题无法轻易解决,因为函数调用最初是在假设系统是单宿主的情况下定义的(除非您与物理网络断开连接,并且仅在环回上运行,否则这是完全错误的)。

相关内容