2

我需要一次 ping 大约 2500 台服务器,间隔大约 15-30 分钟。这是为了显示半实时的服务器状态信息。这最终可能会扩展到数以万计的站点,因此我在考虑这一点时需要牢记这一点。

我正在使用 Ubuntu 10.10 VPS (Bash) 并使用 Ruby。

有什么办法可以做到这一点?

编辑:我还应该注意,我关心服务器是否在线。所以收到的第一个数据包就足够了。

4

1 回答 1

3

我会考虑炮击nmap或类似的东西。它非常适合该目的,速度非常快,并且包含足够多的不同方式来 ping 以满足任何需求。这是使用 nmap 发现我的网络段上的所有主机:

wayne@treebeard:~$ nmap -sP 10.0.0.0/24
Starting Nmap 5.00 ( http://nmap.org ) at 2010-12-08 09:16 MST
Host gw (10.0.0.1) is up (0.00036s latency).
Host 10.0.0.2 is up (0.0071s latency).
Host isengard.internal.databill.com (10.0.0.3) is up (0.00062s latency).
...
Host arod.internal.databill.com (10.0.0.189) is up (0.0046s latency).
Host 10.0.0.254 is up (0.00042s latency).
Nmap done: 256 IP addresses (43 hosts up) scanned in 3.00 seconds

在这里,我们扫描了从 10.0.0.0 到 10.0.0.255 的所有主机。

-sP 是一种“ping 扫描”,一种非常通用的主机发现机制,可以作为普通用户运行。nmap 还可以进行其他类型的扫描,其中许多需要 root 权限。

在 Ruby 中,您将使用反引号或 IO.popen 运行 nmap 并捕获其结果:

output = `nmap -sP 10.0.0.0/24
output.each_line.find_all do |lines|
  line =~ /^Host/
end.each do |line|
  # Whatever you want to do for each host
end

如果您提供 -oX 开关,nmap 将输出 xml,这可能更容易解析(感谢 tadman)。

于 2010-12-08T15:54:47.070 回答