2010-12-08 138 views
2

我需要一次ping大約2500臺服務器,間隔大約15-30分鐘。這是爲了顯示半實時服務器狀態信息。這最終可能會擴展到數以萬計的網站,所以我需要在考慮這一點時牢記這一點。如何執行大量的併發Ping?

我使用Ubuntu 10.10 VPS(Bash)並使用Ruby。

有沒有什麼辦法可以做到這一點?

編輯:我也應該注意我只有服務器是否在線。所以收到的第一個數據包就足夠了。

回答

3

我會考慮炮轟到nmap或類似的。它很好地適應了這個目的,速度非常快,它包含了足夠多種不同的方式來滿足任何需求。下面是使用的nmap來發現我的網絡段的所有主機:

[email protected]:~$ 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)。

+0

今晚我會試試這個,以及其他可用的解決方案。謝謝! – 2010-12-08 16:18:05