客户端的亚马逊云端IP解析

时间:2015-01-03 12:54:26

标签: javascript dns

我有一个使用大量通过CloudFront缓存的图像的webapp。一些用户抱怨加载时间非常慢,所以我想在网站上构建一个诊断页面,通过加载一些图像并报告时间来进行速度测试。我还想报告用户的IP地址(我可以在加载页面时轻松地从php获取),但我还想显示他们为cloudfront服务器获取的IP地址。

我知道如果我跑:

dig subdomain.cloudfront.net

我收到了几个IP地址。如果应用程序(浏览器,QT应用程序,移动应用程序)正在同时运行与subdomain.cloudfront.net的连接,它是否始终首先使用第一个IP并仅在其失败时使用其他IP?

从浏览器中我是否可以通过客户端用户系统获取这些IP地址?我的理解是他们会根据他们的IP地址获得不同的IP列表。

如果浏览器中无法做到这一点,是否有任何类型的请求可以发送到云端服务器,并在响应中包含它的IP地址?

1 个答案:

答案 0 :(得分:0)

  

它总是首先使用第一个IP

大多数现代DNS解析器和权威服务器会随机化IP地址的顺序 - 更确切地说,是给定域名的A记录集。

所以,“第一个IP”确实不是确定性的。

  

只有在失败时才使用其他人?

显然这与浏览器有关。 Most modern browsers do handle it重试其他IP。我不会指望它。

  

有什么方法可以从浏览器中获取这些IP地址,因为它们来自客户端用户系统?

在Chrome devtools网络面板中,您可以在请求的“远程地址”字段中查看浏览器连接的地址。但是,我不知道有任何方法可以从页面上的Javascript访问它。

  

据我了解,他们会根据IP地址获得不同的IP列表。

  

是否有任何类型的请求可以发送到云端服务器,其中包含响应中的IP地址?

不是我知道的。但是,您可以对ViaX-Amz-Cf-Id响应标头进行反向工程设计?粗略地看一眼,在hex或base64解码后,两者都无法理解。

也就是说,有一个技巧可以使用,即您可以在您的发行版中设置一个URL前缀,将请求转发给运行PHP的服务器。然后,您将用户指向一个URL,该URL将导致请求转发到您的PHP脚本。在PHP脚本中,检查X-Forwarded-For标题,其中应包含Cloudfront IP。