http://www.4guysfromrolla.com/articles/071807-1.aspx
System.Web.HttpContext.Current.Request.UserHostAddressでIPv6が取得されてしまう場合に、IPv6ではなくIPv4のアドレスを取得するには以下のようにする。
Public Shared Function GetIP4Address() As String Dim IP4Address As String = String.Empty For Each IPA As IPAddress In Dns.GetHostAddresses(HttpContext.Current.Request.UserHostAddress) If IPA.AddressFamily.ToString() = "InterNetwork" Then IP4Address = IPA.ToString() Exit For End If Next If IP4Address <> String.Empty Then Return IP4Address End If 'ここは、IPv4が取得できなかったとき代わりにクライアントIPではなくホストIP(ASP.NETを実行しているマシンのIP)を取得するというコード 'For Each IPA As IPAddress In Dns.GetHostAddresses(Dns.GetHostName()) ' If IPA.AddressFamily.ToString() = "InterNetwork" Then ' IP4Address = IPA.ToString() ' Exit For ' End If 'Next Return IP4Address End Function
https://codeday.me/jp/qa/20190401/522769.html
そしてIPv4アドレスをサクッと取るのは実は無理らしい。
魔法のIPV4⇔IPV6コンバータはありません。それらは完全に異なるプロトコルであり、
一方のアドレスは他方のアドレスに変換されません。
クライアントのIPV4アドレスを確実に取得したい場合は、クライアントがIPV4を介して
接続していることを確認する必要があります。
なぜか知らんが日本語で検索すると、ASP.NETでクライアントIPを取得するというタイトルで、ホストのIPv4アドレスを取得するコードを載せている誤った情報が出てくるので注意。
http://noritarou532.hatenablog.com/entry/2014/07/22/154523
https://www.aiik.net/2019/01/17/asp-net%E3%81%A7%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88ip%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/