C# Ipv4与ipv6客户端标识

C# Ipv4与ipv6客户端标识,c#,.net,networking,ipv6,ipv4,C#,.net,Networking,Ipv6,Ipv4,我想知道HTTP请求是否可以同时保存客户端的ipv4和ipv6地址 我正在编写一个.NET应用程序,正在使用以下方法探测客户端的IP地址: HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; Dns.GetHostAddresses(Dns.GetHostName()) 我假设HTTP请求总

我想知道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地址。但是它需要多个请求,而且并不完美,因此从技术上讲,它不是对您问题的回答…

不可能在一个HTTP请求中从客户端获得多个地址。有几个复杂因素:

  • 正如您已经怀疑的那样,HTTP连接一次使用一个协议
  • 一个客户端有多个IPv6地址是很常见的,这些地址会随着时间的推移而变化
  • 客户端可能根本没有多个地址,并且只能是IPv4或IPv6
  • 使用地址作为标识很棘手:ISP使用NAT44和NAT64来节省地址空间,IPv6地址通常会随着时间的推移而变化(至少在同一前缀内,有时前缀也会变化)
例如,如果您希望获得最佳估计,可以在页面上加载两个映像:一个托管在仅IPv4主机名上,另一个托管在仅IPv6主机名上。在URL中包含一个唯一标识符,您就可以为大多数用户关联IPv4和IPv6地址。但它需要多个请求,而且并不完美,所以从技术上讲,它并不是对你问题的回答