這段代碼應該循環遍歷IP地址數組,並檢查端口是否打開。Ruby Array打印爲字符串
class Ranger
def initialize(port,file)
@port = port
@file = file
@arr = []
end
def regex(f)
reg = IO.read(f)
reg.scan /(?:\d{1,3}\.){3}\d{1,3}/
end
def fileread
if File.exists?(@file)
@arr << regex(@file).to_s
begin
@arr.each do |ip|
sock = Socket.new(:INET, :STREAM)
sockaddr = Socket.sockaddr_in(@port, ip.to_i)
puts "Host: #{ip}:#{@port} Open" if sock.connect(sockaddr)
next
end
rescue Errno::ECONNREFUSED
false
end
end
end
末
的代碼看起來幾乎完全工作,除了一兩件事。它打印出成功文本,即「主機:#{ip}:#{@ port}打開」。問題在於它打印出#{ip}所在的整個數組,如下所示:[「xx.xx.xx.xx」,「xx.xx.xx.xx」,「xx.xx.xx.xx」 ]:22打開。
這似乎與腳本中的.to_s和.to_i有關,但如果沒有這些腳本,它將無法工作。
您希望輸出什麼? 'ip'是一個數組,而'@arr'是一個陣列數組。編輯:其實,'@ arr'是數組的字符串表示的數組 – 2014-08-28 23:11:15
嘗試'@arr.flatten.each do | ip |'來代替。 'scan'總是返回一個數組,所以'@ arr'是一個數組數組。 – BroiSatse 2014-08-28 23:11:17