IPv4 与 IPv6 客户端识别
Ipv4 vs ipv6 client identification
我想知道 HTTP 请求是否可以同时保存客户端的 ipv4 和 ipv6 地址?
我正在编写 .NET 应用程序并使用以下方法探测客户端的 IP 地址:
HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
Dns.GetHostAddresses(Dns.GetHostName())
我假设 HTTP 请求总是发送到单个地址,IPV4 或 IPV6,不能都正确吗?即使是通过 FQDN 调用?
理论上是否可以在单个 http 调用中同时获取客户端的 ipv4 和 ipv6 地址?
无法在单个 HTTP 请求中从客户端获取多个地址。有几种并发症:
- 因为您已经怀疑 HTTP 连接一次使用一种协议
- 一个客户端拥有多个 IPv6 地址是很常见的,这些地址会随时间变化
- 客户端可能根本没有多个地址,并且是仅 IPv4 或仅 IPv6
- 使用地址作为标识是有技巧的:ISP 使用 NAT44 和 NAT64 来保存地址 space,IPv6 地址经常随时间变化(至少在相同的前缀内,有时前缀也会变化)
如果您想获得 best-estimate,那么您可以在您的页面上加载两张图片:一张托管在仅支持 IPv4 的主机名上,另一张托管在仅支持 IPv6 的主机名上。在 URL 中包含一个唯一标识符,您可能能够为大多数用户关联 IPv4 和 IPv6 地址。但它需要多个请求并且它不会是完美的,所以它在技术上不是你问题的答案......
我想知道 HTTP 请求是否可以同时保存客户端的 ipv4 和 ipv6 地址?
我正在编写 .NET 应用程序并使用以下方法探测客户端的 IP 地址:
HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
Dns.GetHostAddresses(Dns.GetHostName())
我假设 HTTP 请求总是发送到单个地址,IPV4 或 IPV6,不能都正确吗?即使是通过 FQDN 调用?
理论上是否可以在单个 http 调用中同时获取客户端的 ipv4 和 ipv6 地址?
无法在单个 HTTP 请求中从客户端获取多个地址。有几种并发症:
- 因为您已经怀疑 HTTP 连接一次使用一种协议
- 一个客户端拥有多个 IPv6 地址是很常见的,这些地址会随时间变化
- 客户端可能根本没有多个地址,并且是仅 IPv4 或仅 IPv6
- 使用地址作为标识是有技巧的:ISP 使用 NAT44 和 NAT64 来保存地址 space,IPv6 地址经常随时间变化(至少在相同的前缀内,有时前缀也会变化)
如果您想获得 best-estimate,那么您可以在您的页面上加载两张图片:一张托管在仅支持 IPv4 的主机名上,另一张托管在仅支持 IPv6 的主机名上。在 URL 中包含一个唯一标识符,您可能能够为大多数用户关联 IPv4 和 IPv6 地址。但它需要多个请求并且它不会是完美的,所以它在技术上不是你问题的答案......