Способ поиска доступных устройств с 255 IP-адреса - PullRequest
4 голосов
/ 28 февраля 2012

У меня есть 6 устройств, настроенных на IP-адрес от 1 до 255 в диапазоне 192.168.1.X (где X = от 1 до 255).Я написал эту программу для проверки связи и просмотра доступного IP-адреса для выполнения операций.Но его выполнение занимает так много времени ... может ли кто-нибудь предложить быстрый способ выполнить это?

Использование вил также приветствуется ...

Вот программа:

server = "192.168.1"
for i in (1...255)
  system("ping -q -c #{timeout} #{server}.#{i} 2&>/dev/null")
  if $?.exitstatus == 0
    # operations
  end
end

1 Ответ

3 голосов
/ 28 февраля 2012

Протестировано с рубином 1.9.3 не плохо;

[slmn@uriel ~]$ time ruby ipmap.rb 
"192.168.0.1"
"192.168.0.10"

real    0m2.393s
user    0m0.750s
sys     0m1.547s

Я прокомментировал области, если вы хотите выполнять свои операции в потоке;

require 'ipaddr'

ips = IPAddr.new("192.168.1.0/24").to_range

threads = ips.map do |ip|
  Thread.new do
    status = system("ping -q -W 1 -c 1 #{ip}",
                    [:err, :out] => "/dev/null")

    # you can do your operations in thread like this
    # if status
    #   # operations
    # end

    # optional
    Thread.current[:result] = ip.to_s if status
  end
end

threads.each {|t| t.join}

# if you don't do your operations in thread
threads.each do |t|
  next unless t[:result]

  # operations

  #optional
  puts t[:result]
end
...