在什么情况下checkip.amazonaws.com返回多个地址?

时间:2018-10-03 00:22:56

标签: amazon-web-services

我正在尝试了解问题reported by a user against one of my open source projects。当他们查询checkip.amazonaws.com时,有时会获得多个逗号分隔的IP地址。

我找不到有关此的任何信息,所以很好奇:

  1. 此Amazon服务是否有适当的文档?
  2. checkip.amazonaws.com在什么情况下返回多个地址?
  3. 返回 时,它们是什么意思?订单有意义吗?

4 个答案:

答案 0 :(得分:2)

使用最右边的值作为权威性值,将任何其他值用作参考性但不可信的值,因为它们实际上是从传入请求的标头中复制的。

测试表明该端点使用HTTP X-Forwarded-For语义并返回最终结果值...因此,如果用户位于注入X-Forwarded-For的任何类型的代理后面,则这些值来自响应中包含传入的请求,并且用于联系该服务的实际地址显示在右侧,作为最后一个值。

您可以通过向请求中插入一个或多个X-Forwarded-For标头来证明这一点。

左边的值(如果存在)可能是请求者网络上的私有内部IP地址,但是X-Forwarded-For的设计意味着既不能证明也不能证明它们是准确的。最右边的那个永远是正确的那个。

请注意,如果使用https访问终结点,则完全看不到此行为,因为代理不太可能注入这样的标头。 (对于MITM代理和证书伪造并非没有可能,但是行为良好的系统永远不会这样做。)

AWS的这项服务是一种故障排除功能,似乎没有正式记录在案。它使用X-Forwarded-For的事实表明,毫无疑问,该测试站点托管在负载均衡器后面,并且响应中出现多个地址可能是由于以下原因导致的意外功能:最初的实现方式。

最佳实践可能是创建自己的“我的IP是什么”服务以嵌入到自己的产品中,因为有时公共服务会被恶意软件/僵尸网络作者滥用。发生这种情况时,您的软件可能被误认为是恶意软件,这使您一团糟,无法解释可能发生的恐慌。第三方服务,即使是“公共”服务,也可能希望不要未经允许就调用其服务。

答案 1 :(得分:0)

DNS名称可以与多个IP地址关联。

来自AWS | Amazon Route 53 | FAQs

  

问。我可以将多个IP地址与一条记录关联吗?

     

是的。通常将多个IP地址与一条记录相关联,以平衡地理位置分散的Web服务器的负载。 Amazon Route 53允许您列出A记录的多个IP地址,并使用所有已配置IP地址的列表来响应DNS请求。

另请参阅:StackOverflow: Multiple IP addresses for Resource Record Sets of Route 53

答案 2 :(得分:0)

服务checkip.amazonaws.com提供发出请求的客户端的公共IP地址。我可以想到两个原因,即可以返回多个IP地址。但是,我无权访问AWS编写的代码以确切知道它们正在处理什么。我编写了一个PHP服务,可以完成相同的功能。

  • 客户端的Internet路由器是多宿主的。这意味着路由器为了冗余,性能或负载平衡而连接到多个Internet。
  • 代理服务器,负载平衡器等可以将其IP地址附加到HTTP标头,如果智能服务不知道哪个IP地址(客户端IP或代理IP),则可以显示多个IP地址。 / li>

我确信还有更多的情况。但是,您应该解析IP地址字符串,并在逗号,制表符等处分割或终止该字符串,以便仅指定第一个valid IP地址。

答案 3 :(得分:0)

checkip.amazonaws.com服务似乎不再返回多个IP:

$ curl --header "X-Forwarded-For: 10.10.10.3" \
  --header "X-Forwarded-For: 10.10.10.2" \
  --header "X-Forwarded-For: 10.10.10.1" \
  http://checkip.amazonaws.com/
10.10.10.3

有人还会返回多个IP吗?