为了账号安全,请及时绑定邮箱和手机立即绑定

`(AuthenticationHandler.)Context.Connection.

`(AuthenticationHandler.)Context.Connection.

C#
MM们 2023-09-09 17:24:21
我做什么我从与 .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 地址将是一种合理的方法。我将如何处理这些解决方案?客观上,其中一个比另一个更好吗?(这应该是一个允许的问题,因为我不是在征求个人意见!)
查看完整描述

1 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

事实证明,选项 2 非常简单:只需.MapToIPv6()在比较之前在两个地址上运行即可。我认为这可能是最好的解决方案,原因很简单,当/如果这也与 IPv6 地址一起使用时,它显然不会导致任何问题!



查看完整回答
反对 回复 2023-09-09
  • 1 回答
  • 0 关注
  • 43 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信