`(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 流量毫无意义。
我也不想做某种模糊的字符串比较;尽管它可以工作并且我看不出有任何问题,但我感觉有更好的解决方案。
问题
我可以看到两种可能的解决方案,但我不确定如何实现它们:
可能有一种方法可以确保 RemoteIPAddress
return 是我期望的 IPv4 形式的远程 IP 地址。
可能总是将所有 IP 地址转换为这种仿 IPv6 格式,如果该转换是幂等的,那么在比较之前规范化所有 IP 地址将是一种合理的方法。
我将如何处理这些解决方案?
一个客观上比另一个好吗? (这应该是一个允许的问题,因为我不是征求个人意见!)
事实证明选项 2 非常简单:在比较之前对两个地址简单地 运行 .MapToIPv6()
。我认为这可能是最好的解决方案,原因很简单,它显然不会引起任何问题when/if这也用于 IPv6 地址!
我做什么
我正在从与 .NET Core ASP 服务器相同的 IPv4 本地网络上的远程客户端发出 HTTP 请求。此服务器配置为使用 AuthenticationHandler
的子类对通过 Context.Connection.RemoteIPAddress
.
我的期望
当应用程序在 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 流量毫无意义。
我也不想做某种模糊的字符串比较;尽管它可以工作并且我看不出有任何问题,但我感觉有更好的解决方案。
问题
我可以看到两种可能的解决方案,但我不确定如何实现它们:
可能有一种方法可以确保
RemoteIPAddress
return 是我期望的 IPv4 形式的远程 IP 地址。可能总是将所有 IP 地址转换为这种仿 IPv6 格式,如果该转换是幂等的,那么在比较之前规范化所有 IP 地址将是一种合理的方法。
我将如何处理这些解决方案?
一个客观上比另一个好吗? (这应该是一个允许的问题,因为我不是征求个人意见!)
事实证明选项 2 非常简单:在比较之前对两个地址简单地 运行 .MapToIPv6()
。我认为这可能是最好的解决方案,原因很简单,它显然不会引起任何问题when/if这也用于 IPv6 地址!