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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/README.md +10 -5
  4. data/lib/maxmind/geoip2/client.rb +18 -9
  5. data/lib/maxmind/geoip2/model/city.rb +4 -5
  6. data/lib/maxmind/geoip2/model/connection_type.rb +3 -2
  7. data/lib/maxmind/geoip2/model/enterprise.rb +2 -3
  8. data/lib/maxmind/geoip2/model/insights.rb +3 -5
  9. data/lib/maxmind/geoip2/record/traits.rb +39 -27
  10. data/lib/maxmind/geoip2/version.rb +8 -0
  11. data/maxmind-geoip2.gemspec +7 -2
  12. data/test/data/cmd/write-test-data/main.go +68 -0
  13. data/test/data/go.mod +13 -0
  14. data/test/data/go.sum +16 -0
  15. data/test/data/perltidyrc +6 -0
  16. data/test/data/pkg/writer/decoder.go +178 -0
  17. data/test/data/pkg/writer/geoip2.go +182 -0
  18. data/test/data/pkg/writer/ip.go +39 -0
  19. data/test/data/pkg/writer/maxmind.go +245 -0
  20. data/test/data/pkg/writer/nestedstructures.go +73 -0
  21. data/test/data/pkg/writer/writer.go +58 -0
  22. data/test/data/source-data/GeoIP2-City-Test.json +322 -1
  23. data/test/data/source-data/GeoIP2-Connection-Type-Test.json +15 -10
  24. data/test/data/source-data/GeoIP2-Country-Test.json +99 -0
  25. data/test/data/source-data/GeoIP2-Domain-Test.json +5 -0
  26. data/test/data/source-data/GeoIP2-Enterprise-Test.json +347 -1
  27. data/test/data/source-data/GeoIP2-Precision-Enterprise-Sandbox-Test.json +296 -0
  28. data/test/data/source-data/GeoIP2-Precision-Enterprise-Test.json +412 -2
  29. data/test/data/source-data/GeoIP2-Static-IP-Score-Test.json +15 -0
  30. data/test/data/source-data/GeoIP2-User-Count-Test.json +18 -0
  31. data/test/data/source-data/GeoLite2-City-Test.json +168 -0
  32. data/test/data/source-data/GeoLite2-Country-Test.json +92 -0
  33. data/test/data/test-data/GeoIP2-Anonymous-IP-Test.mmdb +0 -0
  34. data/test/data/test-data/GeoIP2-City-Test-Broken-Double-Format.mmdb +0 -0
  35. data/test/data/test-data/GeoIP2-City-Test-Invalid-Node-Count.mmdb +0 -0
  36. data/test/data/test-data/GeoIP2-City-Test.mmdb +0 -0
  37. data/test/data/test-data/GeoIP2-Connection-Type-Test.mmdb +0 -0
  38. data/test/data/test-data/GeoIP2-Country-Test.mmdb +0 -0
  39. data/test/data/test-data/GeoIP2-DensityIncome-Test.mmdb +0 -0
  40. data/test/data/test-data/GeoIP2-Domain-Test.mmdb +0 -0
  41. data/test/data/test-data/GeoIP2-Enterprise-Test.mmdb +0 -0
  42. data/test/data/test-data/GeoIP2-ISP-Test.mmdb +0 -0
  43. data/test/data/test-data/GeoIP2-Precision-Enterprise-Test.mmdb +0 -0
  44. data/test/data/test-data/GeoIP2-Static-IP-Score-Test.mmdb +0 -0
  45. data/test/data/test-data/GeoIP2-User-Count-Test.mmdb +0 -0
  46. data/test/data/test-data/GeoLite2-ASN-Test.mmdb +0 -0
  47. data/test/data/test-data/GeoLite2-City-Test.mmdb +0 -0
  48. data/test/data/test-data/GeoLite2-Country-Test.mmdb +0 -0
  49. data/test/data/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb +0 -0
  50. data/test/data/test-data/MaxMind-DB-string-value-entries.mmdb +0 -0
  51. data/test/data/test-data/MaxMind-DB-test-broken-pointers-24.mmdb +0 -0
  52. data/test/data/test-data/MaxMind-DB-test-broken-search-tree-24.mmdb +0 -0
  53. data/test/data/test-data/MaxMind-DB-test-decoder.mmdb +0 -0
  54. data/test/data/test-data/MaxMind-DB-test-ipv4-24.mmdb +0 -0
  55. data/test/data/test-data/MaxMind-DB-test-ipv4-28.mmdb +0 -0
  56. data/test/data/test-data/MaxMind-DB-test-ipv4-32.mmdb +0 -0
  57. data/test/data/test-data/MaxMind-DB-test-ipv6-24.mmdb +0 -0
  58. data/test/data/test-data/MaxMind-DB-test-ipv6-28.mmdb +0 -0
  59. data/test/data/test-data/MaxMind-DB-test-ipv6-32.mmdb +0 -0
  60. data/test/data/test-data/MaxMind-DB-test-metadata-pointers.mmdb +0 -0
  61. data/test/data/test-data/MaxMind-DB-test-mixed-24.mmdb +0 -0
  62. data/test/data/test-data/MaxMind-DB-test-mixed-28.mmdb +0 -0
  63. data/test/data/test-data/MaxMind-DB-test-mixed-32.mmdb +0 -0
  64. data/test/data/test-data/MaxMind-DB-test-nested.mmdb +0 -0
  65. data/test/data/test-data/MaxMind-DB-test-pointer-decoder.mmdb +0 -0
  66. data/test/data/test-data/README.md +28 -12
  67. data/test/test_client.rb +18 -2
  68. data/test/test_reader.rb +19 -1
  69. metadata +16 -7
  70. data/test/data/source-data/README +0 -15
  71. data/test/data/test-data/write-test-data.pl +0 -695
