这段代码应该循环遍历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