Skip to content

Instantly share code, notes, and snippets.

@bjeanes
Last active October 20, 2016 00:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bjeanes/12f516fb0a573ea60db8e4657fb65efb to your computer and use it in GitHub Desktop.
Save bjeanes/12f516fb0a573ea60db8e4657fb65efb to your computer and use it in GitHub Desktop.
$ 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})/
#!/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