@@ -0,0 +1,58 @@
1
+ // Package writer defines database writers responsible
2
+ // for generating test mmdb files.
3
+ package writer
4
+
5
+ import (
6
+ "fmt"
7
+ "os"
8
+ "path/filepath"
9
+
10
+ "github.com/maxmind/mmdbwriter"
11
+ )
12
+
13
+ var ipSample = []string{
14
+ "::1.1.1.0/120",
15
+ "::2.2.0.0/112",
16
+ "::3.0.0.0/104",
17
+ "::4.5.6.7/128",
18
+ "abcd::/64",
19
+ "1000::1234:0000/112",
20
+ }
21
+
22
+ // Writer is responsible for writing test mmdb databases
23
+ // based on the provided data sources.
24
+ type Writer struct {
25
+ source string
26
+ target string
27
+ }
28
+
29
+ // New initializes a new test database writer struct.
30
+ func New(source, target string) (*Writer, error) {
31
+ s := filepath.Clean(source)
32
+ if _, err := os.Stat(s); os.IsNotExist(err) {
33
+ return nil, fmt.Errorf("source directory does not exist: %w", err)
34
+ }
35
+
36
+ t := filepath.Clean(target)
37
+ if err := os.MkdirAll(t, os.ModePerm); err != nil {
38
+ return nil, fmt.Errorf("creating target directory: %w", err)
39
+ }
40
+
41
+ return &Writer{
42
+ source: s,
43
+ target: t,
44
+ }, nil
45
+ }
46
+
47
+ func (w *Writer) write(dbWriter *mmdbwriter.Tree, fileName string) error {
48
+ outputFile, err := os.Create(filepath.Clean(filepath.Join(w.target, fileName)))
49
+ if err != nil {
50
+ return fmt.Errorf("creating mmdb file: %w", err)
51
+ }
52
+ defer outputFile.Close()
53
+
54
+ if _, err := dbWriter.WriteTo(outputFile); err != nil {
55
+ return fmt.Errorf("writing mmdb file: %w", err)
56
+ }
57
+ return nil
58
+ }
@@ -103,6 +103,160 @@
103
103
  }
104
104
  }
105
105
  },
