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 Functionhttps://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/