Tag: cidr

Ruby / Rails中的IP范围到CIDR?

我想做两件事:将IP地址输入转换为CIDR以下是一些示例输入: 1.1.1.1 192.168.*.* #=> 192.168.0-255.0-255 192.168.1.2-20 1.1.1-10.1-100 检查给定的IP地址是否属于任何CIDR。 这必须是一个非常快速的查询,因为它是我的Web应用程序中非常常见的查找。 我想做这样的事情: def matches?(request) valid = @ips.select {|cidr| cidr.contains?(request.remote_ip) } !valid.empty? end 我认为将IP范围转换为CIDR将使查找比我们现在所做的更快,这将IP分解为整数八位字节。 然后,我们将前两组八位字节编入索引以部分匹配IP。 另一个选择可能是将所有内容转换为int并以这种方式进行比较。 我将使用类似IPAddr.new(“1.1.1.1”).to_i转换为int IPAddr.new(“1.1.1.1”).to_i然后我需要为每个范围存储一个上限和下限IP,而不是仅存储一个CIDR。 如果我忽视任何主流方法,流行gem或回购,请告诉我。 谢谢!