106
+ {
107
+ "::214.0.0.0/120" : {
108
+ "city" : {
109
+ "geoname_id" : 1880252,
110
+ "names" : {
111
+ "de" : "Singapur",
112
+ "en" : "Singapore",
113
+ "es" : "Singapur",
114
+ "fr" : "Singapour",
115
+ "ja" : "シンガポール",
116
+ "pt-BR" : "Singapura",
117
+ "ru" : "Сингапур",
118
+ "zh-CN" : "新加坡"
119
+ }
120
+ },
121
+ "continent" : {
122
+ "code" : "AS",
123
+ "geoname_id" : 6255147,
124
+ "names" : {
125
+ "de" : "Asien",
126
+ "en" : "Asia",
127
+ "es" : "Asia",
128
+ "fr" : "Asie",
129
+ "ja" : "アジア",
130
+ "pt-BR" : "Ásia",
131
+ "ru" : "Азия",
132
+ "zh-CN" : "亚洲"
133
+ }
134
+ },
135
+ "country" : {
136
+ "geoname_id" : 1880251,
137
+ "iso_code" : "SG",
138
+ "names" : {
139
+ "de" : "Singapur",
140
+ "en" : "Singapore",
141
+ "es" : "Singapur",
142
+ "fr" : "Singapour",
143
+ "ja" : "シンガポール",
144
+ "pt-BR" : "Singapura",
145
+ "ru" : "Сингапур",
146
+ "zh-CN" : "新加坡"
147
+ }
148
+ },
149
+ "location" : {
150
+ "accuracy_radius" : 10,
151
+ "latitude" : 1.336,
152
+ "longitude" : 103.7716,
153
+ "time_zone" : "Asia/Singapore"
154
+ },
155
+ "postal" : {
156
+ "code" : "59"
157
+ },
158
+ "registered_country" : {
159
+ "geoname_id" : 1880251,
160
+ "iso_code" : "SG",
161
+ "names" : {
162
+ "de" : "Singapur",
163
+ "en" : "Singapore",
164
+ "es" : "Singapur",
165
+ "fr" : "Singapour",
166
+ "ja" : "シンガポール",
167
+ "pt-BR" : "Singapura",
168
+ "ru" : "Сингапур",
169
+ "zh-CN" : "新加坡"
170
+ }
171
+ }
172
+ }
173
+ },
174
+ {
175
+ "::214.0.1.0/120" : {
176
+ "city" : {
177
+ "geoname_id" : 2158177,
178
+ "names" : {
179
+ "de" : "Melbourne",
180
+ "en" : "Melbourne",
181
+ "es" : "Melbourne",
182
+ "fr" : "Melbourne",
183
+ "ja" : "メルボルン",
184
+ "pt-BR" : "Melbourne",
185
+ "ru" : "Мельбурн",
186
+ "zh-CN" : "墨尔本"
187
+ }
188
+ },
189
+ "continent" : {
190
+ "code" : "OC",
191
+ "geoname_id" : 6255151,
192
+ "names" : {
193
+ "de" : "Ozeanien",
194
+ "en" : "Oceania",
195
+ "es" : "Oceanía",
196
+ "fr" : "Océanie",
197
+ "ja" : "オセアニア",
198
+ "pt-BR" : "Oceania",
199
+ "ru" : "Океания",
200
+ "zh-CN" : "大洋洲"
201
+ }
202
+ },
203
+ "country" : {
204
+ "geoname_id" : 2077456,
205
+ "iso_code" : "AU",
206
+ "names" : {
207
+ "de" : "Australien",
208
+ "en" : "Australia",
209
+ "es" : "Australia",
210
+ "fr" : "Australie",
211
+ "ja" : "オーストラリア",
212
+ "pt-BR" : "Austrália",
213
+ "ru" : "Австралия",
214
+ "zh-CN" : "澳大利亚"
215
+ }
216
+ },
217
+ "location" : {
218
+ "accuracy_radius" : 20,
219
+ "latitude" : -37.8159,
220
+ "longitude" : 144.9669,
221
+ "time_zone" : "Australia/Melbourne"
222
+ },
223
+ "postal" : {
224
+ "code" : "3000"
225
+ },
226
+ "registered_country" : {
227
+ "geoname_id" : 2077456,
228
+ "iso_code" : "AU",
229
+ "names" : {
230
+ "de" : "Australien",
231
+ "en" : "Australia",
232
+ "es" : "Australia",
233
+ "fr" : "Australie",
234
+ "ja" : "オーストラリア",
235
+ "pt-BR" : "Austrália",
236
+ "ru" : "Австралия",
237
+ "zh-CN" : "澳大利亚"
238
+ }
239
+ },
240
+ "subdivisions" : [
241
+ {
242
+ "geoname_id" : 2145234,
243
+ "iso_code" : "VIC",
244
+ "names" : {
245
+ "en" : "Victoria",
246
+ "pt-BR" : "Vitória",
247
+ "ru" : "Виктория"
248
+ }
249
+ }
250
+ ]
251
+ }
252
+ },
253
+ {
254
+ "214.1.1.0/24" : {
255
+ "traits": {
256
+ "is_anycast": true
257
+ }
258
+ }
259
+ },
106
260
  {
107
261
  "2001:230::/32" : {
108
262
  "continent" : {
@@ -12422,7 +12576,6 @@
12422
12576
  }
12423
12577
  },
12424
12578
  "country" : {
12425
- "confidence" : 99,
12426
12579
  "geoname_id" : 6252001,
12427
12580
  "iso_code" : "US",
12428
12581
  "names" : {
@@ -12881,5 +13034,173 @@
12881
13034
  }
12882
13035
  ]
12883
13036
  }
