Как мне выполнить огромное количество одновременных пингов? - PullRequest
2 голосов
/ 08 декабря 2010

Мне нужно пропинговать около 2500 серверов за один раз с интервалом около 15-30 минут. Это для отображения информации о состоянии сервера в режиме реального времени. В конечном итоге это может масштабироваться до десятков тысяч сайтов, поэтому я должен помнить об этом, думая об этом.

Я использую Ubuntu 10.10 VPS (Bash) и использую Ruby.

Есть ли способ сделать это?

Изменить: Я должен также отметить, что мне только все равно, если сервер в сети. Поэтому первого полученного пакета должно быть достаточно.

1 Ответ

3 голосов
/ 08 декабря 2010

Я бы рассмотрел обстрел до 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).

...