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,這是我的一些本地虛擬機器所需要的。如果我禁用環回適配器,它就會開始解析正確的位址。這不是一個理想的解決方法。

那麼我該如何從正確的適配器解析我想要的 IP 位址呢?

  • 我現在一直在本地機器上進行此測試。
  • 我知道這不是一個封閉的 VPN 解決方案,這只是目前已經決定的。

提前致謝...

答案1

不幸的是,讓 myIpAddress() 在 Windows 中傳回正確的位址涉及更改 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 的瀏覽器在這方面有問題,但它們無法輕易解決,因為函數呼叫最初是在假設系統是單宿主的情況下定義的(這是完全錯誤的,除非您與物理網路斷開連接,並且僅在環回上運行)。

相關內容