13037
+ },
13038
+ {
13039
+ "214.78.120.0/22" : {
13040
+ "city" : {
13041
+ "geoname_id" : 5391811,
13042
+ "names" : {
13043
+ "de" : "San Diego",
13044
+ "en" : "San Diego",
13045
+ "es" : "San Diego",
13046
+ "fr" : "San Diego",
13047
+ "ja" : "サンディエゴ",
13048
+ "pt-BR" : "San Diego",
13049
+ "ru" : "Сан-Диего"
13050
+ }
13051
+ },
13052
+ "continent" : {
13053
+ "code" : "NA",
13054
+ "geoname_id" : 6255149,
13055
+ "names" : {
13056
+ "de" : "Nordamerika",
13057
+ "en" : "North America",
13058
+ "es" : "Norteamérica",
13059
+ "fr" : "Amérique du Nord",
13060
+ "ja" : "北アメリカ",
13061
+ "pt-BR" : "América do Norte",
13062
+ "ru" : "Северная Америка",
13063
+ "zh-CN" : "北美洲"
13064
+ }
13065
+ },
13066
+ "country" : {
13067
+ "geoname_id" : 6252001,
13068
+ "iso_code" : "US",
13069
+ "names" : {
13070
+ "de" : "Vereinigte Staaten",
13071
+ "en" : "United States",
13072
+ "es" : "Estados Unidos",
13073
+ "fr" : "États Unis",
13074
+ "ja" : "アメリカ",
13075
+ "pt-BR" : "EUA",
13076
+ "ru" : "США",
13077
+ "zh-CN" : "美国"
13078
+ }
13079
+ },
13080
+ "location" : {
13081
+ "accuracy_radius" : 100,
13082
+ "latitude" : 32.7405,
13083
+ "longitude" : -117.0935,
13084
+ "metro_code" : 825,
13085
+ "time_zone" : "America/Los_Angeles"
13086
+ },
13087
+ "postal" : {
13088
+ "code" : "92105"
13089
+ },
13090
+ "registered_country" : {
13091
+ "geoname_id" : 6252001,
13092
+ "iso_code" : "US",
13093
+ "names" : {
13094
+ "de" : "Vereinigte Staaten",
13095
+ "en" : "United States",
13096
+ "es" : "Estados Unidos",
13097
+ "fr" : "États Unis",
13098
+ "ja" : "アメリカ",
13099
+ "pt-BR" : "EUA",
13100
+ "ru" : "США",
13101
+ "zh-CN" : "美国"
13102
+ }
13103
+ },
13104
+ "subdivisions" : [
13105
+ {
13106
+ "geoname_id" : 5332921,
13107
+ "iso_code" : "CA",
13108
+ "names" : {
13109
+ "de" : "Kalifornien",
13110
+ "en" : "California",
13111
+ "es" : "California",
13112
+ "fr" : "Californie",
13113
+ "ja" : "カリフォルニア州",
13114
+ "pt-BR" : "Califórnia",
13115
+ "ru" : "Калифорния",
13116
+ "zh-CN" : "加州"
13117
+ }
13118
+ }
13119
+ ]
13120
+ }
13121
+ },
13122
+ {
13123
+ "2001:480:10::/48" : {
13124
+ "city" : {
13125
+ "geoname_id" : 5391811,
13126
+ "names" : {
13127
+ "de" : "San Diego",
13128
+ "en" : "San Diego",
13129
+ "es" : "San Diego",
13130
+ "fr" : "San Diego",
13131
+ "ja" : "サンディエゴ",
13132
+ "pt-BR" : "San Diego",
13133
+ "ru" : "Сан-Диего"
13134
+ }
13135
+ },
13136
+ "continent" : {
13137
+ "code" : "NA",
13138
+ "geoname_id" : 6255149,
13139
+ "names" : {
13140
+ "de" : "Nordamerika",
13141
+ "en" : "North America",
13142
+ "es" : "Norteamérica",
13143
+ "fr" : "Amérique du Nord",
13144
+ "ja" : "北アメリカ",
13145
+ "pt-BR" : "América do Norte",
13146
+ "ru" : "Северная Америка",
13147
+ "zh-CN" : "北美洲"
13148
+ }
13149
+ },
13150
+ "country" : {
13151
+ "geoname_id" : 6252001,
13152
+ "iso_code" : "US",
13153
+ "names" : {
13154
+ "de" : "Vereinigte Staaten",
13155
+ "en" : "United States",
13156
+ "es" : "Estados Unidos",
13157
+ "fr" : "États Unis",
13158
+ "ja" : "アメリカ",
13159
+ "pt-BR" : "EUA",
13160
+ "ru" : "США",
13161
+ "zh-CN" : "美国"
13162
+ }
13163
+ },
13164
+ "location" : {
13165
+ "accuracy_radius" : 20,
13166
+ "latitude" : 32.7203,
13167
+ "longitude" : -117.1552,
13168
+ "metro_code" : 825,
13169
+ "time_zone" : "America/Los_Angeles"
13170
+ },
13171
+ "postal" : {
13172
+ "code" : "92101"
13173
+ },
13174
+ "registered_country" : {
13175
+ "geoname_id" : 6252001,
13176
+ "iso_code" : "US",
13177
+ "names" : {
13178
+ "de" : "Vereinigte Staaten",
13179
+ "en" : "United States",
13180
+ "es" : "Estados Unidos",
13181
+ "fr" : "États Unis",
13182
+ "ja" : "アメリカ",
13183
+ "pt-BR" : "EUA",
13184
+ "ru" : "США",
13185
+ "zh-CN" : "美国"
13186
+ }
13187
+ },
13188
+ "subdivisions" : [
13189
+ {
13190
+ "geoname_id" : 5332921,
13191
+ "iso_code" : "CA",
13192
+ "names" : {
13193
+ "de" : "Kalifornien",
13194
+ "en" : "California",
13195
+ "es" : "California",
13196
+ "fr" : "Californie",
13197
+ "ja" : "カリフォルニア州",
13198
+ "pt-BR" : "Califórnia",
13199
+ "ru" : "Калифорния",
13200
+ "zh-CN" : "加州"
13201
+ }
13202
+ }
13203
+ ]
13204
+ }
12884
13205
  }
