Tom Asked: 2010-01-28 20:16:34 +0800 CST2010-01-28 20:16:34 +0800 CST 2010-01-28 20:16:34 +0800 CST 有什么方法可以确定站点上是否正在使用负载均衡器? 772 标题就差不多了。是否有任何特定行为表明某个站点上存在负载均衡器? load-balancing 7 个回答 Voted cagenut 2010-01-29T06:41:20+08:002010-01-29T06:41:20+08:00 没有确定的方法,但是您可以寻找一大堆线索。 - 映射它。nmap 可以为您正在与之交谈的任何设备的操作系统提供一些线索。如果它说 BSD 并且 url 以 .aspx 结尾,那么你就搞定了。 - cookie:许多负载均衡器添加(或可以添加)会话cookie。寻找任何奇怪的并用谷歌搜索它们,如果你登陆 F5 支持论坛,viola。 - 各种其他标题:很多人会根据项目是否缓存(以及其他原因)等内容添加标题。寻找任何有趣的标题并用谷歌搜索它们。 - 在页面上或隐藏在 html 注释中,开发人员通常会添加“由 web7 提供服务”以帮助他们进行故障排除。 - 从多个不同的 ip 快速请求相同的内容并比较 ETag 标头。默认情况下,Apache 将 etag 建立在文件系统 inode 的基础上,并且许多管理员从未调整过它,因此如果您看到相同内容的不同 Etag,您可以猜测它来自不同的服务器(仅适用于 apache,仅适用于如果未调整,则仅在不是共享文件系统时才有效)。 老实说,我只希望所有这些都能给你一个有意义的答案,比如 4 次中有 1 次,但总的来说,除非凯瑟琳说“出了点问题”,否则你无法真正知道。 Best Answer Patrick R 2010-01-28T20:38:34+08:002010-01-28T20:38:34+08:00 编辑:如果不是不可能的话(不喜欢这个词),这将是非常困难的,因为拥有 LoadBalancer 的全部目的是使客户端与它的交互透明且基本上不可见。话虽如此,这是我的原始帖子: 我为一个相当大的站点管理负载均衡器。唯一表明我们的访问者正在访问任何特定应用程序服务器的迹象是,我们实际上将服务器的特定名称放在了他们登录页面的底部。这有助于我们解决他们遇到的问题。 除此之外,如果我们不遵循该策略,我只能想到一件事会让您“了解”我们正在运行负载均衡器这一事实。以下是您如何判断的方法,但这需要一些运气。 假设负载均衡器设置为将所有流量转发到一台服务器或另一台服务器。或者至少它将一台服务器之间的 ssh 流量转发到另一台服务器。即使您可能没有登录凭据来登录任何一个框,但如果您尝试登录,两者都会为您提供不同的密钥。因此,如果您第一次尝试通过 ssh 登录,系统会询问您是否你想接受密钥。然后,如果您在第二次或第三次请求中运气好,您将被告知有一个不同的密钥(即它是另一个盒子)。在 *nix 系统上,您经常被警告这可能是由于中间人攻击造成的。 所以有两件事必须到位: 远程服务器上的 SSH SSH 的 LB 因此,如果您在相对较短的时间内获得了两个密钥,您可能会假设系统管理员没有更改它们,而是您刚刚与负载均衡器后面的两台单独的机器进行了通信。 注意:还有另一件物品,但它是在黑暗中真实拍摄的。您可以尝试找出与该服务器分组的 IP 块。然后假设在这些特定 IP 地址之一上放置在 LB 上(实际上它位于这些 IP 之一上)。 例如,负载均衡器位于 XXX.XXX.XXX.5。然后将设置 LB 以捕获至少一个额外 IP 地址的所有流量。它通常不会转发 XXX.XXX.XXX.5 的流量(我拥有的商业硬件肯定不会这样做)。因此,您可以指望存在和管理地址。 如果 LB 设置为允许来自所有外部主机的管理员,则您可以将 /admin 之类的内容附加到 IP 地址,直到找到 LB。这假定 LB 使用该路径进行管理。 Stefan 2011-07-09T04:16:45+08:002011-07-09T04:16:45+08:00 每个 IP 堆栈的 IP ID 都会发生变化,因此 IP 主机“位于”负载平衡器的“后面”。像 hping 这样的工具会为您提供:注意不属于同一范围的 ID,或者 - 即使由于一些奇怪的巧合足够接近 - 不会增加: hping3 www.yoursite.com -S -p 80 (or whatever) 以上在应用层“下”捕获了 LB 后面的多个主机。 Catherine MacInnes 2010-01-28T21:28:56+08:002010-01-28T21:28:56+08:00 所以,我认为问题是,如果有负载平衡器,你能否从网站行为中随便弄清楚,我敢说答案是“除非出现问题,否则不会”(比如服务器不同步)。但是,至少理论上可以确定您和响应请求的服务器之间是否存在额外的“不可见”设备。该设备可能是代理服务器、端口转发器、静态 NAT 设备、负载平衡器,或者可能是我错过的其他东西。基本上任何响应 IP 上的 ping,但最终不提供 HTTP 请求的东西。本质上,您可以使用诸如 traceroute 之类的方法计算出您与站点的公共 IP 之间有多少跃点。然后您进行一些数据包检查以确定来自主机的数据包的 TTL。由于 TTL 的可能起始值是有限且定义明确的(除非有人对其网络堆栈进行了严重的黑客攻击),因此您可以确定是否存在额外的跃点。不确定这是否对您有帮助,但我至少认为这是一个有趣的想法。 Sim 2010-01-28T21:45:00+08:002010-01-28T21:45:00+08:00 如果负载均衡器正在执行基于 cookie 的持久性,那么查看 cookie 可能会给您一个线索。 Joel K 2010-01-29T08:57:11+08:002010-01-29T08:57:11+08:00 密切注意 HTTP 标头。 wget --save-headers 可以帮助您捕获它们..(也有跟踪标题的 Firefox 插件) 一遍又一遍地点击同一个页面,寻找诸如交替的“Last-Modified or Expires”标题之类的东西。 许多网站也在标头中对其后端服务器进行编码。如果它在那里,那应该会脱颖而出。 祝你好运。 Maxwell 2011-07-09T04:55:42+08:002011-07-09T04:55:42+08:00 尝试使用 IP 标识字段来标识不同的 IP 堆栈(如果有)可能是值得的。您可能想在Scapy 演示页面上阅读更多关于如何做到这一点的信息(找到带有“IPID 字段”字样的行)。
没有确定的方法,但是您可以寻找一大堆线索。
- 映射它。nmap 可以为您正在与之交谈的任何设备的操作系统提供一些线索。如果它说 BSD 并且 url 以 .aspx 结尾,那么你就搞定了。
- cookie:许多负载均衡器添加(或可以添加)会话cookie。寻找任何奇怪的并用谷歌搜索它们,如果你登陆 F5 支持论坛,viola。
- 各种其他标题:很多人会根据项目是否缓存(以及其他原因)等内容添加标题。寻找任何有趣的标题并用谷歌搜索它们。
- 在页面上或隐藏在 html 注释中,开发人员通常会添加“由 web7 提供服务”以帮助他们进行故障排除。
- 从多个不同的 ip 快速请求相同的内容并比较 ETag 标头。默认情况下,Apache 将 etag 建立在文件系统 inode 的基础上,并且许多管理员从未调整过它,因此如果您看到相同内容的不同 Etag,您可以猜测它来自不同的服务器(仅适用于 apache,仅适用于如果未调整,则仅在不是共享文件系统时才有效)。
老实说,我只希望所有这些都能给你一个有意义的答案,比如 4 次中有 1 次,但总的来说,除非凯瑟琳说“出了点问题”,否则你无法真正知道。
编辑:如果不是不可能的话(不喜欢这个词),这将是非常困难的,因为拥有 LoadBalancer 的全部目的是使客户端与它的交互透明且基本上不可见。话虽如此,这是我的原始帖子:
我为一个相当大的站点管理负载均衡器。唯一表明我们的访问者正在访问任何特定应用程序服务器的迹象是,我们实际上将服务器的特定名称放在了他们登录页面的底部。这有助于我们解决他们遇到的问题。
除此之外,如果我们不遵循该策略,我只能想到一件事会让您“了解”我们正在运行负载均衡器这一事实。以下是您如何判断的方法,但这需要一些运气。
假设负载均衡器设置为将所有流量转发到一台服务器或另一台服务器。或者至少它将一台服务器之间的 ssh 流量转发到另一台服务器。即使您可能没有登录凭据来登录任何一个框,但如果您尝试登录,两者都会为您提供不同的密钥。因此,如果您第一次尝试通过 ssh 登录,系统会询问您是否你想接受密钥。然后,如果您在第二次或第三次请求中运气好,您将被告知有一个不同的密钥(即它是另一个盒子)。在 *nix 系统上,您经常被警告这可能是由于中间人攻击造成的。
所以有两件事必须到位:
因此,如果您在相对较短的时间内获得了两个密钥,您可能会假设系统管理员没有更改它们,而是您刚刚与负载均衡器后面的两台单独的机器进行了通信。
注意:还有另一件物品,但它是在黑暗中真实拍摄的。您可以尝试找出与该服务器分组的 IP 块。然后假设在这些特定 IP 地址之一上放置在 LB 上(实际上它位于这些 IP 之一上)。
例如,负载均衡器位于 XXX.XXX.XXX.5。然后将设置 LB 以捕获至少一个额外 IP 地址的所有流量。它通常不会转发 XXX.XXX.XXX.5 的流量(我拥有的商业硬件肯定不会这样做)。因此,您可以指望存在和管理地址。
如果 LB 设置为允许来自所有外部主机的管理员,则您可以将 /admin 之类的内容附加到 IP 地址,直到找到 LB。这假定 LB 使用该路径进行管理。
每个 IP 堆栈的 IP ID 都会发生变化,因此 IP 主机“位于”负载平衡器的“后面”。像 hping 这样的工具会为您提供:注意不属于同一范围的 ID,或者 - 即使由于一些奇怪的巧合足够接近 - 不会增加:
以上在应用层“下”捕获了 LB 后面的多个主机。
所以,我认为问题是,如果有负载平衡器,你能否从网站行为中随便弄清楚,我敢说答案是“除非出现问题,否则不会”(比如服务器不同步)。但是,至少理论上可以确定您和响应请求的服务器之间是否存在额外的“不可见”设备。该设备可能是代理服务器、端口转发器、静态 NAT 设备、负载平衡器,或者可能是我错过的其他东西。基本上任何响应 IP 上的 ping,但最终不提供 HTTP 请求的东西。本质上,您可以使用诸如 traceroute 之类的方法计算出您与站点的公共 IP 之间有多少跃点。然后您进行一些数据包检查以确定来自主机的数据包的 TTL。由于 TTL 的可能起始值是有限且定义明确的(除非有人对其网络堆栈进行了严重的黑客攻击),因此您可以确定是否存在额外的跃点。不确定这是否对您有帮助,但我至少认为这是一个有趣的想法。
如果负载均衡器正在执行基于 cookie 的持久性,那么查看 cookie 可能会给您一个线索。
密切注意 HTTP 标头。
wget --save-headers
可以帮助您捕获它们..(也有跟踪标题的 Firefox 插件)
一遍又一遍地点击同一个页面,寻找诸如交替的“Last-Modified or Expires”标题之类的东西。
许多网站也在标头中对其后端服务器进行编码。如果它在那里,那应该会脱颖而出。
祝你好运。
尝试使用 IP 标识字段来标识不同的 IP 堆栈(如果有)可能是值得的。您可能想在Scapy 演示页面上阅读更多关于如何做到这一点的信息(找到带有“IPID 字段”字样的行)。