I recently needed to create an IP address range in array format, and came across a nice Ruby Class “ipaddr” for working with IP address information. My goal was to white list an IP by cross referencing it with the IP address range.
Here is a standalone example of converting the IP Range into an array.
#!/usr/bin/env ruby require 'ipaddr' def ip_range(first, last) first = IPAddr.new(first) last = IPAddr.new(last) (first..last).map(&:to_s) end range_calc = ip_range("172.30.20.0", "172.30.20.255") puts range_calc.to_a |
Here is an example in Sinatra of using this method to check against
require 'ipaddr' get '/blah/blah/blah' do def ip_range(first, last) first = IPAddr.new(first) last = IPAddr.new(last) (first..last).map(&:to_s) end range_calc = ip_range("172.30.20.0", "172.30.20.255") $WHITE_LIST_HOSTS = ["127.0.0.1","173.255.251.204","54.223.213.220"] + range_calc.to_a request_ip = @env['HTTP_X_REAL_IP'] if !$WHITE_LIST_HOSTS.include? request_ip return "Not Authorized" else Do work here... end end |
Here is another standalone example variation using a method of ip-addr, if the requesting ip is in the range it will return true.
#!/usr/bin/env ruby require 'ipaddr' first = IPAddr.new("172.30.20.0/24") requesting_ip = IPAddr.new("172.30.20.200") puts first.include?(requesting_ip) |
Hope this is helpful. The Class ‘ipaddr‘ has other useful methods you should check out.