Я очень новичок в Ruby, поэтому любая помощь будет очень полезна.:)
Что я хочу сделать с моей программой:
- Открыть txt-файл со списком IP-адресов, сохраненных в нем
- Получить каждый IP по одномуодин и пингуйте его
- Если IP-адрес доступен, верните значение TRUE
- Если IP-адрес недоступен, верните значение FALSE
- Все недостижимые 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-файла.