class GeoIPMulti
Public Class Methods
new(*filenames)
click to toggle source
# File lib/geoip_multi.rb, line 101 def initialize (*filenames) @geoip_databases=[] filenames=Dir.glob(File.join(File.expand_path($0)[/(.*\/)/],'*.dat')) if filenames.length == 0 add_database(filenames) end
Public Instance Methods
add_database(*filenames)
click to toggle source
# File lib/geoip_multi.rb, line 107 def add_database (*filenames) filenames.flatten! filenames.each do |filename| if File.directory?(filename) Dir.glob(File.join(filename,'*.dat')) {|filename| @geoip_databases << GeoIP.new(filename)} else GeoIP.new(filename) @geoip_databases << GeoIP.new(filename) end end end
lookup(ip)
click to toggle source
# File lib/geoip_multi.rb, line 119 def lookup(ip) results ={} @geoip_databases.each do |current_database| case current_database.database_type #IPv4 addresses expected, IPv6 not currently supported, maybe in the future... when GEOIP_COUNTRY_EDITION results.merge!(current_database.country(ip).to_hash) when GEOIP_CITY_EDITION_REV1 results.merge!(current_database.city(ip).to_hash) results.merge!(:netmask=>current_database.netmask(ip)) iprange = current_database.range_by_ip(ip) results.merge!(:first_ip => iprange[0],:last_ip => iprange[1]) when GEOIP_ISP_EDITION results.merge!(:isp=>current_database.isp(ip)) when GEOIP_ORG_EDITION results.merge!(current_database.filename[/([^\/]+)$/][/(?:GeoIP)?([^.]+)/,1].downcase.to_sym => current_database.isp(ip)) when GEOIP_ASNUM_EDITION results.merge!(current_database.asn(ip).to_hash) else puts "Unknown or Unsupported GeoIP database type:" puts "filename:#{current_database.filename} => database_type:#{current_database.database_type}" end end results end