Rails如何在ip范围计算之前验证子网掩码

时间:2017-04-27 13:08:18

标签: ruby-on-rails ruby ip-address cidr

我使用netaddr gem来验证网络IP范围。但是我无法找到验证给定子网掩码有效的方法吗?

  def valid_ip_range(ip, gateway, subnet_mask)
    ip_range = NetAddr::CIDR.create("#{gateway} #{subnet_mask}")

    valid_ip_range = NetAddr.range(ip_range.first, ip_range.last)
    valid_ip_range.include?(ip_ip)
  end

对于有效的子网掩码

ip_range = NetAddr::CIDR.create('192.168.1.1 255.255.255.0')
=> #<NetAddr::CIDRv4:0x0000000b334720 @address_len=32, @all_f=4294967295, @hostmask=255, @ip=3232235777, @netmask=4294967040, @network=3232235776, @tag={}, @version=4, @wildcard_mask=4294967040>

对于无效的子网掩码,获取以下错误

ip_range = NetAddr::CIDR.create('192.168.1.1 255.128.128.0')
ip_range = NetAddr::CIDR.create('192.168.1.1 1.1.1.1')
=> NetAddr::ValidationError: 1.1.1.1 contains '1' bits within the host portion of the netmask.
from /ruby-2.1.1@customerservice-mar/gems/netaddr-1.5.1/lib/validation_shortcuts.rb:182:in `block in validate_netmask_str'

0 个答案:

没有答案