web-dev-qa-db-ja.com

IIS Request.UserHostAddressはIPV6が無効の場合でもIPV6(:: 1)を返します

Windows Server 2008のネットワークカードのプロパティセクションで、IPV6を無効にし、IPV4のみを有効にします。

ただし、ASP.NETでは、Request.UserHostAddressはIPV6アドレスである「:: 1」を返します。

誰かがIPV4に戻す方法を知っていますか?

30
maxp

Localhost(:: 1/127.0.0.1)に接続している場合は、サーバーにあるネットワークカードではなく、Windowsにある仮想カードを使用しています。システム全体からサポートを削除せずにループバックカードを構成してIPv6を削除する方法はないと思いますが、Win2008ではおそらくそれを行うことはできません。

ネットワークパケットキャプチャユーティリティを実行して、物理カードが使用されていないことを確認できます。 Windowsでは、仮想ループバックカードを通過するトラフィックを傍受することはできません。

つまり、別のマシンから(物理カードを通過する接続を介して)アクセスすると、Request.UserHostAddressからIPv4アドレスが返されることがわかります。

23
Miguel Ventura

Rollaのウェブサイトの4人の男性には、アプリで使用した解決策 here があります。

更新:

このリンクが機能しなくなった場合に備えて、このリンクに基づくコードを次に示します。

public string GetIpAddress()
{
    string ipAddressString = HttpContext.Current.Request.UserHostAddress;

    if (ipAddressString == null)
        return null;

    IPAddress ipAddress;
    IPAddress.TryParse(ipAddressString, out ipAddress);

    // If we got an IPV6 address, then we need to ask the network for the IPV4 address 
    // This usually only happens when the browser is on the same machine as the server.
    if (ipAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
    {
        ipAddress = System.Net.Dns.GetHostEntry(ipAddress).AddressList
            .First(x => x.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork);
    }

    return ipAddress.ToString();
}
34
David
  1. スタート->コントロールパネルをクリック->コントロールパネルウィンドウで_View network status and tasks_をクリック-> _change adapter settings_ウィンドウで_Network and Sharing Center_をクリック.

  2. _Network Connections_ウィンドウが表示されます。ここで、IPv6を無効にする_network adapter_(ワイヤレスアダプターまたは有線イーサネットアダプターのいずれか)を右クリックして、Propertiesをクリックします。

  3. _network adapter properties_ウィンドウで、Internet Protocol Version 6 (TCP/IPv6)のチェックを外し、[OK]をクリックします。

  4. コマンドプロンプトにregeditと入力してレジストリエディターを起動し、レジストリエディターで次のレジストリアイテムを見つけます。

    _HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\DisabledComponents
    _
  5. DisabledComponentsアイテムが利用できない場合は、[編集]-> [新規]-> [DWORD(32ビット)値]に移動して値を_0xffffffff_に設定する(ffffffffと入力する)ことで、次の形式で作成する必要があります。これにより、IPv6ループバックインターフェイスを除くすべてのIPv6機能が無効になり、最後にOKをクリックします。

  6. コンピュータを再起動します。

4
Rageesh G R