ネットワークカードのプロパティセクションで、Windows Server 2008で、IPV6を無効にし、IPV4のみを有効にしました。
ただし、ASP.NETでは、Request.UserHostAddressはIPV6アドレスである'::1'を返します。
誰かがIPV4に戻す方法を知っていますか?
Rolla Web サイトの 4 Guys には、こちらのソリューションがあり、これをアプリで使用しました。
アップデート:
このリンクが無効になった場合に備えて、このリンクに基づくコードを次に示します。
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();
}
localhost (::1 / 127.0.0.1) に接続している場合、サーバーにあるネットワーク カードを使用しているのではなく、Windows にある仮想カードのように使用しています。システム全体からサポートを削除せずに、ループバック カードを構成してそこから IPv6 を削除する方法はないと思いますが、Win2008 ではおそらくそれができなくなりました。
ネットワーク パケット キャプチャ ユーティリティを実行して、物理カードが使用されていないことを確認できます。Windows では、仮想ループバック カードを通過するトラフィックを傍受することはできません。
とはいえ、別のマシンから (物理カードを通過する接続を介して) アクセスする場合は、IPv4 アドレスが返されるはずです。Request.UserHostAddress
[スタート]->[コントロールパネル]をクリック->[View network status and tasks
コントロールパネル]ウィンドウをクリック->[ウィンドウ]をクリックしchange adapter settings
ますNetwork and Sharing Center
。
Network Connections
ウィンドウが表示されます。network adapter
ここで、 IPv6を無効にする(ワイヤレスアダプタまたは有線イーサネットアダプタの場合があります)を右クリックして、をクリックしますProperties
。
network adapter properties
ウィンドウで、チェックを外しInternet Protocol Version 6 (TCP/IPv6)
て[OK]をクリックします。
コマンドプロンプトregedit
を入力してレジストリエディタを起動し、レジストリエディタで次のレジストリ項目を探します。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\DisabledComponents
アイテムが使用できない場合はDisabledComponents
、[編集]->[新規]->[DWORD(32ビット)値]に移動し、値を0xffffffff
(タイプするだけffffffff
)に設定して、次の形式でアイテムを作成する必要があります。これにより、IPv6ループバックインターフェイスを除くすべてのIPv6機能が無効になり、最後にをクリックしますOK
。
コンピューターを再起動します。