Ipv4 vs ipv6客户端识别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ipv4 vs 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来节省地址空间,IPv6地址经常随时间变化(至少在相同的前缀内,有时候前缀也会发生变化)

如果您想获得最佳估计,那么您可以在页面上加载两个图像:一个托管在仅IPv4主机名上,另一个托管在仅IPv6主机名上。在URL中包含唯一标识符,您可以为大多数用户关联IPv4和IPv6地址。但这需要多次请求而且不完美,所以从技术上讲,这不是你问题的答案......

以上是关于Ipv4 vs ipv6客户端识别的主要内容,如果未能解决你的问题,请参考以下文章

IPv6 VS IPv4,谈谈升级 IPv6 的必要性

IPV4 VS IPV6 谈谈省级ipv6的必要性

winsock2:服务器端代码调用`accept()`后如何获取已连接客户端的ipv4/ipv6地址

在启用了IPV6的机器上获取客户端ipv4地址

IPv4与IPv6的区别

与 IPv4 相比,IPv6 都有哪些改进?