如何

2014-09-10 79 views
-1

输入IP值比较红宝石 -如何

192.191.*.* 
192.187.*.* 
192.213.*.* 
192.186.*.* 
192.200.*.* 

* =>表示2个或3位数字

请求URL: -

http://www.test.com?ip=192.191.0.1 
http://www.test.com?ip=192.200.0.1 
http://www.test.com?ip=192.200.0.2 

我不喜欢如果请求url包含上面的ip范围,则不想进行请求调用。

我怎么能把一个条件,以避免以上的IP范围。

+0

你是什么意思 “取消请求”? – xlembouras 2014-09-10 09:55:50

+0

@xlembouras我更新了问题。请看看。 – karan 2014-09-10 10:03:19

回答

2

可以使用IPAddr类从Ruby的标准库,例如:

require 'ipaddr' 

ranges = [ 
    IPAddr.new('192.191.0.0/16'), 
    IPAddr.new('192.187.0.0/16') 
] 

ranges.any? { |r| r.include?('192.155.0.1') } 
# => false 

ranges.any? { |r| r.include?('192.191.0.1') } 
# => true 
1

如果重新格式化范围如下

192.191.1.1/16 
192.187.1.1/16 
192.213.1.1/16 
192.186.1.1/16 
192.200.1.1/16 

可以使用IPAddr类的检查。

例子:

RESTRICTED = ["192.191.1.1/16","192.187.1.1/16"] 
RESTRICTED_IPS = RESTRICTED.map { |ip| IPAddr.new(ip) } 

target_ip1 = "192.123.231.1" 
target_ip2 = IPAddr.new("192.155.0.1") 

RESTRICTED_IPS.any? { |ip_range| ip_range.include? target_ip1 } 
#=> true 

RESTRICTED_IPS.any? { |ip_range| ip_range.include? target_ip2 } 
#=> false