如何使用IP地址模式填充数组

Bra*_*o__ 1 ruby arrays

我不是程序员,但发现自己写了一些简单的Ruby.我需要用一个IP地址列表填充一个数组,10.13.203.3,10.13.204.3等.

我知道我可以将范围扩展为这样的数组,但是如何将其转换为我的IP地址模式?

a =* (3..10)
#=> [3, 4, 5, 6, 7, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)

我以为我需要进行字符串插值,并以某种方式将其反馈到不同的数组中.但我真的不确定,也绝不能正确使用谷歌搜索,因为这感觉像是一件普通的事情.

Car*_*and 5

您可以使用IPAddr该类,特别是IPAddr :: new方法.

我已经编写了方法来获取三个参数,第一个IP,下一个IP和要生成的IP总数,同时保持第一个和第二个IP之间的差异.

require 'ipaddr'

def gen_ips(ip_start, ip_next, number)     
  ips, ipn = [ip_start, ip_next].map { |ip| IPAddr.new(ip) }
  (ips..IPAddr.new("255.255.255.255")).
    step(ipn.to_i-ips.to_i).
    lazy.
    map { |ip| ip.to_s }.first(number)
end

gen_ips("10.13.203.3", "10.13.204.3", 6)
  # => ["10.13.203.3", "10.13.204.3", "10.13.205.3", "10.13.206.3",
  #     "10.13.207.3", "10.13.208.3"] 
gen_ips("10.13.254.250", "10.13.254.252", 6)
  #=> ["10.13.254.250", "10.13.254.252", "10.13.254.254", "10.13.255.0",
  #    "10.13.255.2", "10.13.255.4"]
Run Code Online (Sandbox Code Playgroud)

第二个示例显示了当下一个IP在前一个组中滚动一个数字时会发生什么.

我使用Enumerable #lazy将枚举器转换为惰性,因此first(number)一旦number计算了映射的元素就会调用(而不是等到枚举器生成范围中的最后一个IPAddr('255.255.255.255')).