ip2proxy_ruby 3.0.1 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,27 +1,28 @@
1
- class I2pDbConfig
2
- COLUMNS = {
3
- :COUNTRY => [0, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3],
4
- :REGION => [0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4],
5
- :CITY => [0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5],
6
- :ISP => [0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6],
7
- :PROXYTYPE => [0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2],
8
- :DOMAIN => [0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7],
9
- :USAGETYPE => [0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8],
10
- :ASN => [0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9],
11
- :AS => [0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10],
12
- :LASTSEEN => [0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11],
13
- :THREAT => [0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12]
14
- }
15
-
16
- def self.setup_database(db_index)
17
- # strip all 0 value & downcase keys
18
- cols = COLUMNS.inject({}) {|memo, (key, value)|
19
- (memo[key.to_s.downcase.to_sym] = value[db_index] if value[db_index] > 0)
20
- memo
21
- }
22
- # order by value
23
- col_array = cols.sort_by {|key,value| value}
24
- end
25
-
26
- end
1
+ class I2pDbConfig
2
+ COLUMNS = {
3
+ :COUNTRY => [0, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
4
+ :REGION => [0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4],
5
+ :CITY => [0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5],
6
+ :ISP => [0, 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, 6],
7
+ :PROXYTYPE => [0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
8
+ :DOMAIN => [0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7],
9
+ :USAGETYPE => [0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8],
10
+ :ASN => [0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9],
11
+ :AS => [0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10],
12
+ :LASTSEEN => [0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11],
13
+ :THREAT => [0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12],
14
+ :PROVIDER => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13]
15
+ }
16
+
17
+ def self.setup_database(db_index)
18
+ # strip all 0 value & downcase keys
19
+ cols = COLUMNS.inject({}) {|memo, (key, value)|
20
+ (memo[key.to_s.downcase.to_sym] = value[db_index] if value[db_index] > 0)
21
+ memo
22
+ }
23
+ # order by value
24
+ col_array = cols.sort_by {|key,value| value}
25
+ end
26
+
27
+ end
27
28
 
@@ -1,10 +1,10 @@
1
- class I2pIpData < BinData::BasePrimitive
2
- def read_and_return_value(io)
3
- iv = eval_parameter(:ip_version)
4
- if iv == 4
5
- addr = BinData::Uint32le.read(io)
6
- elsif iv == 6
7
- addr = BinData::Uint128le.read(io)
8
- end
9
- end
1
+ class I2pIpData < BinData::BasePrimitive
2
+ def read_and_return_value(io)
3
+ iv = eval_parameter(:ip_version)
4
+ if iv == 4
5
+ addr = BinData::Uint32le.read(io)
6
+ elsif iv == 6
7
+ addr = BinData::Uint128le.read(io)
8
+ end
9
+ end
10
10
  end
@@ -1,16 +1,16 @@
1
- class I2pStringData < BinData::BasePrimitive
2
-
3
- def read_and_return_value(io)
4
- country_long = eval_parameter(:country_long)
5
- io.seekbytes(-4) if country_long
6
- file = io.instance_variable_get('@raw_io')
7
- addr = BinData::Uint32le.read(io)
8
- old_offset = file.tell
9
- country_long ? file.seek(addr + 3) : file.seek(addr)
10
- length = BinData::Uint8.read(file)
11
- res = BinData::String.new(:length => length).read(file)
12
- file.seek(old_offset)
13
- res
14
- end
15
-
1
+ class I2pStringData < BinData::BasePrimitive
2
+
3
+ def read_and_return_value(io)
4
+ country_long = eval_parameter(:country_long)
5
+ io.seekbytes(-4) if country_long
6
+ file = io.instance_variable_get('@raw_io')
7
+ addr = BinData::Uint32le.read(io)
8
+ old_offset = file.tell
9
+ country_long ? file.seek(addr + 3) : file.seek(addr)
10
+ length = BinData::Uint8.read(file)
11
+ res = BinData::String.new(:length => length).read(file)
12
+ file.seek(old_offset)
13
+ res
14
+ end
15
+
16
16
  end
@@ -1,17 +1,20 @@
1
- class Ip2proxyConfig < BinData::Record
2
- endian :little
3
- uint8 :databasetype
4
- uint8 :databasecolumn
5
- uint8 :databaseyear
6
- uint8 :databasemonth
7
- uint8 :databaseday
8
- # uint32 :databasecount
9
- # uint32 :databaseaddr
10
- # uint32 :ipversion
11
- uint32 :ipv4databasecount
12
- uint32 :ipv4databaseaddr
13
- uint32 :ipv6databasecount
14
- uint32 :ipv6databaseaddr
15
- uint32 :ipv4indexbaseaddr
16
- uint32 :ipv6indexbaseaddr
1
+ class Ip2proxyConfig < BinData::Record
2
+ endian :little
3
+ uint8 :databasetype
4
+ uint8 :databasecolumn
5
+ uint8 :databaseyear
6
+ uint8 :databasemonth
7
+ uint8 :databaseday
8
+ # uint32 :databasecount
9
+ # uint32 :databaseaddr
10
+ # uint32 :ipversion
11
+ uint32 :ipv4databasecount
12
+ uint32 :ipv4databaseaddr
13
+ uint32 :ipv6databasecount
14
+ uint32 :ipv6databaseaddr
15
+ uint32 :ipv4indexbaseaddr
16
+ uint32 :ipv6indexbaseaddr
17
+ uint8 :productcode
18
+ uint8 :licensecode
19
+ uint32 :databasesize
17
20
  end
@@ -1,20 +1,20 @@
1
- class Ip2ProxyRecord
2
- def self.init(database, ip_version)
3
- cls = Class.new(BinData::Record)
4
- cls.class_eval {
5
- endian :little
6
- i2p_ip_data :ip_from, :ip_version => ip_version
7
- database.each do |col|
8
- if col.first == :country
9
- i2p_string_data :country_short
10
- i2p_string_data :country_long, :country_long => true
11
- else
12
- i2p_string_data col.first
13
- end
14
- end
15
-
16
- i2p_ip_data :ip_to, :ip_version => ip_version
17
- }
18
- cls
19
- end
1
+ class Ip2ProxyRecord
2
+ def self.init(database, ip_version)
3
+ cls = Class.new(BinData::Record)
4
+ cls.class_eval {
5
+ endian :little
6
+ i2p_ip_data :ip_from, :ip_version => ip_version
7
+ database.each do |col|
8
+ if col.first == :country
9
+ i2p_string_data :country_short
10
+ i2p_string_data :country_long, :country_long => true
11
+ else
12
+ i2p_string_data col.first
13
+ end
14
+ end
15
+
16
+ i2p_ip_data :ip_to, :ip_version => ip_version
17
+ }
18
+ cls
19
+ end
20
20
  end
Binary file
Binary file
@@ -0,0 +1,123 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Ip2proxy" do
4
+ it "work correctly with invalid ip" do
5
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
6
+ record = i2p.get_all('1.0.0.x')
7
+ expect(record['country_short']).to eq 'INVALID IP ADDRESS'
8
+ end
9
+
10
+ it "work correctly with get_all ipv4" do
11
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
12
+ record = i2p.get_all('1.0.0.8')
13
+ expect(record['country_short']).to eq 'US'
14
+ end
15
+
16
+ it "work correctly with get_country_short" do
17
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
18
+ record = i2p.get_country_short('1.0.0.8')
19
+ expect(record).to eq 'US'
20
+ end
21
+
22
+ it "work correctly with get_country_long" do
23
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
24
+ record = i2p.get_country_long('1.0.0.8')
25
+ expect(record).to eq 'United States of America'
26
+ end
27
+
28
+ it "work correctly with get_region" do
29
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
30
+ record = i2p.get_region('1.0.0.8')
31
+ expect(record).to eq 'California'
32
+ end
33
+
34
+ it "work correctly with get_city" do
35
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
36
+ record = i2p.get_city('1.0.0.8')
37
+ expect(record).to eq 'Los Angeles'
38
+ end
39
+
40
+ it "work correctly with get_isp" do
41
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
42
+ record = i2p.get_isp('1.0.0.8')
43
+ expect(record).to eq 'APNIC and CloudFlare DNS Resolver Project'
44
+ end
45
+
46
+ it "work correctly with get_domain" do
47
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
48
+ record = i2p.get_domain('1.0.0.8')
49
+ expect(record).to eq 'cloudflare.com'
50
+ end
51
+
52
+ it "work correctly with get_usagetype" do
53
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
54
+ record = i2p.get_usagetype('1.0.0.8')
55
+ expect(record).to eq 'CDN'
56
+ end
57
+
58
+ it "work correctly with get_asn" do
59
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
60
+ record = i2p.get_asn('1.0.0.8')
61
+ expect(record).to eq '13335'
62
+ end
63
+
64
+ it "work correctly with get_as" do
65
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
66
+ record = i2p.get_as('1.0.0.8')
67
+ expect(record).to eq 'CLOUDFLARENET'
68
+ end
69
+
70
+ it "work correctly with get_last_seen" do
71
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
72
+ record = i2p.get_last_seen('1.0.0.8')
73
+ expect(record).to eq '22'
74
+ end
75
+
76
+ it "work correctly with get_threat" do
77
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
78
+ record = i2p.get_threat('1.0.0.8')
79
+ expect(record).to eq '-'
80
+ end
81
+
82
+ it "work correctly with is_proxy" do
83
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
84
+ record = i2p.is_proxy('1.0.0.8')
85
+ expect(record).to eq 2
86
+ end
87
+
88
+ it "work correctly with get_proxytype" do
89
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
90
+ record = i2p.get_proxytype('1.0.0.8')
91
+ expect(record).to eq 'DCH'
92
+ end
93
+
94
+ it "work correctly with get_provider" do
95
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
96
+ record = i2p.get_provider('1.0.0.8')
97
+ expect(record).to eq 'CloudFlare'
98
+ end
99
+
100
+ it "work correctly with get_all ipv6" do
101
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
102
+ record = i2p.get_all('2c0f:ffa0::4')
103
+ expect(record['country_short']).to eq 'UG'
104
+ end
105
+
106
+ it "work correctly with get_module_version" do
107
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
108
+ record = i2p.get_module_version()
109
+ expect(record).to eq '3.1.0'
110
+ end
111
+
112
+ it "work correctly with get_package_version" do
113
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
114
+ record = i2p.get_package_version()
115
+ expect(record).to eq '11'
116
+ end
117
+
118
+ it "work correctly with get_database_version" do
119
+ i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/PX11.SAMPLE.BIN")
120
+ record = i2p.get_database_version()
121
+ expect(record).to eq '2021.5.28'
122
+ end
123
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ip2proxy_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ip2location
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-30 00:00:00.000000000 Z
11
+ date: 2021-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bindata
@@ -69,8 +69,8 @@ dependencies:
69
69
  description: The official IP2Proxy Ruby library to detect VPN servers, open proxies,
70
70
  web proxies, Tor exit nodes, search engine robots, data center ranges and residential
71
71
  proxies using IP2Proxy BIN database. Other information available includes proxy
72
- type, country, state, city, ISP, domain name, usage type, AS number, AS name, threats
73
- and last seen date.
72
+ type, country, state, city, ISP, domain name, usage type, AS number, AS name, threats,
73
+ last seen date and provider names.
74
74
  email:
75
75
  - support@ip2location.com
76
76
  executables: []
@@ -93,9 +93,9 @@ files:
93
93
  - lib/ip2proxy_ruby/i2p_string_data.rb
94
94
  - lib/ip2proxy_ruby/ip2proxy_config.rb
95
95
  - lib/ip2proxy_ruby/ip2proxy_record.rb
96
- - rb/data/IP2PROXY-LITE-PX1.BIN
97
- - spec/assets/IP2PROXY-IP-PROXYTYPE-COUNTRY-REGION-CITY-ISP.SAMPLE.BIN
98
- - spec/ip2proxy_ruby_spec.rb
96
+ - rb/data/PX11.SAMPLE.BIN
97
+ - spec/assets/PX11.SAMPLE.BIN
98
+ - spec/ip2proxy_ruby_database_spec.rb
99
99
  - spec/spec_helper.rb
100
100
  homepage: https://github.com/ip2location/ip2proxy-ruby
101
101
  licenses:
Binary file
@@ -1,20 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe "Ip2proxy" do
4
- it "work correctly with ipv4" do
5
- i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/IP2PROXY-IP-PROXYTYPE-COUNTRY-REGION-CITY-ISP.SAMPLE.BIN")
6
- record = i2p.get_all('1.0.241.135')
7
- record.should_not be_nil
8
- record['is_proxy'].should == 1
9
- i2p.close()
10
- end
11
-
12
- it "work correctly with ipv6" do
13
- i2p = Ip2proxy.new.open(File.dirname(__FILE__) + "/assets/IP2PROXY-IP-PROXYTYPE-COUNTRY-REGION-CITY-ISP.SAMPLE.BIN")
14
- record = i2p.get_all('2001::')
15
- record.should_not be_nil
16
- record['is_proxy'].should == 0
17
- i2p.close()
18
- end
19
-
20
- end