12885
13206
  ]
@@ -1,47 +1,47 @@
1
1
  [
2
2
  {
3
3
  "::1.0.0.0/120" : {
4
- "connection_type" : "Dialup"
4
+ "connection_type" : "Cable/DSL"
5
5
  }
6
6
  },
7
7
  {
8
8
  "::1.0.1.0/120" : {
9
- "connection_type" : "Cable/DSL"
9
+ "connection_type" : "Cellular"
10
10
  }
11
11
  },
12
12
  {
13
13
  "::1.0.2.0/119" : {
14
- "connection_type" : "Dialup"
14
+ "connection_type" : "Cable/DSL"
15
15
  }
16
16
  },
17
17
  {
18
18
  "::1.0.4.0/118" : {
19
- "connection_type" : "Dialup"
19
+ "connection_type" : "Cable/DSL"
20
20
  }
21
21
  },
22
22
  {
23
23
  "::1.0.8.0/117" : {
24
- "connection_type" : "Dialup"
24
+ "connection_type" : "Cable/DSL"
25
25
  }
26
26
  },
27
27
  {
28
28
  "::1.0.16.0/116" : {
29
- "connection_type" : "Dialup"
29
+ "connection_type" : "Cable/DSL"
30
30
  }
31
31
  },
32
32
  {
33
33
  "::1.0.32.0/115" : {
34
- "connection_type" : "Dialup"
34
+ "connection_type" : "Cable/DSL"
35
35
  }
36
36
  },
37
37
  {
38
38
  "::1.0.64.0/114" : {
39
- "connection_type" : "Dialup"
39
+ "connection_type" : "Cable/DSL"
40
40
  }
41
41
  },
42
42
  {
43
43
  "::1.0.128.0/113" : {
44
- "connection_type" : "Dialup"
44
+ "connection_type" : "Cable/DSL"
45
45
  }
46
46
  },
47
47
  {
@@ -91,7 +91,7 @@
91
91
  },
92
92
  {
93
93
  "::175.16.199.0/120" : {
94
- "connection_type" : "Dialup"
94
+ "connection_type" : "Cable/DSL"
95
95
  }
96
96
  },
97
97
  {
@@ -109,6 +109,11 @@
109
109
  "connection_type" : "Cellular"
110
110
  }
111
111
  },
