Как проверить связь с набором IP-адресов, хранящихся в текстовом файле, и проверить, где этот IP-адрес доступен или нет в Ruby? - PullRequest
0 голосов
/ 24 сентября 2018

Я очень новичок в Ruby, поэтому любая помощь будет очень полезна.:)

Что я хочу сделать с моей программой:

  1. Открыть txt-файл со списком IP-адресов, сохраненных в нем
  2. Получить каждый IP по одномуодин и пингуйте его
  3. Если IP-адрес доступен, верните значение TRUE
  4. Если IP-адрес недоступен, верните значение FALSE
  5. Все недостижимые IP-адреса для записи вдругой текстовый файл

Ниже приведена программа, которую я собрал из разных источников онлайновой справки:

require 'timeout'
require 'socket'

#PING LOGIC
class Ping 
  def self.pingecho(host, timeout=5, service="echo")
    puts host
    begin
      while(timeout) do
        s = TCPSocket.new(host, service)     
        s.close
      end
    rescue Errno::ECONNREFUSED
      return true
    rescue   Timeout::Error, StandardError 
      return false 
    end
    return true
  end
end

#opening the file with list of IPs
File.open('Ips.xml', 'r'). each do |line|    
 hostip = line
 #passing each line to the class for the ping test
  if (p Ping.pingecho(hostip) == 'true')
    return
  else
    #writing all non-reachable IPs to another file
    File.open('Not reachable.txt','a') do |linea|
    linea.puts hostip + "\n"
  end   
end
end

Это не дает мне никакой ошибки при выполнении, но дает FALSEрезультат для всех IP-адресов в txt-файле, которые, как я знаю, достижимы.

Я знаю, что по отдельности все компоненты этой программы работают нормально: логика ping работает нормально, если я просто передаю IP-адрес непосредственно ему (например,: p Ping.pingecho ("10.40.220.34")).

Открытие файла;чтение;и запись в другой файл также работает нормально, так как я тестировал их отдельно.

Проблема, похоже, заключается в том, каким образом IP передается классу из txt-файла.

1 Ответ

0 голосов
/ 24 сентября 2018
if (p Ping.pingecho(hostip) == 'true')

Ping::pingecho возвращает либо true, либо false, но никогда не возвращает 'true', поэтому это условие всегда будет ложным, а условное выражение всегда будет оценивать else филиал.

...