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

这是从这里的第二部分。

当客户端VPN到我的networking,他们得到分配一个IP地址,这反过来给他们从DHCP的252选项。 自动检测然后抓取这个文件

我基本上需要的是proxy.pac找出一个客户端是否在VPN连接上,以便它可以parsing一个DIRECT的方法。

所以,如果我做一个简单的var myIp = myipAddress() ,然后只是从这些固定地址列表匹配它,那么它将被解决。 然而,myIpAddress()函数似乎是拿起本地IP到机器(例如:192.168.10.1),而不是networking适配器。 在我的情况下,本地地址是我的MS Loopback,这是我的一些本地虚拟机所需要的。 如果我禁用我的环回适配器,它开始parsing正确的地址。 这不是一个理想的解决方法。

那么我该如何去解决我想从正确的适配器的IP地址?

  • 现在我一直在使用本地机器进行testing。
  • 我知道,这不是一个封闭的VPN解决scheme,这是目前已经决定的。

提前致谢…

不幸的是,在Windows 获取myIpAddress()返回正确的地址确实涉及到改变NIC的优先级(在Windows XP中,这是在“networking连接”对话框的“高级”菜单的“高级设置…”对话框)。

这是别人的问题,看起来像你所看到的: http : //www.geurtsrus.com/gerke/2005/01/proxy-auto-configuration-blues.html

您可能会更好地检测需要代理的IP地址,而不是那些不需要代理的IP地址(即公司内的本地子网),否则将采用DIRECT。

另一种方法是将不同的PAC DHCP选项传递给VPN上的客户端。 如果你的VPN用户从一个专用的子网出来,这可能是容易的,但是如果他们是从一个LAN子网出来的话,这可能是不容易的。

可以将wpad.datredirect到wpad.aspx并使用ASP查找IP地址:

<% Dim strClientIP As String strClientIP = Request.UserHostAddress() %> function FindProxyForURL(url, host) { //proxy definition var UseProxy = "PROXY xxxx:8080" if (isPlainHostName(host)) {return "DIRECT"; } if (isInNet("<%Response.Write(strClientIP)%>", "xx1.0", "255.255.255.0")) return UseProxy; else return "DIRECT"; } 

你使用的是什么浏览器? 基于Mozilla的浏览器遇到了这个问题,但是它们不能轻易解决,因为函数调用最初是在假定系统是单宿主的情况下定义的(除非你从物理networking断开连接,并且只在环回中运行)。