112
+ {
113
+ "::214.78.120.0/118" : {
114
+ "connection_type" : "Satellite"
115
+ }
116
+ },
112
117
  {
113
118
  "::216.160.83.56/125" : {
114
119
  "connection_type" : "Corporate"
@@ -15900,5 +15900,104 @@
15900
15900
  }
15901
15901
  }
15902
15902
  }
15903
+ },
15904
+ {
15905
+ "214.1.1.0/24" : {
15906
+ "traits": {
15907
+ "is_anycast": true
15908
+ }
15909
+ }
15910
+ },
15911
+ {
15912
+ "214.78.120.0/22" : {
15913
+ "continent" : {
15914
+ "code" : "NA",
15915
+ "geoname_id" : 6255149,
15916
+ "names" : {
15917
+ "de" : "Nordamerika",
15918
+ "en" : "North America",
15919
+ "es" : "Norteamérica",
15920
+ "fr" : "Amérique du Nord",
15921
+ "ja" : "北アメリカ",
15922
+ "pt-BR" : "América do Norte",
15923
+ "ru" : "Северная Америка",
15924
+ "zh-CN" : "北美洲"
15925
+ }
15926
+ },
15927
+ "country" : {
15928
+ "geoname_id" : 6252001,
15929
+ "iso_code" : "US",
15930
+ "names" : {
15931
+ "de" : "Vereinigte Staaten",
15932
+ "en" : "United States",
15933
+ "es" : "Estados Unidos",
15934
+ "fr" : "États Unis",
15935
+ "ja" : "アメリカ",
15936
+ "pt-BR" : "EUA",
15937
+ "ru" : "США",
15938
+ "zh-CN" : "美国"
15939
+ }
15940
+ },
15941
+ "registered_country" : {
15942
+ "geoname_id" : 6252001,
15943
+ "iso_code" : "US",
15944
+ "names" : {
15945
+ "de" : "Vereinigte Staaten",
15946
+ "en" : "United States",
15947
+ "es" : "Estados Unidos",
15948
+ "fr" : "États Unis",
15949
+ "ja" : "アメリカ",
15950
+ "pt-BR" : "EUA",
15951
+ "ru" : "США",
15952
+ "zh-CN" : "美国"
15953
+ }
15954
+ }
15955
+ }
15956
+ },
15957
+ {
15958
+ "2001:480:10::/48" : {
15959
+ "continent" : {
15960
+ "code" : "NA",
15961
+ "geoname_id" : 6255149,
15962
+ "names" : {
15963
+ "de" : "Nordamerika",
15964
+ "en" : "North America",
15965
+ "es" : "Norteamérica",
15966
+ "fr" : "Amérique du Nord",
15967
+ "ja" : "北アメリカ",
15968
+ "pt-BR" : "América do Norte",
15969
+ "ru" : "Северная Америка",
15970
+ "zh-CN" : "北美洲"
15971
+ }
15972
+ },
15973
+ "country" : {
15974
+ "geoname_id" : 6252001,
15975
+ "iso_code" : "US",
15976
+ "names" : {
15977
+ "de" : "Vereinigte Staaten",
15978
+ "en" : "United States",
15979
+ "es" : "Estados Unidos",
15980
+ "fr" : "États Unis",
15981
+ "ja" : "アメリカ",
15982
+ "pt-BR" : "EUA",
15983
+ "ru" : "США",
15984
+ "zh-CN" : "美国"
15985
+ }
15986
+ },
15987
+ "registered_country" : {
15988
+ "geoname_id" : 6252001,
15989
+ "iso_code" : "US",
15990
+ "names" : {
15991
+ "de" : "Vereinigte Staaten",
15992
+ "en" : "United States",
15993
+ "es" : "Estados Unidos",
15994
+ "fr" : "États Unis",
15995
+ "ja" : "アメリカ",
15996
+ "pt-BR" : "EUA",
15997
+ "ru" : "США",
15998
+ "zh-CN" : "美国"
15999
+ }
16000
+ }
16001
+ }
15903
16002
  }
15904
16003
  ]
@@ -74,6 +74,11 @@
74
74
  "domain" : "comcastbusiness.net"
75
75
  }
76
76
  },
77
+ {
78
+ "::214.78.120.0/118" : {
79
+ "domain" : "starlinkisp.net"
80
+ }
81
+ },
77
82
  {
78
83
  "::222.230.136.0/118" : {
79
84
  "domain" : "gol.ne.jp"