$ ruby generate_cloudfront_ip_regex.rb
/(?-mix:13\.3[2-3]\.[0-9]{1,3}\.[0-9]{1,3})|(?-mix:52\.46\.([0-5]{0,1}[0-9]|6[0-3])\.[0-9]{1,3})|(?-mix:52\.8[4-5]\.[0-9]{1,3}\.[0-9]{1,3})|(?-mix:52\.222\.(12[8-9]|1[3-9][0-9]|2[0-5][0-9])\.[0-9]{1,3})|(?-mix:54\.182\.[0-9]{1,3}\.[0-9]{1,3})|(?-mix:54\.192\.[0-9]{1,3}\.[0-9]{1,3})|(?-mix:54\.230\.[0-9]{1,3}\.[0-9]{1,3})|(?-mix:54\.239\.(12[8-9]|1[3-8][0-9]|19[0-1])\.[0-9]{1,3})|(?-mix:54\.239\.(19[2-9]|2[0-1][0-9]|22[0-3])\.[0-9]{1,3})|(?-mix:54\.240\.(12[8-9]|1[3-8][0-9]|19[0-1])\.[0-9]{1,3})|(?-mix:204\.246\.16[4-7]\.[0-9]{1,3})|(?-mix:204\.246\.(16[8-9]|17[0-1])\.[0-9]{1,3})|(?-mix:204\.246\.17[4-5]\.[0-9]{1,3})|(?-mix:204\.246\.(17[6-9]|18[0-9]|19[0-1])\.[0-9]{1,3})|(?-mix:205\.251\.(19[2-9]|2[0-1][0-9]|22[0-3])\.[0-9]{1,3})|(?-mix:205\.251\.249\.[0-9]{1,3})|(?-mix:205\.251\.25[0-1]\.[0-9]{1,3})|(?-mix:205\.251\.25[2-3]\.[0-9]{1,3})|(?-mix:205\.251\.254\.[0-9]{1,3})|(?-mix:216\.137\.(3[2-9]|[4-5][0-9]|6[0-3])\.[0-9]{1,3})/
Last active
October 20, 2016 00:37
-
-
Save bjeanes/12f516fb0a573ea60db8e4657fb65efb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
require 'ipaddr' | |
require 'json' | |
require 'net/https' | |
require 'uri' | |
IP_LIST = URI('https://ip-ranges.amazonaws.com/ip-ranges.json') | |
def main | |
http = Net::HTTP.new(IP_LIST.host, IP_LIST.port) | |
http.use_ssl = IP_LIST.scheme == 'https' | |
request = Net::HTTP::Get.new(IP_LIST.request_uri) | |
response = http.request(request) | |
body = JSON.load(response.body) | |
ranges = body["prefixes"] | |
.select { |p| p["service"] == "CLOUDFRONT" } | |
.map { |p| IPAddr.new(p["ip_prefix"]) } | |
p Regexp.union(ranges.map(&:to_regexp)) | |
end | |
class IPAddr | |
# http://stackoverflow.com/a/27066978/56690 | |
def to_cidr_s | |
if @addr | |
mask = @mask_addr.to_s(2).count('1') | |
"#{to_s}/#{mask}" | |
else | |
nil | |
end | |
end | |
# The rest adapted from https://github.com/kaihar4/mruby-ipaddress_matcher | |
CIDR_CAPTURE = /([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\/([0-9]{1,2})/ | |
ADDRESS_RANGE = {} | |
ADDRESS_RANGE['255'] = {} | |
ADDRESS_RANGE['255']['0'] = '[0-9]{1,3}' | |
ADDRESS_RANGE['64'] = {} | |
ADDRESS_RANGE['64']['0'] = '([0-5]{0,1}[0-9]|6[0-3])' | |
ADDRESS_RANGE['64']['64'] = '(6[4-9]|[7-9][0-9]|1[0-1][0-9]|12[0-7])' | |
ADDRESS_RANGE['64']['128'] = '(12[8-9]|1[3-8][0-9]|19[0-1])' | |
ADDRESS_RANGE['64']['192'] = '(19[2-9]|2[0-5][0-9])' | |
ADDRESS_RANGE['32'] = {} | |
ADDRESS_RANGE['32']['0'] = '([0-2]{0,1}[0-9]|3[0-1])' | |
ADDRESS_RANGE['32']['32'] = '(3[2-9]|[4-5][0-9]|6[0-3])' | |
ADDRESS_RANGE['32']['64'] = '(6[4-9]|[7-8][0-9]|9[0-5])' | |
ADDRESS_RANGE['32']['96'] = '(9[6-9]|1[0-1][0-9]|12[0-7])' | |
ADDRESS_RANGE['32']['128'] = '(12[8-9]|1[3-5][0-9])' | |
ADDRESS_RANGE['32']['160'] = '(1[6-8][0-9]|19[0-1])' | |
ADDRESS_RANGE['32']['192'] = '(19[2-9]|2[0-1][0-9]|22[0-3])' | |
ADDRESS_RANGE['32']['224'] = '(22[4-9]|2[3-5][0-9])' | |
ADDRESS_RANGE['16'] = {} | |
ADDRESS_RANGE['16']['0'] = '([0-9]|1[0-5])' | |
ADDRESS_RANGE['16']['16'] = '(1[6-9]|2[0-9]|3[0-1])' | |
ADDRESS_RANGE['16']['32'] = '(3[2-9]|4[0-7])' | |
ADDRESS_RANGE['16']['48'] = '(4[8-9]|5[0-9]|6[0-3])' | |
ADDRESS_RANGE['16']['64'] = '(6[4-9]|7[0-9])' | |
ADDRESS_RANGE['16']['80'] = '(8[0-9]|9[0-5])' | |
ADDRESS_RANGE['16']['96'] = '(9[6-9]|10[0-9]|11[0-1])' | |
ADDRESS_RANGE['16']['112'] = '(11[2-9]|12[0-7])' | |
ADDRESS_RANGE['16']['128'] = '(12[8-9]|13[0-9]|14[0-3])' | |
ADDRESS_RANGE['16']['144'] = '(14[4-9]|15[0-9])' | |
ADDRESS_RANGE['16']['160'] = '(16[0-9]|17[0-5])' | |
ADDRESS_RANGE['16']['176'] = '(17[6-9]|18[0-9]|19[0-1])' | |
ADDRESS_RANGE['16']['192'] = '(19[2-9]|20[0-7])' | |
ADDRESS_RANGE['16']['208'] = '(20[8-9]|21[0-9]|22[0-3])' | |
ADDRESS_RANGE['16']['224'] = '(22[4-9]|23[0-9])' | |
ADDRESS_RANGE['16']['240'] = '2[4-5][0-9]' | |
ADDRESS_RANGE['12'] = {} | |
ADDRESS_RANGE['12']['0'] = '([0-9]{0,1}[0-9]|1[0-1][0-9]|12[0-7])' | |
ADDRESS_RANGE['12']['128'] = '(12[8-9]|1[3-9][0-9]|2[0-5][0-9])' | |
ADDRESS_RANGE['8'] = {} | |
ADDRESS_RANGE['8']['0'] = '[0-7]' | |
ADDRESS_RANGE['8']['8'] = '([8-9]|1[0-5])' | |
ADDRESS_RANGE['8']['16'] = '(1[6-9]|2[0-3])' | |
ADDRESS_RANGE['8']['24'] = '(2[4-9]|3[0-1])' | |
ADDRESS_RANGE['8']['32'] = '3[2-9]' | |
ADDRESS_RANGE['8']['40'] = '4[0-7]' | |
ADDRESS_RANGE['8']['48'] = '(4[8-9]|5[0-5])' | |
ADDRESS_RANGE['8']['56'] = '(5[6-9]|6[0-3])' | |
ADDRESS_RANGE['8']['64'] = '(6[4-9]|7[0-1])' | |
ADDRESS_RANGE['8']['72'] = '7[2-9]' | |
ADDRESS_RANGE['8']['80'] = '8[0-7]' | |
ADDRESS_RANGE['8']['88'] = '(8[8-9]|9[0-5])' | |
ADDRESS_RANGE['8']['96'] = '(9[6-9]|10[0-3])' | |
ADDRESS_RANGE['8']['104'] = '(10[4-9]|11[0-1])' | |
ADDRESS_RANGE['8']['112'] = '11[2-9]' | |
ADDRESS_RANGE['8']['120'] = '12[0-7]' | |
ADDRESS_RANGE['8']['128'] = '(12[8-9]|13[0-5])' | |
ADDRESS_RANGE['8']['136'] = '(13[6-9]|14[0-3])' | |
ADDRESS_RANGE['8']['144'] = '(14[4-9]|15[0-1])' | |
ADDRESS_RANGE['8']['152'] = '15[2-9]' | |
ADDRESS_RANGE['8']['160'] = '16[0-7]' | |
ADDRESS_RANGE['8']['168'] = '(16[8-9]|17[0-5])' | |
ADDRESS_RANGE['8']['176'] = '(17[6-9]|18[0-3])' | |
ADDRESS_RANGE['8']['184'] = '(18[4-9]|19[0-1])' | |
ADDRESS_RANGE['8']['192'] = '19[2-9]' | |
ADDRESS_RANGE['8']['200'] = '20[0-7]' | |
ADDRESS_RANGE['8']['208'] = '(20[8-9]|21[0-5])' | |
ADDRESS_RANGE['8']['216'] = '(21[6-9]|22[0-3])' | |
ADDRESS_RANGE['8']['224'] = '(22[4-9]|23[0-1])' | |
ADDRESS_RANGE['8']['232'] = '23[2-9]' | |
ADDRESS_RANGE['8']['240'] = '24[0-7]' | |
ADDRESS_RANGE['8']['248'] = '(24[8-9]|25[0-5])' | |
ADDRESS_RANGE['4'] = {} | |
ADDRESS_RANGE['4']['0'] = '[0-3]' | |
ADDRESS_RANGE['4']['4'] = '[4-7]' | |
ADDRESS_RANGE['4']['8'] = '([8-9]|1[0-1])' | |
ADDRESS_RANGE['4']['12'] = '1[2-5]' | |
ADDRESS_RANGE['4']['16'] = '1[6-9]' | |
ADDRESS_RANGE['4']['20'] = '2[0-3]' | |
ADDRESS_RANGE['4']['24'] = '2[4-7]' | |
ADDRESS_RANGE['4']['28'] = '(2[8-9]|3[0-1])' | |
ADDRESS_RANGE['4']['32'] = '3[2-5]' | |
ADDRESS_RANGE['4']['36'] = '3[6-9]' | |
ADDRESS_RANGE['4']['40'] = '4[0-3]' | |
ADDRESS_RANGE['4']['44'] = '4[4-7]' | |
ADDRESS_RANGE['4']['48'] = '(4[8-9]|5[0-1])' | |
ADDRESS_RANGE['4']['52'] = '5[2-5]' | |
ADDRESS_RANGE['4']['56'] = '5[6-9]' | |
ADDRESS_RANGE['4']['60'] = '6[0-3]' | |
ADDRESS_RANGE['4']['64'] = '6[4-7]' | |
ADDRESS_RANGE['4']['68'] = '(6[8-9]|7[0-1])' | |
ADDRESS_RANGE['4']['72'] = '7[2-5]' | |
ADDRESS_RANGE['4']['76'] = '7[6-9]' | |
ADDRESS_RANGE['4']['80'] = '8[0-3]' | |
ADDRESS_RANGE['4']['84'] = '8[4-7]' | |
ADDRESS_RANGE['4']['88'] = '(8[8-9]|9[0-1])' | |
ADDRESS_RANGE['4']['92'] = '9[2-5]' | |
ADDRESS_RANGE['4']['96'] = '9[6-9]' | |
ADDRESS_RANGE['4']['100'] = '10[0-3]' | |
ADDRESS_RANGE['4']['104'] = '10[4-7]' | |
ADDRESS_RANGE['4']['108'] = '(10[8-9]|11[0-1])' | |
ADDRESS_RANGE['4']['112'] = '11[2-5]' | |
ADDRESS_RANGE['4']['116'] = '11[6-9]' | |
ADDRESS_RANGE['4']['120'] = '12[0-3]' | |
ADDRESS_RANGE['4']['124'] = '12[4-7]' | |
ADDRESS_RANGE['4']['128'] = '(12[8-9]|13[0-1])' | |
ADDRESS_RANGE['4']['132'] = '13[2-5]' | |
ADDRESS_RANGE['4']['136'] = '13[6-9]' | |
ADDRESS_RANGE['4']['140'] = '14[0-3]' | |
ADDRESS_RANGE['4']['144'] = '14[4-7]' | |
ADDRESS_RANGE['4']['148'] = '(14[8-9]|15[0-1])' | |
ADDRESS_RANGE['4']['152'] = '15[2-5]' | |
ADDRESS_RANGE['4']['156'] = '15[6-9]' | |
ADDRESS_RANGE['4']['160'] = '16[0-3]' | |
ADDRESS_RANGE['4']['164'] = '16[4-7]' | |
ADDRESS_RANGE['4']['168'] = '(16[8-9]|17[0-1])' | |
ADDRESS_RANGE['4']['172'] = '17[2-5]' | |
ADDRESS_RANGE['4']['176'] = '17[6-9]' | |
ADDRESS_RANGE['4']['180'] = '18[0-3]' | |
ADDRESS_RANGE['4']['184'] = '18[4-7]' | |
ADDRESS_RANGE['4']['188'] = '(18[8-9]|19[0-1])' | |
ADDRESS_RANGE['4']['192'] = '19[2-5]' | |
ADDRESS_RANGE['4']['196'] = '19[6-9]' | |
ADDRESS_RANGE['4']['200'] = '20[0-3]' | |
ADDRESS_RANGE['4']['204'] = '20[4-7]' | |
ADDRESS_RANGE['4']['208'] = '(20[8-9]|21[0-1])' | |
ADDRESS_RANGE['4']['212'] = '21[2-5]' | |
ADDRESS_RANGE['4']['216'] = '21[6-9]' | |
ADDRESS_RANGE['4']['220'] = '22[0-3]' | |
ADDRESS_RANGE['4']['224'] = '22[4-7]' | |
ADDRESS_RANGE['4']['228'] = '(22[8-9]|23[0-1])' | |
ADDRESS_RANGE['4']['232'] = '23[2-5]' | |
ADDRESS_RANGE['4']['236'] = '23[6-9]' | |
ADDRESS_RANGE['4']['240'] = '24[0-3]' | |
ADDRESS_RANGE['4']['244'] = '24[4-7]' | |
ADDRESS_RANGE['4']['248'] = '(24[8-9]|25[0-1])' | |
ADDRESS_RANGE['4']['252'] = '25[2-5]' | |
def to_regexp | |
Regexp.new(pattern) | |
end | |
private | |
def pattern | |
raise ArgumentError unless Socket::AF_INET === @family # IPv6 not supported with this | |
match_obj = to_cidr_s.match(CIDR_CAPTURE) | |
case match_obj[5] | |
when '0' | |
ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '1' | |
bip = (match_obj[1].to_i / 128 ) * 128 | |
ADDRESS_RANGE['12'][bip.to_s] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '2' | |
bip = (match_obj[1].to_i / 64 ) * 64 | |
ADDRESS_RANGE['64'][bip.to_s] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '3' | |
bip = (match_obj[1].to_i / 32 ) * 32 | |
ADDRESS_RANGE['32'][bip.to_s] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '4' | |
bip = (match_obj[1].to_i / 16 ) * 16 | |
ADDRESS_RANGE['16'][bip.to_s] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '5' | |
bip = (match_obj[1].to_i / 8 ) * 8 | |
ADDRESS_RANGE['8'][bip.to_s] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '6' | |
bip = (match_obj[1].to_i / 4 ) * 4 | |
ADDRESS_RANGE['4'][bip.to_s] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '7' | |
bip = (match_obj[1].to_i / 2 ) * 2 | |
case bip.to_s.size | |
when 2 | |
bip.to_s[0, 1] + '[' + bip.to_s[1] + '-' + (bip + 1).to_s[1] + ']' + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when 3 | |
bip.to_s[0, 2] + '[' + bip.to_s[2] + '-' + (bip + 1).to_s[2] + ']' + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
else | |
'[' + bip.to_s + '-' + (bip + 1).to_s + ']' + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
end | |
when '8' | |
match_obj[1] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '9' | |
bip = (match_obj[2].to_i / 128 ) * 128 | |
match_obj[1] + '\\.' + ADDRESS_RANGE['12'][bip.to_s] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '10' | |
bip = (match_obj[2].to_i / 64 ) * 64 | |
match_obj[1] + '\\.' + ADDRESS_RANGE['64'][bip.to_s] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '11' | |
bip = (match_obj[2].to_i / 32 ) * 32 | |
match_obj[1] + '\\.' + ADDRESS_RANGE['32'][bip.to_s] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '12' | |
bip = (match_obj[2].to_i / 16 ) * 16 | |
match_obj[1] + '\\.' + ADDRESS_RANGE['16'][bip.to_s] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '13' | |
bip = (match_obj[2].to_i / 8 ) * 8 | |
match_obj[1] + '\\.' + ADDRESS_RANGE['8'][bip.to_s] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '14' | |
bip = (match_obj[2].to_i / 4 ) * 4 | |
match_obj[1] + '\\.' + ADDRESS_RANGE['4'][bip.to_s] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '15' | |
bip = (match_obj[2].to_i / 2 ) * 2 | |
case bip.to_s.size | |
when 2 | |
match_obj[1] + '\\.' + bip.to_s[0, 1] + '[' + bip.to_s[1] + '-' + (bip + 1).to_s[1] + ']' + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when 3 | |
match_obj[1] + '\\.' + bip.to_s[0, 2] + '[' + bip.to_s[2] + '-' + (bip + 1).to_s[2] + ']' + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
else | |
match_obj[1] + '\\.' + '[' + bip.to_s + '-' + (bip + 1).to_s + ']' + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
end | |
when '16' | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + ADDRESS_RANGE['255']['0'] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '17' | |
bip = (match_obj[3].to_i / 128 ) * 128 | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + ADDRESS_RANGE['12'][bip.to_s] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '18' | |
bip = (match_obj[3].to_i / 64 ) * 64 | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + ADDRESS_RANGE['64'][bip.to_s] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '19' | |
bip = (match_obj[3].to_i / 32 ) * 32 | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + ADDRESS_RANGE['32'][bip.to_s] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '20' | |
bip = (match_obj[3].to_i / 16 ) * 16 | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + ADDRESS_RANGE['16'][bip.to_s] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '21' | |
bip = (match_obj[3].to_i / 8 ) * 8 | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + ADDRESS_RANGE['8'][bip.to_s] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '22' | |
bip = (match_obj[3].to_i / 4 ) * 4 | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + ADDRESS_RANGE['4'][bip.to_s] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '23' | |
bip = (match_obj[3].to_i / 2 ) * 2 | |
case bip.to_s.size | |
when 2 | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + bip.to_s[0, 1] + '[' + bip.to_s[1] + '-' + (bip + 1).to_s[1] + ']' + '\\.' + ADDRESS_RANGE['255']['0'] | |
when 3 | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + bip.to_s[0, 2] + '[' + bip.to_s[2] + '-' + (bip + 1).to_s[2] + ']' + '\\.' + ADDRESS_RANGE['255']['0'] | |
else | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + '[' + bip.to_s + '-' + (bip + 1).to_s + ']' + '\\.' + ADDRESS_RANGE['255']['0'] | |
end | |
when '24' | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + match_obj[3] + '\\.' + ADDRESS_RANGE['255']['0'] | |
when '25' | |
bip = (match_obj[4].to_i / 128 ) * 128 | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + match_obj[3] + '\\.' + ADDRESS_RANGE['12'][bip.to_s] | |
when '26' | |
bip = (match_obj[4].to_i / 64 ) * 64 | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + match_obj[3] + '\\.' + ADDRESS_RANGE['64'][bip.to_s] | |
when '27' | |
bip = (match_obj[4].to_i / 32 ) * 32 | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + match_obj[3] + '\\.' + ADDRESS_RANGE['32'][bip.to_s] | |
when '28' | |
bip = (match_obj[4].to_i / 16 ) * 16 | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + match_obj[3] + '\\.' + ADDRESS_RANGE['16'][bip.to_s] | |
when '29' | |
bip = (match_obj[4].to_i / 8 ) * 8 | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + match_obj[3] + '\\.' + ADDRESS_RANGE['8'][bip.to_s] | |
when '30' | |
bip = (match_obj[4].to_i / 4 ) * 4 | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + match_obj[3] + '\\.' + ADDRESS_RANGE['4'][bip.to_s] | |
when '31' | |
bip = (match_obj[4].to_i / 2 ) * 2 | |
case bip.to_s.size | |
when 2 | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + match_obj[3] + '\\.' + bip.to_s[0, 1] + '[' + bip.to_s[1] + '-' + (bip + 1).to_s[1] + ']' | |
when 3 | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + match_obj[3] + '\\.' + bip.to_s[0, 2] + '[' + bip.to_s[2] + '-' + (bip + 1).to_s[2] + ']' | |
else | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + match_obj[3] + '\\.' + '[' + bip.to_s + '-' + (bip + 1).to_s + ']' | |
end | |
when '32' | |
match_obj[1] + '\\.' + match_obj[2] + '\\.' + match_obj[3] + '\\.' + match_obj[4] | |
end | |
end | |
end | |
main if $0 == __FILE__ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment