如何写一个ruby辅助函数,如果它在第4个八位字节达到最大值,它将从222.164.153.58 to 222.164.153.59
递增或正确递增第3个八位字节。
答案 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('.')