ご指摘がありました。ありがとうございます。
最後の getClientIPV4() はWebサーバーのIPを返すのではと。
実際、アクセス元クライアントIPではなくWebサーバー のIPでした。
WEBサーバーでVisual Studio のデバッグ時 この getClientIPV4()を使用したとき
IPV4取得できたので、勘違いしました。現在は このgetClientIPV4()は使用しておりません。
従来通り UserHostAddress を使ってます。::1の問題は未解決でコードで127.0.0.1に変換してます。
今回の検証開発環境
- Windows 10 Pro バージョン 1809 64ビット(物理PC)
- Visual Studio 2008 Pro Version 9.0.30729.1 SP + IIS
System.Web.HttpContext.Current.Request.UserHostAddress Visual Studioデバッグ時のみ ::1を返す様です。Visual StudioインストールWebサーバー(IIS)のブラウザからのアクセスでは正常にアクセス元クライアントIPv4を返します。他のクライアントからのアクセスでも正常にアクセス元クライアントIPv4を返します。
現在までの結果より Visual Studio のデバッグOS環境に起因する?
- Windows Server 2012R2(仮想),Windwos10(64ビット物理) デバッグ時 ::1
- Windows Server 2012R2(仮想),Windwos10(64ビット物理) デバッグ機ブラウザからアクセス時 クライアントのIPV4
- Windwos 7(32ビット物理) デバッグ時、ブラウザからのアクセス関係なく クライアントのIPV4
今のところ、OSの設定に寄って ::1 の取得を 127.0.0.1 に変更することは不可能の様です。
コードで ::1 → 127.0.0.1 に変換で行きます。
UserHostAddress が ::1 (IPv6)になってしまう
IPv4を取得したいのだが
開発環境
- Windows Server 2012 R2
- Visual Studio Community 2017
- Asp.net 2.0 3.5 4.5
アクセス元クライアントIPをIPv4で取得できない
System.Web.HttpContext.Current.Request.UserHostAddress で取得するも ::1 になってしまう
::1 は localhost のIPv6でありIPv4 127.0.0.1を取得したい
Visual Studio 2008 まではIPv6の無効化で対応できた
その手順は
「ネットワークと共有センター」でIPv6のチェックを外す
レジストリエディタで HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\DisabledComponents を 0xFF に変更
レジストリ値を 0x20 (IPv6 よりも IPv4 を優先する ) 等いろいろやったがどうしてもIPv6を取得してしまう
netsh interface ipv6 show prefixpolicies で確認すると IPv4がIPv6より優先されているのだが?
はまったので取り敢えずコードで対応
下のコードを追加してようやく アクセス元のIPv4アドレスを取得できた
Function getClientIPV4() As String Dim ipa As String = "" Dim iphEntry As System.Net.IPHostEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()) For Each ipAddr As System.Net.IPAddress In iphEntry.AddressList If ipAddr.AddressFamily = System.Net.Sockets.AddressFamily.InterNetwork Then ipa = ipAddr.ToString() Exit For End If Next Return ipa End Function
コメント
最後のコードはASP.NETのサイトにアクセスしてきたマシンのIP(クライアントIP)ではなく、ASP.NETのサイトを実行しているマシンのIP(ホストIP)を取得するコードになっているのでは?
参考情報
https://www.atmarkit.co.jp/fdotnet/dotnettips/778getmyipaddress/getmyipaddress.html
http://www.4guysfromrolla.com/articles/071807-1.aspx
https://codeday.me/jp/qa/20190401/522769.html