lib/ip2proxy_ruby.rb in ip2proxy_ruby-1.0.4 vs lib/ip2proxy_ruby.rb in ip2proxy_ruby-2.0.0
- old
+ new
@@ -6,15 +6,15 @@
require_relative 'ip2proxy_ruby/i2p_ip_data'
require_relative 'ip2proxy_ruby/ip2proxy_record'
class Ip2proxy
attr_accessor :record_class4, :record_class6, :v4, :file, :db_index, :count, :base_addr, :ipno, :record, :database, :columns, :ip_version, :ipv4databasecount, :ipv4databaseaddr, :ipv4indexbaseaddr, :ipv6databasecount, :ipv6databaseaddr, :ipv6indexbaseaddr, :databaseyear, :databasemonth, :databaseday
-
- VERSION = '1.0.4'
+
+ VERSION = '2.0.0'
FIELD_NOT_SUPPORTED = 'NOT SUPPORTED'
INVALID_IP_ADDRESS = 'INVALID IP ADDRESS'
-
+
def open(url)
self.file = File.open(File.expand_path url, 'rb')
i2p = Ip2proxyConfig.read(file)
self.db_index = i2p.databasetype
self.columns = i2p.databasecolumn + 0
@@ -30,37 +30,37 @@
self.ipv6indexbaseaddr = i2p.ipv6indexbaseaddr
self.record_class4 = (Ip2ProxyRecord.init database, 4)
self.record_class6 = (Ip2ProxyRecord.init database, 6)
self
end
-
+
def close()
self.file.close
end
-
+
def get_module_version()
return VERSION
end
-
+
def get_package_version()
return (self.db_index).to_s
end
-
+
def get_database_version()
return (self.databaseyear).to_s + "." + (self.databasemonth).to_s + "." + (self.databaseday).to_s
end
-
+
def get_record(ip)
ipno = IPAddr.new(ip, Socket::AF_UNSPEC)
self.ip_version = ipno.ipv4? ? 4 : 6
self.v4 = ipno.ipv4?
self.count = ipno.ipv4? ? self.ipv4databasecount + 0 : self.ipv6databasecount + 0
self.base_addr = (ipno.ipv4? ? self.ipv4databaseaddr - 1 : self.ipv6databaseaddr - 1)
-
+
ipnum = ipno.to_i + 0
col_length = columns * 4
-
+
if ipv4indexbaseaddr > 0 || ipv6indexbaseaddr > 0
indexpos = 0
case ip_version
when 4
ipnum1_2 = (ipnum >> 16)
@@ -74,11 +74,11 @@
return self.record = bsearch(low, high, ipnum, self.base_addr, col_length)
else
return self.record = bsearch(0, self.count, ipnum, self.base_addr, col_length)
end
end
-
+
def get_country_short(ip)
valid = !(IPAddr.new(ip) rescue nil).nil?
if valid
rec = get_record(ip)
if !(rec.nil?)
@@ -89,11 +89,11 @@
else
country_short = INVALID_IP_ADDRESS
end
return country_short
end
-
+
def get_country_long(ip)
valid = !(IPAddr.new(ip) rescue nil).nil?
if valid
rec = get_record(ip)
if !(rec.nil?)
@@ -104,11 +104,11 @@
else
country_long = INVALID_IP_ADDRESS
end
return country_long
end
-
+
def get_region(ip)
valid = !(IPAddr.new(ip) rescue nil).nil?
if valid
rec = get_record(ip)
if !(rec.nil?)
@@ -119,11 +119,11 @@
else
region = INVALID_IP_ADDRESS
end
return region
end
-
+
def get_city(ip)
valid = !(IPAddr.new(ip) rescue nil).nil?
if valid
rec = get_record(ip)
if !(rec.nil?)
@@ -134,11 +134,11 @@
else
city = INVALID_IP_ADDRESS
end
return city
end
-
+
def get_isp(ip)
valid = !(IPAddr.new(ip) rescue nil).nil?
if valid
rec = get_record(ip)
if !(rec.nil?)
@@ -149,11 +149,11 @@
else
isp = INVALID_IP_ADDRESS
end
return isp
end
-
+
def get_proxytype(ip)
valid = !(IPAddr.new(ip) rescue nil).nil?
if valid
rec = get_record(ip)
if !(rec.nil?)
@@ -164,30 +164,105 @@
else
proxytype = INVALID_IP_ADDRESS
end
return proxytype
end
-
+
+ def get_domain(ip)
+ valid = !(IPAddr.new(ip) rescue nil).nil?
+ if valid
+ rec = get_record(ip)
+ if !(rec.nil?)
+ domain = (defined?(rec.domain) && rec.domain != '') ? rec.domain : FIELD_NOT_SUPPORTED
+ else
+ domain = INVALID_IP_ADDRESS
+ end
+ else
+ domain = INVALID_IP_ADDRESS
+ end
+ return domain
+ end
+
+ def get_usagetype(ip)
+ valid = !(IPAddr.new(ip) rescue nil).nil?
+ if valid
+ rec = get_record(ip)
+ if !(rec.nil?)
+ usagetype = (defined?(rec.usagetype) && rec.usagetype != '') ? rec.usagetype : FIELD_NOT_SUPPORTED
+ else
+ usagetype = INVALID_IP_ADDRESS
+ end
+ else
+ usagetype = INVALID_IP_ADDRESS
+ end
+ return usagetype
+ end
+
+ def get_asn(ip)
+ valid = !(IPAddr.new(ip) rescue nil).nil?
+ if valid
+ rec = get_record(ip)
+ if !(rec.nil?)
+ asn = (defined?(rec.asn) && rec.asn != '') ? rec.asn : FIELD_NOT_SUPPORTED
+ else
+ asn = INVALID_IP_ADDRESS
+ end
+ else
+ asn = INVALID_IP_ADDRESS
+ end
+ return asn
+ end
+
+ def get_as(ip)
+ valid = !(IPAddr.new(ip) rescue nil).nil?
+ if valid
+ rec = get_record(ip)
+ if !(rec.nil?)
+ as = (defined?(rec.as) && rec.as != '') ? rec.as : FIELD_NOT_SUPPORTED
+ else
+ as = INVALID_IP_ADDRESS
+ end
+ else
+ as = INVALID_IP_ADDRESS
+ end
+ return as
+ end
+
+ def get_last_seen(ip)
+ valid = !(IPAddr.new(ip) rescue nil).nil?
+ if valid
+ rec = get_record(ip)
+ if !(rec.nil?)
+ last_seen = (defined?(rec.lastseen) && rec.lastseen != '') ? rec.lastseen : FIELD_NOT_SUPPORTED
+ else
+ last_seen = INVALID_IP_ADDRESS
+ end
+ else
+ last_seen = INVALID_IP_ADDRESS
+ end
+ return last_seen
+ end
+
def is_proxy(ip)
valid = !(IPAddr.new(ip) rescue nil).nil?
if valid
rec = get_record(ip)
if !(rec.nil?)
if self.db_index == 1
isproxy = (rec.country_short == '-') ? 0 : 1
else
- isproxy = (rec.proxytype == '-') ? 0 : (rec.proxytype == 'DCH') ? 2 : 1
+ isproxy = (rec.proxytype == '-') ? 0 : (rec.proxytype == 'DCH' || rec.proxytype == 'SES') ? 2 : 1
end
else
isproxy = -1
end
else
isproxy = -1
end
return isproxy
end
-
+
def get_all(ip)
valid = !(IPAddr.new(ip) rescue nil).nil?
if valid
rec = get_record(ip)
if !(rec.nil?)
@@ -195,47 +270,67 @@
country_long = (defined?(rec.country_long) && rec.country_long != '') ? rec.country_long : FIELD_NOT_SUPPORTED
region = (defined?(rec.region) && rec.region != '') ? rec.region : FIELD_NOT_SUPPORTED
city = (defined?(rec.city) && rec.city != '') ? rec.city : FIELD_NOT_SUPPORTED
isp = (defined?(rec.isp) && rec.isp != '') ? rec.isp : FIELD_NOT_SUPPORTED
proxytype = (defined?(rec.proxytype) && rec.proxytype != '') ? rec.proxytype : FIELD_NOT_SUPPORTED
-
+ domain = (defined?(rec.domain) && rec.domain != '') ? rec.domain : FIELD_NOT_SUPPORTED
+ usagetype = (defined?(rec.usagetype) && rec.usagetype != '') ? rec.usagetype : FIELD_NOT_SUPPORTED
+ asn = (defined?(rec.asn) && rec.asn != '') ? rec.asn : FIELD_NOT_SUPPORTED
+ as = (defined?(rec.as) && rec.as != '') ? rec.as : FIELD_NOT_SUPPORTED
+ last_seen = (defined?(rec.lastseen) && rec.lastseen != '') ? rec.lastseen : FIELD_NOT_SUPPORTED
+
if self.db_index == 1
isproxy = (rec.country_short == '-') ? 0 : 1
else
- isproxy = (rec.proxytype == '-') ? 0 : (rec.proxytype == 'DCH') ? 2 : 1
+ isproxy = (rec.proxytype == '-') ? 0 : (rec.proxytype == 'DCH' || rec.proxytype == 'SES') ? 2 : 1
end
else
country_short = INVALID_IP_ADDRESS
country_long = INVALID_IP_ADDRESS
region = INVALID_IP_ADDRESS
city = INVALID_IP_ADDRESS
isp = INVALID_IP_ADDRESS
proxytype = INVALID_IP_ADDRESS
+ domain = INVALID_IP_ADDRESS
+ usagetype = INVALID_IP_ADDRESS
+ asn = INVALID_IP_ADDRESS
+ as = INVALID_IP_ADDRESS
+ last_seen = INVALID_IP_ADDRESS
isproxy = -1
end
else
country_short = INVALID_IP_ADDRESS
country_long = INVALID_IP_ADDRESS
region = INVALID_IP_ADDRESS
city = INVALID_IP_ADDRESS
isp = INVALID_IP_ADDRESS
proxytype = INVALID_IP_ADDRESS
+ domain = INVALID_IP_ADDRESS
+ usagetype = INVALID_IP_ADDRESS
+ asn = INVALID_IP_ADDRESS
+ as = INVALID_IP_ADDRESS
+ last_seen = INVALID_IP_ADDRESS
isproxy = -1
end
-
+
results = {}
results['is_proxy'] = isproxy
results['proxy_type'] = proxytype
results['country_short'] = country_short
results['country_long'] = country_long
results['region'] = region
results['city'] = city
results['isp'] = isp
+ results['domain'] = domain
+ results['usagetype'] = usagetype
+ results['asn'] = asn
+ results['as'] = as
+ results['last_seen'] = last_seen
return results
end
-
+
def bsearch(low, high, ipnum, base_addr, col_length)
while low <= high do
mid = (low + high) >> 1
ip_from, ip_to = get_from_to(mid, base_addr, col_length)
if ipnum >= ip_from && ipnum < ip_to
@@ -253,28 +348,28 @@
low = mid + 1
end
end
end
end
-
+
def get_from_to(mid, base_addr, col_length)
from_base = ( base_addr + mid * (col_length + (v4 ? 0 : 12)))
file.seek(from_base)
ip_from = v4 ? file.read(4).unpack('V').first : readipv6(file)
file.seek(from_base + col_length + (v4 ? 0 : 12))
ip_to = v4 ? file.read(4).unpack('V').first : readipv6(file)
[ip_from, ip_to]
end
-
+
def read32(indexp)
file.seek(indexp - 1)
return file.read(4).unpack('V').first
end
-
+
def readipv6(filer)
parts = filer.read(16).unpack('V*')
return parts[0] + parts[1] * 4294967296 + parts[2] * 4294967296**2 + parts[3] * 4294967296**3
end
-
+
private :get_record, :bsearch, :get_from_to, :read32, :readipv6
-
+
end
\ No newline at end of file