如何执行大量并发ping操作?

时间:2010-12-08 14:52:40

标签: ruby-on-rails ruby vps ping nmap

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

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

有没有办法做到这一点?

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

1 个答案:

答案 0 :(得分: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)。