`(AuthenticationHandler.)Context.Connection.RemoteIPAddress` returns `::ffff:192.168.1.12` 在 Windows

`(AuthenticationHandler.)Context.Connection.RemoteIPAddress` returns `::ffff:192.168.1.12` on Windows

我做什么

我正在从与 .NET Core ASP 服务器相同的 IPv4 本地网络上的远程客户端发出 HTTP 请求。此服务器配置为使用 AuthenticationHandler 的子类对通过 Context.Connection.RemoteIPAddress.

访问远程 IP 地址的请求进行身份验证

我的期望

当应用程序在 Unixy 系统上 运行 时,Context.Connection.RemoteIPAddress return 是一个 IPAddress,表示为预期的“192.168.1.12”。

发生了什么

当应用程序在 Windows 系统上 运行 时,Context.Connection.RemoteIPAddress return 是一个 IPAddress,表示为“::ffff:192.168 .1.12".

问题

我想将 RemoteIPAddress 的 return 值与另一个 IPAddress 值进行比较,但是,后者表示为普通的“192.168.1.12”。因此,这两个地址被比较为不相等,即使它们是(或应该是!)相同。

无解

这是一个纯 IPv4 网络,因此尝试阻止 IPv6 流量毫无意义。

我也不想做某种模糊的字符串比较;尽管它可以工作并且我看不出有任何问题,但我感觉有更好的解决方案。

问题

我可以看到两种可能的解决方案,但我不确定如何实现它们:

我将如何处理这些解决方案?

一个客观上比另一个好吗? (这应该是一个允许的问题,因为我不是征求个人意见!)

事实证明选项 2 非常简单:在比较之前对两个地址简单地 运行 .MapToIPv6()。我认为这可能是最好的解决方案,原因很简单,它显然不会引起任何问题when/if这也用于 IPv6 地址!