【问题标题】:HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] is returning IPv6HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] 正在返回 IPv6
【发布时间】:2011-09-07 18:30:12
【问题描述】:

Microsoft 的 HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] 正在为远程客户端返回 IPv6。但是,我需要将此数据用于 ClientIP 列为 varchar(15) 的会话日志记录表... IOW,我需要 IPv4 客户端 IP 地址,因为 IPv6 会引发字符串截断错误。

这可行吗?

【问题讨论】:

  • 您无法仅根据用户的 IPv6 地址找出用户的 IPv4 地址。完全不可能。 (在极少数情况下(并且仅在非 Windows 操作系统上支持)当应用程序使用单个双栈套接字同时绑定 v4+v6 时,IPv6 地址包含在地址中,例如::ffff:1.2.3.4,但这是不太可能的你的情况下的场景——特别是考虑到,就像我说的,它在 Windows 上不受支持。)

标签: ipv6 httpcontext ipv4


【解决方案1】:

不,客户端的 IPv4 和 IPv6 地址完全不相关,因此当他们通过 IPv6 连接时,您无法找到某人的 IPv4 地址。也许他们甚至没有 IPv4 地址……或者至少没有唯一的 IPv4 地址。越来越多的 ISP 将开始在客户之间共享 IPv4 地址,因为他们没有足够的 IPv4 地址给每个用户自己的地址。这也意味着,如果 IPv4 地址来自客户共享的地址池,用户的 IPv4 地址可能会随着时间而改变。

当然,您可以尝试让用户通过 IPv4 连接。但就像我说的:不能保证这会给你一些有用的东西。而且在(不久的)将来,情况会变得更糟......

【讨论】:

    猜你喜欢
    • 2011-02-06
    • 2023-03-03
    • 2013-10-19
    • 2012-05-06
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 2012-08-12
    • 2016-04-10
    相关资源
    最近更新 更多