我做什么
我从与 .NET Core ASP 服务器位于同一 IPv4 本地网络上的远程客户端发出 HTTP 请求。该服务器配置为AuthenticationHandler
通过 访问远程 IP 地址的子类验证请求Context.Connection.RemoteIPAddress
。
我的期望
当应用程序在 Unixy 系统上运行时,Context.Connection.RemoteIPAddress
返回IPAddress
表示为预期的“192.168.1.12”的值。
会发生什么
当应用程序在 Windows 系统上运行时,Context.Connection.RemoteIPAddress
返回IPAddress
表示为“::ffff:192.168.1.12”的值。
问题
我想将 的返回值RemoteIPAddress
与另一个IPAddress
值进行比较,但该值表示为简单的“192.168.1.12”。因此,尽管两个地址相同(或应该相同!),但它们比较起来不相等。
非解决方案
这是一个仅支持 IPv4 的网络,因此尝试阻止 IPv6 流量是没有意义的。
我也不想进行某种模糊字符串比较;尽管它可以工作并且我看不出有任何问题,但我有一种感觉,那里有更好的解决方案。
问题
我可以看到两种可能的解决方案,但我不确定如何实现它们:
可能有一种方法可以确保以RemoteIPAddress
我期望的 IPv4 形式返回远程 IP 地址。
可能始终将所有 IP 地址转换为这种人造 IPv6 格式,并且如果该转换是幂等的,则在比较之前标准化所有 IP 地址将是一种合理的方法。
我将如何处理这些解决方案?
客观上,其中一个比另一个更好吗?(这应该是一个允许的问题,因为我不是在征求个人意见!)
慕妹3242003
相关分类