如何增加IP地址中的最后一个八位字节

时间:2014-04-28 15:26:28

标签: ruby

如何写一个ruby辅助函数,如果它在第4个八位字节达到最大值,它将从222.164.153.58 to 222.164.153.59递增或正确递增第3个八位字节。

4 个答案:

答案 0 :(得分:7)

使用IPAddr#succ

require "ipaddr"

addr = IPAddr.new "222.164.153.58"
addr.succ
#=> #<IPAddr: IPv4:222.164.153.59/255.255.255.255>

addr = IPAddr.new "192.168.2.255"
addr.succ
#=> #<IPAddr: IPv4:192.168.3.0/255.255.255.255>

答案 1 :(得分:1)

ipaddr个对象有succ方法

require "ipaddr"
ip = IPAddr.new("222.164.153.58")

5.times{puts ip; ip = ip.succ}

#222.164.153.58
#222.164.153.59
#222.164.153.60
#222.164.153.61
#222.164.153.62

答案 2 :(得分:0)

如果你需要增加一个以上,succ并不是非常有用,因为你必须在一个循环中进行。假设您要计算3000个地址的上限和下限:

require 'ipaddr'
lower = IPAddr.new('10.0.0.0')
upper = IPAddr.new(lower.to_i + 3000, Socket::AF_INET)

然后你可以这样迭代它们:

for ip in lower..upper
  # Do something with ip
end

答案 3 :(得分:-1)

只需将IPv4地址视为32位整数,并按如下方式递增:

require 'ipaddr'
ip = IPAddr.new "222.164.153.58"
address = ip.to_i + 1
puts [24, 16, 8, 0].collect {|b| (address >> b) & 255}.join('.')