Я бы рассмотрел обстрел до nmap или тому подобное. Он хорошо настроен для этой цели, достаточно быстр, и содержит достаточно различных способов проверки связи, чтобы удовлетворить любую потребность. Здесь используется 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 scan», довольно общий механизм обнаружения хоста, который может запускаться как обычный пользователь. Есть и другие типы сканирования, которые выполняет nmap, многим из них требуются права суперпользователя.
В Ruby вы будете использовать backtick или 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).