maxmind-geoip2 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/README.md +10 -5
- data/lib/maxmind/geoip2/client.rb +18 -9
- data/lib/maxmind/geoip2/model/city.rb +4 -5
- data/lib/maxmind/geoip2/model/connection_type.rb +3 -2
- data/lib/maxmind/geoip2/model/enterprise.rb +2 -3
- data/lib/maxmind/geoip2/model/insights.rb +3 -5
- data/lib/maxmind/geoip2/record/traits.rb +39 -27
- data/lib/maxmind/geoip2/version.rb +8 -0
- data/maxmind-geoip2.gemspec +7 -2
- data/test/data/cmd/write-test-data/main.go +68 -0
- data/test/data/go.mod +13 -0
- data/test/data/go.sum +16 -0
- data/test/data/perltidyrc +6 -0
- data/test/data/pkg/writer/decoder.go +178 -0
- data/test/data/pkg/writer/geoip2.go +182 -0
- data/test/data/pkg/writer/ip.go +39 -0
- data/test/data/pkg/writer/maxmind.go +245 -0
- data/test/data/pkg/writer/nestedstructures.go +73 -0
- data/test/data/pkg/writer/writer.go +58 -0
- data/test/data/source-data/GeoIP2-City-Test.json +322 -1
- data/test/data/source-data/GeoIP2-Connection-Type-Test.json +15 -10
- data/test/data/source-data/GeoIP2-Country-Test.json +99 -0
- data/test/data/source-data/GeoIP2-Domain-Test.json +5 -0
- data/test/data/source-data/GeoIP2-Enterprise-Test.json +347 -1
- data/test/data/source-data/GeoIP2-Precision-Enterprise-Sandbox-Test.json +296 -0
- data/test/data/source-data/GeoIP2-Precision-Enterprise-Test.json +412 -2
- data/test/data/source-data/GeoIP2-Static-IP-Score-Test.json +15 -0
- data/test/data/source-data/GeoIP2-User-Count-Test.json +18 -0
- data/test/data/source-data/GeoLite2-City-Test.json +168 -0
- data/test/data/source-data/GeoLite2-Country-Test.json +92 -0
- data/test/data/test-data/GeoIP2-Anonymous-IP-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-City-Test-Broken-Double-Format.mmdb +0 -0
- data/test/data/test-data/GeoIP2-City-Test-Invalid-Node-Count.mmdb +0 -0
- data/test/data/test-data/GeoIP2-City-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-Connection-Type-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-Country-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-DensityIncome-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-Domain-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-Enterprise-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-ISP-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-Precision-Enterprise-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-Static-IP-Score-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-User-Count-Test.mmdb +0 -0
- data/test/data/test-data/GeoLite2-ASN-Test.mmdb +0 -0
- data/test/data/test-data/GeoLite2-City-Test.mmdb +0 -0
- data/test/data/test-data/GeoLite2-Country-Test.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-string-value-entries.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-broken-pointers-24.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-broken-search-tree-24.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-decoder.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-ipv4-24.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-ipv4-28.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-ipv4-32.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-ipv6-24.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-ipv6-28.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-ipv6-32.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-metadata-pointers.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-mixed-24.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-mixed-28.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-mixed-32.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-nested.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-pointer-decoder.mmdb +0 -0
- data/test/data/test-data/README.md +28 -12
- data/test/test_client.rb +18 -2
- data/test/test_reader.rb +19 -1
- metadata +16 -7
- data/test/data/source-data/README +0 -15
- data/test/data/test-data/write-test-data.pl +0 -695
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c1d04d352a8344e1e8d9c232ab7713bc0b74ddaa1e4a82aec61dbbf37bfd925
|
4
|
+
data.tar.gz: 20bcee370b35a4e098b48b36146eb7da9674f6c271ba94744a435addbd9c5e05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0331f1fe319379d035bd4f8675f775bbe31f0d3747d2f9a65754523cb6718160237d5a232d54cad7cd00cdcfe5243ff0f8a39276d749948116fc974221eb3d8a
|
7
|
+
data.tar.gz: 1d3e2f6c9a5847671b4b86004c7407bacf25cb271674d7dd49c5217b15d20a307ba416ec19a5f04d2050925ee689a97f01ca899f2edcb611bb44c5ee1a13ba35
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.2.0 (2023-12-04)
|
4
|
+
|
5
|
+
* `MaxMind::GeoIP2::Client` now validates the IP address before making a
|
6
|
+
request to the web service.
|
7
|
+
* `MaxMind::GeoIP2::Client` now includes the version of Ruby, the version
|
8
|
+
of the HTTP client library, and its own version in the User-Agent header.
|
9
|
+
* The `anycast?` method was added to `MaxMind::GeoIP2::Record::Traits`.
|
10
|
+
This returns `true` if the IP address belongs to an [anycast
|
11
|
+
network](https://en.wikipedia.org/wiki/Anycast). This is available for
|
12
|
+
the GeoIP2 Country, City Plus, and Insights web services and the GeoIP2
|
13
|
+
Country, City, and Enterprise databases.
|
14
|
+
|
3
15
|
## 1.1.0 (2021-11-18)
|
4
16
|
|
5
17
|
* Exceptions from this gem now inherit from `MaxMind::GeoIP2::Error`. IP
|
data/README.md
CHANGED
@@ -228,14 +228,19 @@ client = MaxMind::GeoIP2::Client.new(
|
|
228
228
|
account_id: 42,
|
229
229
|
license_key: 'license_key',
|
230
230
|
|
231
|
-
# To use the GeoLite2 web service instead of GeoIP2
|
231
|
+
# To use the GeoLite2 web service instead of the GeoIP2 web service, set
|
232
232
|
# the host parameter to "geolite.info":
|
233
233
|
# host: 'geolite.info',
|
234
|
+
|
235
|
+
# To use the Sandbox GeoIP2 web service instead of the production GeoIP2
|
236
|
+
# web service, set the host parameter to "sandbox.maxmind.com":
|
237
|
+
# host: 'sandbox.maxmind.com',
|
234
238
|
)
|
235
239
|
|
236
240
|
# Replace "city" with the method corresponding to the web service that
|
237
241
|
# you are using, e.g., "country", "insights". Please note that Insights
|
238
|
-
# is only supported by GeoIP2
|
242
|
+
# is only supported by the GeoIP2 web service and not the GeoLite2 web
|
243
|
+
# service.
|
239
244
|
record = client.city('128.101.101.101')
|
240
245
|
|
241
246
|
puts record.country.iso_code # US
|
@@ -279,8 +284,8 @@ which can be populated vary between end points. In addition, while an end
|
|
279
284
|
point may offer a particular piece of data, MaxMind does not always have
|
280
285
|
every piece of data for any given IP address.
|
281
286
|
|
282
|
-
See the [GeoIP2
|
283
|
-
|
287
|
+
See the [GeoIP2 web service
|
288
|
+
documentation](https://dev.maxmind.com/geoip/docs/web-services?lang=en) for details on
|
284
289
|
what data each end point may return.
|
285
290
|
|
286
291
|
The only piece of data which is always returned is the `ip_address`
|
@@ -340,7 +345,7 @@ This library uses [Semantic Versioning](https://semver.org/).
|
|
340
345
|
|
341
346
|
## Copyright and License
|
342
347
|
|
343
|
-
This software is Copyright (c) 2020-
|
348
|
+
This software is Copyright (c) 2020-2023 by MaxMind, Inc.
|
344
349
|
|
345
350
|
This is free software, licensed under the [Apache License, Version
|
346
351
|
2.0](LICENSE-APACHE) or the [MIT License](LICENSE-MIT), at your option.
|
@@ -4,15 +4,17 @@ require 'connection_pool'
|
|
4
4
|
require 'http'
|
5
5
|
require 'json'
|
6
6
|
require 'maxmind/geoip2/errors'
|
7
|
+
require 'maxmind/geoip2/version'
|
7
8
|
require 'maxmind/geoip2/model/city'
|
8
9
|
require 'maxmind/geoip2/model/country'
|
9
10
|
require 'maxmind/geoip2/model/insights'
|
11
|
+
require 'resolv'
|
10
12
|
|
11
13
|
module MaxMind
|
12
14
|
module GeoIP2
|
13
15
|
# This class provides a client API for all the
|
14
|
-
# {https://dev.maxmind.com/geoip/docs/web-services?lang=en GeoIP2
|
15
|
-
# services}. The services are Country, City, and Insights. Each service
|
16
|
+
# {https://dev.maxmind.com/geoip/docs/web-services?lang=en GeoIP2 web
|
17
|
+
# services}. The services are Country, City Plus, and Insights. Each service
|
16
18
|
# returns a different set of data about an IP address, with Country returning
|
17
19
|
# the least data and Insights the most.
|
18
20
|
#
|
@@ -58,7 +60,7 @@ module MaxMind
|
|
58
60
|
# rubocop:disable Metrics/CyclomaticComplexity
|
59
61
|
# rubocop:disable Metrics/PerceivedComplexity
|
60
62
|
|
61
|
-
# Create a Client that may be used to query a GeoIP2
|
63
|
+
# Create a Client that may be used to query a GeoIP2 web service.
|
62
64
|
#
|
63
65
|
# Once created, the Client is safe to use for lookups from multiple
|
64
66
|
# threads.
|
@@ -71,8 +73,10 @@ module MaxMind
|
|
71
73
|
# property from most preferred to least preferred.
|
72
74
|
#
|
73
75
|
# @param host [String] the host to use when querying the web service. Set
|
74
|
-
# this to "geolite.info" to use the GeoLite2 web service instead of
|
75
|
-
# GeoIP2
|
76
|
+
# this to "geolite.info" to use the GeoLite2 web service instead of the
|
77
|
+
# GeoIP2 web service. Set this to "sandbox.maxmind.com" to use the
|
78
|
+
# Sandbox environment. The sandbox allows you to experiment with the
|
79
|
+
# API without affecting your production data.
|
76
80
|
#
|
77
81
|
# @param timeout [Integer] the number of seconds to wait for a request
|
78
82
|
# before timing out. If 0, no timeout is set.
|
@@ -117,7 +121,7 @@ module MaxMind
|
|
117
121
|
# rubocop:enable Metrics/CyclomaticComplexity
|
118
122
|
# rubocop:enable Metrics/ParameterLists
|
119
123
|
|
120
|
-
# This method calls the City web service.
|
124
|
+
# This method calls the City Plus web service.
|
121
125
|
#
|
122
126
|
# @param ip_address [String] IPv4 or IPv6 address as a string. If no
|
123
127
|
# address is provided, the address that the web service is called from is
|
@@ -193,8 +197,8 @@ module MaxMind
|
|
193
197
|
|
194
198
|
# This method calls the Insights web service.
|
195
199
|
#
|
196
|
-
# Insights is only supported by the GeoIP2
|
197
|
-
#
|
200
|
+
# Insights is only supported by the GeoIP2 web service. The GeoLite2 web
|
201
|
+
# service does not support it.
|
198
202
|
#
|
199
203
|
# @param ip_address [String] IPv4 or IPv6 address as a string. If no
|
200
204
|
# address is provided, the address that the web service is called from is
|
@@ -234,6 +238,10 @@ module MaxMind
|
|
234
238
|
private
|
235
239
|
|
236
240
|
def response_for(endpoint, model_class, ip_address)
|
241
|
+
if ip_address != 'me' && ip_address !~ Resolv::AddressRegex
|
242
|
+
raise AddressInvalidError, "The value \"#{ip_address}\" is not a valid IP address"
|
243
|
+
end
|
244
|
+
|
237
245
|
record = get(endpoint, ip_address)
|
238
246
|
|
239
247
|
model_class.new(record, @locales)
|
@@ -243,8 +251,9 @@ module MaxMind
|
|
243
251
|
headers = HTTP.basic_auth(user: @account_id, pass: @license_key)
|
244
252
|
.headers(
|
245
253
|
accept: 'application/json',
|
246
|
-
user_agent:
|
254
|
+
user_agent: "MaxMind-GeoIP2-ruby/#{VERSION} ruby/#{RUBY_VERSION} http/#{HTTP::VERSION}"
|
247
255
|
)
|
256
|
+
|
248
257
|
timeout = @timeout > 0 ? headers.timeout(@timeout) : headers
|
249
258
|
|
250
259
|
proxy = timeout
|
@@ -9,12 +9,11 @@ require 'maxmind/geoip2/record/subdivision'
|
|
9
9
|
module MaxMind
|
10
10
|
module GeoIP2
|
11
11
|
module Model
|
12
|
-
# Model class for the data returned by the GeoIP2 City web service
|
13
|
-
# database. It is also used for GeoLite2 City lookups.
|
12
|
+
# Model class for the data returned by the GeoIP2 City Plus web service
|
13
|
+
# and the City database. It is also used for GeoLite2 City lookups.
|
14
14
|
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
# https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details.
|
15
|
+
# See https://dev.maxmind.com/geoip/docs/web-services?lang=en for more
|
16
|
+
# details.
|
18
17
|
#
|
19
18
|
# See {MaxMind::GeoIP2::Model::Country} for inherited methods.
|
20
19
|
class City < Country
|
@@ -7,8 +7,9 @@ module MaxMind
|
|
7
7
|
module Model
|
8
8
|
# Model class for the GeoIP2 Connection Type database.
|
9
9
|
class ConnectionType < Abstract
|
10
|
-
# The connection type may take the following values: "Dialup",
|
11
|
-
# "Corporate", "Cellular". Additional
|
10
|
+
# The connection type may take the following values: "Dialup",
|
11
|
+
# "Cable/DSL", "Corporate", "Cellular", and "Satellite". Additional
|
12
|
+
# values may be added in the future.
|
12
13
|
#
|
13
14
|
# @return [String, nil]
|
14
15
|
def connection_type
|
@@ -7,9 +7,8 @@ module MaxMind
|
|
7
7
|
module Model
|
8
8
|
# Model class for the data returned by GeoIP2 Enterprise database lookups.
|
9
9
|
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
# https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details.
|
10
|
+
# See https://dev.maxmind.com/geoip/docs/web-services?lang=en for more
|
11
|
+
# details.
|
13
12
|
#
|
14
13
|
# See {MaxMind::GeoIP2::Model::City} for inherited methods.
|
15
14
|
class Enterprise < City
|
@@ -5,12 +5,10 @@ require 'maxmind/geoip2/model/city'
|
|
5
5
|
module MaxMind
|
6
6
|
module GeoIP2
|
7
7
|
module Model
|
8
|
-
# Model class for the data returned by the GeoIP2
|
9
|
-
# service.
|
8
|
+
# Model class for the data returned by the GeoIP2 Insights web service.
|
10
9
|
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
# https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details.
|
10
|
+
# See https://dev.maxmind.com/geoip/docs/web-services?lang=en for more
|
11
|
+
# details.
|
14
12
|
class Insights < City
|
15
13
|
end
|
16
14
|
end
|
@@ -22,8 +22,8 @@ module MaxMind
|
|
22
22
|
|
23
23
|
# The autonomous system number associated with the IP address. See
|
24
24
|
# Wikipedia[https://en.wikipedia.org/wiki/Autonomous_system_(Internet)].
|
25
|
-
# This attribute is only available from the City and Insights web
|
26
|
-
# and the
|
25
|
+
# This attribute is only available from the City Plus and Insights web
|
26
|
+
# services and the Enterprise database.
|
27
27
|
#
|
28
28
|
# @return [Integer, nil]
|
29
29
|
def autonomous_system_number
|
@@ -33,8 +33,8 @@ module MaxMind
|
|
33
33
|
# The organization associated with the registered autonomous system number
|
34
34
|
# for the IP address. See
|
35
35
|
# Wikipedia[https://en.wikipedia.org/wiki/Autonomous_system_(Internet)].
|
36
|
-
# This attribute is only available from the City and Insights web
|
37
|
-
# and the
|
36
|
+
# This attribute is only available from the City Plus and Insights web
|
37
|
+
# services and the Enterprise database.
|
38
38
|
#
|
39
39
|
# @return [String, nil]
|
40
40
|
def autonomous_system_organization
|
@@ -42,8 +42,9 @@ module MaxMind
|
|
42
42
|
end
|
43
43
|
|
44
44
|
# The connection type may take the following values: "Dialup",
|
45
|
-
# "Cable/DSL", "Corporate", "Cellular". Additional
|
46
|
-
# the future. This attribute is only available
|
45
|
+
# "Cable/DSL", "Corporate", "Cellular", and "Satellite". Additional
|
46
|
+
# values may be added in the future. This attribute is only available
|
47
|
+
# from the City Plus and Insights web services and the Enterprise
|
47
48
|
# database.
|
48
49
|
#
|
49
50
|
# @return [String, nil]
|
@@ -53,8 +54,8 @@ module MaxMind
|
|
53
54
|
|
54
55
|
# The second level domain associated with the IP address. This will be
|
55
56
|
# something like "example.com" or "example.co.uk", not "foo.example.com".
|
56
|
-
# This attribute is only available from the City and Insights web
|
57
|
-
# and the
|
57
|
+
# This attribute is only available from the City Plus and Insights web
|
58
|
+
# services and the Enterprise database.
|
58
59
|
#
|
59
60
|
# @return [String, nil]
|
60
61
|
def domain
|
@@ -73,7 +74,7 @@ module MaxMind
|
|
73
74
|
end
|
74
75
|
|
75
76
|
# This is true if the IP address belongs to any sort of anonymous network.
|
76
|
-
# This property is only available from
|
77
|
+
# This property is only available from Insights.
|
77
78
|
#
|
78
79
|
# @return [Boolean]
|
79
80
|
def anonymous?
|
@@ -83,17 +84,28 @@ module MaxMind
|
|
83
84
|
# This is true if the IP address is registered to an anonymous VPN
|
84
85
|
# provider. If a VPN provider does not register subnets under names
|
85
86
|
# associated with them, we will likely only flag their IP ranges using the
|
86
|
-
# hosting_provider? property. This property is only available from
|
87
|
-
# Precision Insights.
|
87
|
+
# hosting_provider? property. This property is only available from Insights.
|
88
88
|
#
|
89
89
|
# @return [Boolean]
|
90
90
|
def anonymous_vpn?
|
91
91
|
get('is_anonymous_vpn')
|
92
92
|
end
|
93
93
|
|
94
|
+
# This is true if the IP address belongs to an
|
95
|
+
# {https://en.wikipedia.org/wiki/Anycast anycast network}.
|
96
|
+
#
|
97
|
+
# This property is only available from the Country, City Plus, and
|
98
|
+
# Insights web services and the GeoIP2 Country, City, and Enterprise
|
99
|
+
# databases.
|
100
|
+
#
|
101
|
+
# @return [Boolean]
|
102
|
+
def anycast?
|
103
|
+
get('is_anycast')
|
104
|
+
end
|
105
|
+
|
94
106
|
# This is true if the IP address belongs to a hosting or VPN provider (see
|
95
107
|
# description of the anonymous_vpn? property). This property is only
|
96
|
-
# available from
|
108
|
+
# available from Insights.
|
97
109
|
#
|
98
110
|
# @return [Boolean]
|
99
111
|
def hosting_provider?
|
@@ -102,7 +114,7 @@ module MaxMind
|
|
102
114
|
|
103
115
|
# This attribute is true if MaxMind believes this IP address to be a
|
104
116
|
# legitimate proxy, such as an internal VPN used by a corporation. This
|
105
|
-
# attribute is only available in the
|
117
|
+
# attribute is only available in the Enterprise database.
|
106
118
|
#
|
107
119
|
# @return [Boolean]
|
108
120
|
def legitimate_proxy?
|
@@ -112,8 +124,8 @@ module MaxMind
|
|
112
124
|
# The {https://en.wikipedia.org/wiki/Mobile_country_code mobile country
|
113
125
|
# code (MCC)} associated with the IP address and ISP.
|
114
126
|
#
|
115
|
-
# This attribute is only available from the City and Insights web
|
116
|
-
# and the
|
127
|
+
# This attribute is only available from the City Plus and Insights web
|
128
|
+
# services and the Enterprise database.
|
117
129
|
#
|
118
130
|
# @return [String, nil]
|
119
131
|
def mobile_country_code
|
@@ -123,8 +135,8 @@ module MaxMind
|
|
123
135
|
# The {https://en.wikipedia.org/wiki/Mobile_country_code mobile network
|
124
136
|
# code (MNC)} associated with the IP address and ISP.
|
125
137
|
#
|
126
|
-
# This attribute is only available from the City and Insights web
|
127
|
-
# and the
|
138
|
+
# This attribute is only available from the City Plus and Insights web
|
139
|
+
# services and the Enterprise database.
|
128
140
|
#
|
129
141
|
# @return [String, nil]
|
130
142
|
def mobile_network_code
|
@@ -132,7 +144,7 @@ module MaxMind
|
|
132
144
|
end
|
133
145
|
|
134
146
|
# This is true if the IP address belongs to a public proxy. This property
|
135
|
-
# is only available from
|
147
|
+
# is only available from Insights.
|
136
148
|
#
|
137
149
|
# @return [Boolean]
|
138
150
|
def public_proxy?
|
@@ -141,7 +153,7 @@ module MaxMind
|
|
141
153
|
|
142
154
|
# This is true if the IP address is on a suspected anonymizing network
|
143
155
|
# and belongs to a residential ISP. This property is only available
|
144
|
-
# from
|
156
|
+
# from Insights.
|
145
157
|
#
|
146
158
|
# @return [Boolean]
|
147
159
|
def residential_proxy?
|
@@ -149,7 +161,7 @@ module MaxMind
|
|
149
161
|
end
|
150
162
|
|
151
163
|
# This is true if the IP address is a Tor exit node. This property is only
|
152
|
-
# available from
|
164
|
+
# available from Insights.
|
153
165
|
#
|
154
166
|
# @return [Boolean]
|
155
167
|
def tor_exit_node?
|
@@ -157,7 +169,7 @@ module MaxMind
|
|
157
169
|
end
|
158
170
|
|
159
171
|
# The name of the ISP associated with the IP address. This attribute is
|
160
|
-
# only available from the City and Insights web services and the
|
172
|
+
# only available from the City Plus and Insights web services and the
|
161
173
|
# Enterprise database.
|
162
174
|
#
|
163
175
|
# @return [String, nil]
|
@@ -175,8 +187,8 @@ module MaxMind
|
|
175
187
|
end
|
176
188
|
|
177
189
|
# The name of the organization associated with the IP address. This
|
178
|
-
# attribute is only available from the City and Insights web services
|
179
|
-
# the
|
190
|
+
# attribute is only available from the City Plus and Insights web services
|
191
|
+
# and the Enterprise database.
|
180
192
|
#
|
181
193
|
# @return [String, nil]
|
182
194
|
def organization
|
@@ -184,7 +196,7 @@ module MaxMind
|
|
184
196
|
end
|
185
197
|
|
186
198
|
# An indicator of how static or dynamic an IP address is. This property is
|
187
|
-
# only available from
|
199
|
+
# only available from Insights.
|
188
200
|
#
|
189
201
|
# @return [Float, nil]
|
190
202
|
def static_ip_score
|
@@ -193,8 +205,7 @@ module MaxMind
|
|
193
205
|
|
194
206
|
# The estimated number of users sharing the IP/network during the past 24
|
195
207
|
# hours. For IPv4, the count is for the individual IP. For IPv6, the count
|
196
|
-
# is for the /64 network. This property is only available from
|
197
|
-
# Precision Insights.
|
208
|
+
# is for the /64 network. This property is only available from Insights.
|
198
209
|
#
|
199
210
|
# @return [Integer, nil]
|
200
211
|
def user_count
|
@@ -208,6 +219,7 @@ module MaxMind
|
|
208
219
|
# * cafe
|
209
220
|
# * cellular
|
210
221
|
# * college
|
222
|
+
# * consumer_privacy_network
|
211
223
|
# * content_delivery_network
|
212
224
|
# * dialup
|
213
225
|
# * government
|
@@ -221,7 +233,7 @@ module MaxMind
|
|
221
233
|
# * traveler
|
222
234
|
#
|
223
235
|
# This attribute is only available from the Insights web service and the
|
224
|
-
#
|
236
|
+
# Enterprise database.
|
225
237
|
#
|
226
238
|
# @return [String, nil]
|
227
239
|
def user_type
|
data/maxmind-geoip2.gemspec
CHANGED
@@ -1,11 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
|
6
|
+
require 'maxmind/geoip2/version'
|
7
|
+
|
3
8
|
Gem::Specification.new do |s|
|
4
9
|
s.authors = ['William Storey']
|
5
10
|
s.files = Dir['**/*']
|
6
11
|
s.name = 'maxmind-geoip2'
|
7
12
|
s.summary = 'A gem for interacting with the GeoIP2 webservices and databases.'
|
8
|
-
s.version =
|
13
|
+
s.version = MaxMind::GeoIP2::VERSION
|
9
14
|
|
10
15
|
s.description = 'A gem for interacting with the GeoIP2 webservices and databases. MaxMind provides geolocation data as downloadable databases as well as through a webservice.'
|
11
16
|
s.email = 'support@maxmind.com'
|
@@ -23,7 +28,7 @@ Gem::Specification.new do |s|
|
|
23
28
|
|
24
29
|
s.add_runtime_dependency 'connection_pool', ['~> 2.2']
|
25
30
|
s.add_runtime_dependency 'http', '>= 4.3', '< 6.0'
|
26
|
-
s.add_runtime_dependency 'maxmind-db', ['~> 1.
|
31
|
+
s.add_runtime_dependency 'maxmind-db', ['~> 1.2']
|
27
32
|
|
28
33
|
s.add_development_dependency 'minitest'
|
29
34
|
s.add_development_dependency 'rake'
|
@@ -0,0 +1,68 @@
|
|
1
|
+
// write-test-data generates test mmdb files.
|
2
|
+
package main
|
3
|
+
|
4
|
+
import (
|
5
|
+
"flag"
|
6
|
+
"fmt"
|
7
|
+
"os"
|
8
|
+
|
9
|
+
"github.com/maxmind/MaxMind-DB/pkg/writer"
|
10
|
+
)
|
11
|
+
|
12
|
+
func main() {
|
13
|
+
source := flag.String("source", "", "Source data directory")
|
14
|
+
target := flag.String("target", "", "Destination directory for the generated mmdb files")
|
15
|
+
|
16
|
+
flag.Parse()
|
17
|
+
|
18
|
+
w, err := writer.New(*source, *target)
|
19
|
+
if err != nil {
|
20
|
+
fmt.Printf("creating writer: %+v\n", err)
|
21
|
+
os.Exit(1)
|
22
|
+
}
|
23
|
+
|
24
|
+
if err := w.WriteIPv4TestDB(); err != nil {
|
25
|
+
fmt.Printf("writing IPv4 test databases: %+v\n", err)
|
26
|
+
os.Exit(1)
|
27
|
+
}
|
28
|
+
|
29
|
+
if err := w.WriteIPv6TestDB(); err != nil {
|
30
|
+
fmt.Printf("writing IPv6 test databases: %+v\n", err)
|
31
|
+
os.Exit(1)
|
32
|
+
}
|
33
|
+
|
34
|
+
if err := w.WriteMixedIPTestDB(); err != nil {
|
35
|
+
fmt.Printf("writing IPv6 test databases: %+v\n", err)
|
36
|
+
os.Exit(1)
|
37
|
+
}
|
38
|
+
|
39
|
+
if err := w.WriteNoIPv4TestDB(); err != nil {
|
40
|
+
fmt.Printf("writing no IPv4 test databases: %+v\n", err)
|
41
|
+
os.Exit(1)
|
42
|
+
}
|
43
|
+
|
44
|
+
if err := w.WriteNoMapTestDB(); err != nil {
|
45
|
+
fmt.Printf("writing no map test databases: %+v\n", err)
|
46
|
+
os.Exit(1)
|
47
|
+
}
|
48
|
+
|
49
|
+
if err := w.WriteMetadataPointersTestDB(); err != nil {
|
50
|
+
fmt.Printf("writing metadata pointers test databases: %+v\n", err)
|
51
|
+
os.Exit(1)
|
52
|
+
}
|
53
|
+
|
54
|
+
if err := w.WriteDecoderTestDB(); err != nil {
|
55
|
+
fmt.Printf("writing decoder test databases: %+v\n", err)
|
56
|
+
os.Exit(1)
|
57
|
+
}
|
58
|
+
|
59
|
+
if err := w.WriteDeeplyNestedStructuresTestDB(); err != nil {
|
60
|
+
fmt.Printf("writing decoder test databases: %+v\n", err)
|
61
|
+
os.Exit(1)
|
62
|
+
}
|
63
|
+
|
64
|
+
if err := w.WriteGeoIP2TestDB(); err != nil {
|
65
|
+
fmt.Printf("writing GeoIP2 test databases: %+v\n", err)
|
66
|
+
os.Exit(1)
|
67
|
+
}
|
68
|
+
}
|
data/test/data/go.mod
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
module github.com/maxmind/MaxMind-DB
|
2
|
+
|
3
|
+
go 1.21
|
4
|
+
|
5
|
+
require (
|
6
|
+
github.com/maxmind/mmdbwriter v1.0.0
|
7
|
+
go4.org/netipx v0.0.0-20230824141953-6213f710f925
|
8
|
+
)
|
9
|
+
|
10
|
+
require (
|
11
|
+
github.com/oschwald/maxminddb-golang v1.12.0 // indirect
|
12
|
+
golang.org/x/sys v0.10.0 // indirect
|
13
|
+
)
|
data/test/data/go.sum
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
2
|
+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
3
|
+
github.com/maxmind/mmdbwriter v1.0.0 h1:bieL4P6yaYaHvbtLSwnKtEvScUKKD6jcKaLiTM3WSMw=
|
4
|
+
github.com/maxmind/mmdbwriter v1.0.0/go.mod h1:noBMCUtyN5PUQ4H8ikkOvGSHhzhLok51fON2hcrpKj8=
|
5
|
+
github.com/oschwald/maxminddb-golang v1.12.0 h1:9FnTOD0YOhP7DGxGsq4glzpGy5+w7pq50AS6wALUMYs=
|
6
|
+
github.com/oschwald/maxminddb-golang v1.12.0/go.mod h1:q0Nob5lTCqyQ8WT6FYgS1L7PXKVVbgiymefNwIjPzgY=
|
7
|
+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
8
|
+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
9
|
+
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
10
|
+
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
11
|
+
go4.org/netipx v0.0.0-20230824141953-6213f710f925 h1:eeQDDVKFkx0g4Hyy8pHgmZaK0EqB4SD6rvKbUdN3ziQ=
|
12
|
+
go4.org/netipx v0.0.0-20230824141953-6213f710f925/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y=
|
13
|
+
golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA=
|
14
|
+
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
15
|
+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
16
|
+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
data/test/data/perltidyrc
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
--blank-lines-before-packages=0
|
2
2
|
--iterations=2
|
3
3
|
--no-outdent-long-comments
|
4
|
+
--weld-nested-containers
|
4
5
|
-b
|
5
6
|
-bar
|
6
7
|
-boc
|
@@ -10,3 +11,8 @@
|
|
10
11
|
-nolq
|
11
12
|
-se
|
12
13
|
-wbb="% + - * / x != == >= <= =~ !~ < > | & >= < = **= += *= &= <<= &&= -= /= |= >>= ||= .= %= ^= x="
|
14
|
+
--character-encoding=utf8
|
15
|
+
--valign-exclusion-list="q"
|
16
|
+
--want-trailing-commas=m
|
17
|
+
--add-trailing-commas
|
18
|
+
--delete-repeated-commas
|