#!/usr/local/bin/ruby # Usage: # Enter a directory contaning geoipdata.csv and execute the script: # # ./geoipdns-geolitecity-build.rb # # This will create or replace data-blocks in the same directory. # Ruby 1.9 doesn't play along well with us by default; let's turn off encoding if RUBY_VERSION >= "1.9" Encoding.default_external = Encoding::ASCII_8BIT Encoding.default_internal = Encoding::ASCII_8BIT end def strip_quotes( line ) line = line.sub( /^ /, "" ) line = line.sub( /^\"/, "" ) line = line.chomp line = line.sub( /\"$/, "" ) return line; end us = Hash.new us["AL"] = "us-central" us["AK"] = "us-west" us["AZ"] = "us-central" us["AR"] = "us-central" us["CA"] = "us-west" us["CO"] = "us-central" us["CT"] = "us-east" us["DE"] = "us-east" us["DC"] = "us-east" us["FL"] = "us-east" us["GA"] = "us-east" us["HI"] = "us-west" us["ID"] = "us-west" us["IL"] = "us-central" us["IN"] = "us-east" us["IA"] = "us-central" us["KS"] = "us-central" us["KY"] = "us-east" us["LA"] = "us-central" us["ME"] = "us-east" us["MD"] = "us-east" us["MA"] = "us-east" us["MI"] = "us-east" us["MN"] = "us-central" us["MS"] = "us-central" us["MO"] = "us-central" us["MT"] = "us-central" us["NE"] = "us-central" us["NV"] = "us-west" us["NH"] = "us-east" us["NJ"] = "us-east" us["NM"] = "us-central" us["NY"] = "us-east" us["NC"] = "us-east" us["ND"] = "us-central" us["OH"] = "us-east" us["OK"] = "us-central" us["OR"] = "us-west" us["PA"] = "us-east" us["PR"] = "us-east" us["RI"] = "us-east" us["SC"] = "us-east" us["SD"] = "us-central" us["TN"] = "us-east" us["TX"] = "us-central" us["UT"] = "us-central" us["VT"] = "us-east" us["VI"] = "us-east" us["VA"] = "us-east" us["WA"] = "us-west" us["WV"] = "us-east" us["WI"] = "us-central" us["WY"] = "us-central" canada = Hash.new canada["AB"] = "canada-west" canada["BC"] = "canada-west" canada["MB"] = "canada-central" canada["NB"] = "canada-east" canada["NL"] = "canada-east" canada["NT"] = "canada-west" canada["NS"] = "canada-east" canada["NU"] = "canada-east" canada["ON"] = "canada-central" canada["PE"] = "canada-east" canada["QC"] = "canada-east" canada["SK"] = "canada-central" canada["YT"] = "canada-west" in_file = File.new( "geoipdata.csv", "r" ) out_file = File.new( "data-blocks", "w" ) while ( l = in_file.gets ) if ( l =~ /^\"/ ) s = l.split( ',' ) s[0] = strip_quotes( s[0] ) s[0] = s[0].sub( /\//, ":" ) s[1] = strip_quotes( s[1] ) s[2] = strip_quotes( s[2] ) if ( s[1] == "US" ) out_file.write( "%#{us[s[2]]}:#{s[0]}:\n" ) else if ( s[1] == "CA" ) out_file.write( "%#{canada[s[2]]}:#{s[0]}:\n" ) end end end end