web-dev-qa-db-ja.com

Proxy.pac myIpAddress()は、イーサネットアダプタではなくローカルアドレスを返します

これはちょっとパート2 ここから です。

クライアントが私のネットワークにVPNで接続すると、IPアドレスが割り当てられ、DHCPから252オプションが提供されます。自動検出は、このファイルを取得します

基本的に必要なのは、proxy.pacがクライアントがVPN接続を使用しているかどうかを判断し、クライアントのDIRECTを解決できるようにする方法です。

したがって、単純なvar myIp = myipAddress()を実行し、これらの固定アドレスのリストから一致させると、解決されます。ただし、myIpAddress()関数は、ネットワークアダプターではなく、マシン(例:192.168.10.1)へのローカルIPを取得しているようです。私の場合、そのローカルアドレスは、一部のローカルVMに必要なMSループバックです。ループバックアダプタを無効にすると、正しいアドレスの解決が開始されます。これは理想的な回避策ではありません。

では、正しいアダプターから必要なIPアドレスを解決するにはどうすればよいですか?

  • 私は今のところ、ローカルマシンからこのテストを行っています。
  • これはクローズドVPNソリューションではなく、現時点で決定されているものであることを認識しています。

前もって感謝します...

1
Qwerty

残念ながら、myIpAddress()がWindowsで正しいアドレスを返すようにするには、NICの優先度を変更する必要があります(WindowsではXP this [ネットワーク接続]ダイアログの[詳細]メニューの[詳細設定...]ダイアログにあります)。

これがあなたが見ているもののように見える他の誰かの問題です: http://www.geurtsrus.com/gerke/2005/01/proxy-auto-configuration-blues.html

プロキシを必要としないIPアドレス(つまり、会社のローカルサブネット)ではなく、プロキシを必要とするIPアドレスを検出し、それ以外の場合はDIRECTを想定する方がよい場合があります。

別の方法は、VPN上のクライアントに別のPACDHCPオプションを渡すことです。 VPNユーザーが専用サブネットから出ている場合は簡単かもしれませんが、LANサブネットから出ている場合はそうではないかもしれません。

3
Evan Anderson

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";
}
2
leszek.hanusz

どのブラウザを使用していますか? Mozillaベースのブラウザにはこれに問題がありましたが、関数呼び出しは元々システムがシングルホームであると想定して定義されていたため、簡単に解決できませんでした(物理ネットワークから切断され、ループバックでのみ実行されていない限り、これは完全に誤りです)。

0
benc