whois 5.0.1 → 5.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +26 -0
- data/.rubocop_opinionated.yml +157 -0
- data/.rubocop_todo.yml +242 -0
- data/.simplecov +2 -0
- data/.tool-versions +1 -0
- data/CHANGELOG.md +68 -53
- data/Gemfile +5 -0
- data/LICENSE.txt +1 -1
- data/README.md +1 -1
- data/Rakefile +12 -17
- data/bin/console +1 -0
- data/bin/whoisrb +3 -2
- data/data/ipv4.json +1 -3
- data/data/tld.json +2 -90
- data/lib/whois.rb +12 -10
- data/lib/whois/client.rb +4 -2
- data/lib/whois/errors.rb +4 -2
- data/lib/whois/record.rb +3 -1
- data/lib/whois/record/part.rb +4 -3
- data/lib/whois/server.rb +26 -21
- data/lib/whois/server/adapters/afilias.rb +4 -1
- data/lib/whois/server/adapters/arin.rb +5 -2
- data/lib/whois/server/adapters/arpa.rb +22 -19
- data/lib/whois/server/adapters/base.rb +4 -4
- data/lib/whois/server/adapters/formatted.rb +4 -2
- data/lib/whois/server/adapters/none.rb +3 -1
- data/lib/whois/server/adapters/not_implemented.rb +3 -1
- data/lib/whois/server/adapters/standard.rb +4 -2
- data/lib/whois/server/adapters/verisign.rb +4 -1
- data/lib/whois/server/adapters/web.rb +3 -1
- data/lib/whois/server/socket_handler.rb +8 -6
- data/lib/whois/version.rb +4 -2
- data/spec/integration/whois_spec.rb +6 -6
- data/spec/spec_helper.rb +4 -2
- data/spec/support/helpers/connectivity_helper.rb +2 -0
- data/spec/support/helpers/spec_helper.rb +2 -0
- data/spec/whois/client_spec.rb +6 -7
- data/spec/whois/record/part_spec.rb +4 -4
- data/spec/whois/record_spec.rb +9 -7
- data/spec/whois/server/adapters/afilias_spec.rb +3 -3
- data/spec/whois/server/adapters/arin_spec.rb +7 -8
- data/spec/whois/server/adapters/arpa_spec.rb +2 -2
- data/spec/whois/server/adapters/base_spec.rb +13 -13
- data/spec/whois/server/adapters/formatted_spec.rb +7 -7
- data/spec/whois/server/adapters/none_spec.rb +2 -2
- data/spec/whois/server/adapters/not_implemented_spec.rb +3 -3
- data/spec/whois/server/adapters/standard_spec.rb +5 -5
- data/spec/whois/server/adapters/verisign_spec.rb +3 -3
- data/spec/whois/server/adapters/web_spec.rb +3 -3
- data/spec/whois/server/socket_handler_spec.rb +7 -5
- data/spec/whois/server_spec.rb +31 -29
- data/spec/whois/{errors_spec.rb → web_interface_error_spec.rb} +4 -4
- data/spec/whois/whois_spec.rb +3 -3
- metadata +11 -8
- data/tasks/spec.rake +0 -199
data/bin/console
CHANGED
data/bin/whoisrb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
|
-
|
4
|
+
$LOAD_PATH.unshift(File.expand_path('../lib', __dir__))
|
4
5
|
|
5
6
|
require 'optparse'
|
6
7
|
require 'whois'
|
@@ -8,7 +9,7 @@ require 'whois'
|
|
8
9
|
|
9
10
|
options = {}
|
10
11
|
OptionParser.new do |opts|
|
11
|
-
opts.banner
|
12
|
+
opts.banner = "Whois: an intelligent pure Ruby WHOIS client"
|
12
13
|
opts.define_head "Usage: whoisrb [options] object"
|
13
14
|
opts.separator ""
|
14
15
|
opts.separator "Examples:"
|
data/data/ipv4.json
CHANGED
data/data/tld.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"_": {
|
3
3
|
"schema": "2",
|
4
|
-
"updated": "
|
4
|
+
"updated": "2021-03-02 11:02:00 UTC"
|
5
5
|
},
|
6
6
|
"aaa": {
|
7
7
|
"_type": "newgtld",
|
@@ -654,11 +654,6 @@
|
|
654
654
|
"bn": {
|
655
655
|
"host": "whois.bnnic.bn"
|
656
656
|
},
|
657
|
-
"bnl": {
|
658
|
-
"_group": "afiliassrs",
|
659
|
-
"_type": "newgtld",
|
660
|
-
"host": "whois.nic.bnl"
|
661
|
-
},
|
662
657
|
"bnpparibas": {
|
663
658
|
"_group": "afiliassrs",
|
664
659
|
"_type": "newgtld",
|
@@ -927,10 +922,6 @@
|
|
927
922
|
"_type": "newgtld",
|
928
923
|
"host": "whois.uniregistry.net"
|
929
924
|
},
|
930
|
-
"cartier": {
|
931
|
-
"_type": "newgtld",
|
932
|
-
"adapter": "none"
|
933
|
-
},
|
934
925
|
"casa": {
|
935
926
|
"_group": "mmregistry",
|
936
927
|
"_type": "newgtld",
|
@@ -1071,11 +1062,6 @@
|
|
1071
1062
|
"_type": "newgtld",
|
1072
1063
|
"host": "whois.nic.google"
|
1073
1064
|
},
|
1074
|
-
"chrysler": {
|
1075
|
-
"_group": "afiliassrs",
|
1076
|
-
"_type": "newgtld",
|
1077
|
-
"host": "whois.afilias-srs.net"
|
1078
|
-
},
|
1079
1065
|
"church": {
|
1080
1066
|
"_group": "donuts",
|
1081
1067
|
"_type": "newgtld",
|
@@ -1694,11 +1680,6 @@
|
|
1694
1680
|
"_type": "newgtld",
|
1695
1681
|
"host": "whois.nic.doctor"
|
1696
1682
|
},
|
1697
|
-
"dodge": {
|
1698
|
-
"_group": "afiliassrs",
|
1699
|
-
"_type": "newgtld",
|
1700
|
-
"host": "whois.afilias-srs.net"
|
1701
|
-
},
|
1702
1683
|
"dog": {
|
1703
1684
|
"_group": "donuts",
|
1704
1685
|
"_type": "newgtld",
|
@@ -1744,10 +1725,6 @@
|
|
1744
1725
|
"_type": "newgtld",
|
1745
1726
|
"host": "whois.nic.dunlop"
|
1746
1727
|
},
|
1747
|
-
"duns": {
|
1748
|
-
"_type": "newgtld",
|
1749
|
-
"adapter": "none"
|
1750
|
-
},
|
1751
1728
|
"dupont": {
|
1752
1729
|
"_type": "newgtld",
|
1753
1730
|
"adapter": "none"
|
@@ -1900,10 +1877,6 @@
|
|
1900
1877
|
"_type": "newgtld",
|
1901
1878
|
"host": "whois.nic.events"
|
1902
1879
|
},
|
1903
|
-
"everbank": {
|
1904
|
-
"_type": "newgtld",
|
1905
|
-
"host": "whois.nic.everbank"
|
1906
|
-
},
|
1907
1880
|
"exchange": {
|
1908
1881
|
"_group": "donuts",
|
1909
1882
|
"_type": "newgtld",
|
@@ -2953,10 +2926,6 @@
|
|
2953
2926
|
"is": {
|
2954
2927
|
"host": "whois.isnic.is"
|
2955
2928
|
},
|
2956
|
-
"iselect": {
|
2957
|
-
"_type": "newgtld",
|
2958
|
-
"host": "whois.nic.iselect"
|
2959
|
-
},
|
2960
2929
|
"ismaili": {
|
2961
2930
|
"_group": "afiliassrs",
|
2962
2931
|
"_type": "newgtld",
|
@@ -3226,10 +3195,6 @@
|
|
3226
3195
|
"_type": "newgtld",
|
3227
3196
|
"host": "whois.nic.lacaixa"
|
3228
3197
|
},
|
3229
|
-
"ladbrokes": {
|
3230
|
-
"_type": "newgtld",
|
3231
|
-
"host": "whois.nic.ladbrokes"
|
3232
|
-
},
|
3233
3198
|
"lamborghini": {
|
3234
3199
|
"_group": "afiliassrs",
|
3235
3200
|
"_type": "newgtld",
|
@@ -3250,10 +3215,6 @@
|
|
3250
3215
|
"_type": "newgtld",
|
3251
3216
|
"host": "whois.afilias-srs.net"
|
3252
3217
|
},
|
3253
|
-
"lancome": {
|
3254
|
-
"_type": "newgtld",
|
3255
|
-
"host": "whois.nic.lancome"
|
3256
|
-
},
|
3257
3218
|
"land": {
|
3258
3219
|
"_group": "donuts",
|
3259
3220
|
"_type": "newgtld",
|
@@ -3343,10 +3304,6 @@
|
|
3343
3304
|
"li": {
|
3344
3305
|
"host": "whois.nic.li"
|
3345
3306
|
},
|
3346
|
-
"liaison": {
|
3347
|
-
"_type": "newgtld",
|
3348
|
-
"host": "whois.nic.liaison"
|
3349
|
-
},
|
3350
3307
|
"lidl": {
|
3351
3308
|
"_type": "newgtld",
|
3352
3309
|
"host": "whois.nic.lidl"
|
@@ -3742,10 +3699,6 @@
|
|
3742
3699
|
"_type": "newgtld",
|
3743
3700
|
"host": "whois.nic.mobile"
|
3744
3701
|
},
|
3745
|
-
"mobily": {
|
3746
|
-
"_type": "newgtld",
|
3747
|
-
"adapter": "none"
|
3748
|
-
},
|
3749
3702
|
"moda": {
|
3750
3703
|
"_group": "donuts",
|
3751
3704
|
"_type": "newgtld",
|
@@ -3783,11 +3736,6 @@
|
|
3783
3736
|
"_type": "newgtld",
|
3784
3737
|
"adapter": "none"
|
3785
3738
|
},
|
3786
|
-
"mopar": {
|
3787
|
-
"_group": "afiliassrs",
|
3788
|
-
"_type": "newgtld",
|
3789
|
-
"host": "whois.afilias-srs.net"
|
3790
|
-
},
|
3791
3739
|
"mormon": {
|
3792
3740
|
"_group": "afiliassrs",
|
3793
3741
|
"_type": "newgtld",
|
@@ -3821,11 +3769,6 @@
|
|
3821
3769
|
"_type": "newgtld",
|
3822
3770
|
"host": "whois.nic.movie"
|
3823
3771
|
},
|
3824
|
-
"movistar": {
|
3825
|
-
"_group": "knipp",
|
3826
|
-
"_type": "newgtld",
|
3827
|
-
"host": "whois-fe.movistar.tango.knipp.de"
|
3828
|
-
},
|
3829
3772
|
"mp": {
|
3830
3773
|
"adapter": "none"
|
3831
3774
|
},
|
@@ -4383,10 +4326,6 @@
|
|
4383
4326
|
"_type": "newgtld",
|
4384
4327
|
"host": "whois.nic.physio"
|
4385
4328
|
},
|
4386
|
-
"piaget": {
|
4387
|
-
"_type": "newgtld",
|
4388
|
-
"adapter": "none"
|
4389
|
-
},
|
4390
4329
|
"pics": {
|
4391
4330
|
"_group": "uniregistry",
|
4392
4331
|
"_type": "newgtld",
|
@@ -5280,11 +5219,6 @@
|
|
5280
5219
|
"_type": "newgtld",
|
5281
5220
|
"host": "whois.afilias-srs.net"
|
5282
5221
|
},
|
5283
|
-
"srt": {
|
5284
|
-
"_group": "afiliassrs",
|
5285
|
-
"_type": "newgtld",
|
5286
|
-
"host": "whois.afilias-srs.net"
|
5287
|
-
},
|
5288
5222
|
"ss": {
|
5289
5223
|
"host": "whois.nic.ss"
|
5290
5224
|
},
|
@@ -5305,10 +5239,6 @@
|
|
5305
5239
|
"_type": "newgtld",
|
5306
5240
|
"host": "whois.nic.star"
|
5307
5241
|
},
|
5308
|
-
"starhub": {
|
5309
|
-
"_type": "newgtld",
|
5310
|
-
"host": "whois.nic.starhub"
|
5311
|
-
},
|
5312
5242
|
"statebank": {
|
5313
5243
|
"_group": "afiliassrs",
|
5314
5244
|
"_type": "newgtld",
|
@@ -5344,7 +5274,7 @@
|
|
5344
5274
|
},
|
5345
5275
|
"stream": {
|
5346
5276
|
"_type": "newgtld",
|
5347
|
-
"
|
5277
|
+
"host": "whois.nic.stream"
|
5348
5278
|
},
|
5349
5279
|
"studio": {
|
5350
5280
|
"_group": "donuts",
|
@@ -5512,11 +5442,6 @@
|
|
5512
5442
|
"tel": {
|
5513
5443
|
"host": "whois.nic.tel"
|
5514
5444
|
},
|
5515
|
-
"telefonica": {
|
5516
|
-
"_group": "knipp",
|
5517
|
-
"_type": "newgtld",
|
5518
|
-
"host": "whois-fe.telefonica.tango.knipp.de"
|
5519
|
-
},
|
5520
5445
|
"temasek": {
|
5521
5446
|
"_group": "afiliassrs",
|
5522
5447
|
"_type": "newgtld",
|
@@ -5770,11 +5695,6 @@
|
|
5770
5695
|
"_type": "newgtld",
|
5771
5696
|
"host": "whois.nic.ubs"
|
5772
5697
|
},
|
5773
|
-
"uconnect": {
|
5774
|
-
"_group": "afiliassrs",
|
5775
|
-
"_type": "newgtld",
|
5776
|
-
"host": "whois.afilias-srs.net"
|
5777
|
-
},
|
5778
5698
|
"ug": {
|
5779
5699
|
"host": "whois.co.ug"
|
5780
5700
|
},
|
@@ -6034,10 +5954,6 @@
|
|
6034
5954
|
"_type": "newgtld",
|
6035
5955
|
"host": "whois.nic.wanggou"
|
6036
5956
|
},
|
6037
|
-
"warman": {
|
6038
|
-
"_type": "newgtld",
|
6039
|
-
"host": "whois.nic.warman"
|
6040
|
-
},
|
6041
5957
|
"watch": {
|
6042
5958
|
"_group": "donuts",
|
6043
5959
|
"_type": "newgtld",
|
@@ -6577,10 +6493,6 @@
|
|
6577
6493
|
"adapter": "web",
|
6578
6494
|
"url": "http://idn.jo/whois_a.aspx"
|
6579
6495
|
},
|
6580
|
-
"xn--mgbb9fbpob": {
|
6581
|
-
"_type": "newgtld",
|
6582
|
-
"adapter": "none"
|
6583
|
-
},
|
6584
6496
|
"xn--mgbbh1a": {
|
6585
6497
|
"_type": "newgtld",
|
6586
6498
|
"host": "whois.registry.in"
|
data/lib/whois.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
#--
|
2
4
|
# Ruby Whois
|
3
5
|
#
|
4
6
|
# An intelligent pure Ruby WHOIS client and parser.
|
5
7
|
#
|
6
|
-
# Copyright (c) 2009-
|
8
|
+
# Copyright (c) 2009-2021 Simone Carletti <weppos@weppos.net>
|
7
9
|
#++
|
8
10
|
|
9
11
|
|
@@ -45,11 +47,11 @@ module Whois
|
|
45
47
|
return
|
46
48
|
end
|
47
49
|
|
48
|
-
deprecate(%
|
50
|
+
deprecate(%{Whois.available? is deprecated. Call Whois.whois("#{object}").available?})
|
49
51
|
|
50
52
|
result = lookup(object).parser.available?
|
51
53
|
if result.nil?
|
52
|
-
warn "This method is not supported for this kind of object.\n"
|
54
|
+
warn "This method is not supported for this kind of object.\n" \
|
53
55
|
"Use Whois.lookup('#{object}') instead."
|
54
56
|
end
|
55
57
|
result
|
@@ -62,11 +64,11 @@ module Whois
|
|
62
64
|
return
|
63
65
|
end
|
64
66
|
|
65
|
-
deprecate(%
|
67
|
+
deprecate(%{Whois.registered? is deprecated. Call Whois.whois("#{object}").available?})
|
66
68
|
|
67
69
|
result = lookup(object).parser.registered?
|
68
70
|
if result.nil?
|
69
|
-
warn "This method is not supported for this kind of object.\n"
|
71
|
+
warn "This method is not supported for this kind of object.\n" \
|
70
72
|
"Use Whois.lookup('#{object}') instead."
|
71
73
|
end
|
72
74
|
result
|
@@ -87,9 +89,9 @@ module Whois
|
|
87
89
|
# @api private
|
88
90
|
# @private
|
89
91
|
def bug!(error, message)
|
90
|
-
raise error, message.dup
|
91
|
-
|
92
|
-
|
92
|
+
raise error, message.dup <<
|
93
|
+
" Please report the issue at" \
|
94
|
+
" http://github.com/weppos/whois/issues"
|
93
95
|
end
|
94
96
|
|
95
97
|
|
@@ -107,10 +109,10 @@ module Whois
|
|
107
109
|
end
|
108
110
|
|
109
111
|
def extract_callstack(callstack)
|
110
|
-
gem_root = File.expand_path(
|
112
|
+
gem_root = "#{File.expand_path('../..', __dir__)}/"
|
111
113
|
offending_line = callstack.find { |line| !line.start_with?(gem_root) } || callstack.first
|
112
114
|
if offending_line
|
113
|
-
if md = offending_line.match(/^(.+?):(\d+)(?::in `(.*?)')?/)
|
115
|
+
if (md = offending_line.match(/^(.+?):(\d+)(?::in `(.*?)')?/))
|
114
116
|
md.captures
|
115
117
|
else
|
116
118
|
offending_line
|
data/lib/whois/client.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
#--
|
2
4
|
# Ruby Whois
|
3
5
|
#
|
4
6
|
# An intelligent pure Ruby WHOIS client and parser.
|
5
7
|
#
|
6
|
-
# Copyright (c) 2009-
|
8
|
+
# Copyright (c) 2009-2021 Simone Carletti <weppos@weppos.net>
|
7
9
|
#++
|
8
10
|
|
9
11
|
|
@@ -88,7 +90,7 @@ module Whois
|
|
88
90
|
#
|
89
91
|
def lookup(object)
|
90
92
|
string = object.to_s.downcase
|
91
|
-
Timeout
|
93
|
+
Timeout.timeout(timeout) do
|
92
94
|
@server = Server.guess(string)
|
93
95
|
@server.configure(settings)
|
94
96
|
@server.lookup(string)
|
data/lib/whois/errors.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
#--
|
2
4
|
# Ruby Whois
|
3
5
|
#
|
4
6
|
# An intelligent pure Ruby WHOIS client and parser.
|
5
7
|
#
|
6
|
-
# Copyright (c) 2009-
|
8
|
+
# Copyright (c) 2009-2021 Simone Carletti <weppos@weppos.net>
|
7
9
|
#++
|
8
10
|
|
9
11
|
|
@@ -69,7 +71,7 @@ module Whois
|
|
69
71
|
|
70
72
|
# Raised when the class has found a server but it doesn't support the
|
71
73
|
# standard WHOIS interface via port 43. This is the case of some
|
72
|
-
# specific domains that only provide a web
|
74
|
+
# specific domains that only provide a web-based WHOIS interface. (\x01)
|
73
75
|
class WebInterfaceError < InterfaceNotSupported
|
74
76
|
|
75
77
|
# @return [String] The URL of the web-based WHOIS interface.
|
data/lib/whois/record.rb
CHANGED
data/lib/whois/record/part.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
#--
|
2
4
|
# Ruby Whois
|
3
5
|
#
|
4
6
|
# An intelligent pure Ruby WHOIS client and parser.
|
5
7
|
#
|
6
|
-
# Copyright (c) 2009-
|
8
|
+
# Copyright (c) 2009-2021 Simone Carletti <weppos@weppos.net>
|
7
9
|
#++
|
8
10
|
|
9
11
|
|
@@ -20,8 +22,7 @@ module Whois
|
|
20
22
|
# @attr [String] body The body containing the WHOIS output.
|
21
23
|
# @attr [String] host The host which returned the body.
|
22
24
|
#
|
23
|
-
|
24
|
-
|
25
|
+
Part = Struct.new(:body, :host) do
|
25
26
|
def initialize(*args)
|
26
27
|
if args.first.is_a? Hash
|
27
28
|
initialize_with_hash(args.first)
|
data/lib/whois/server.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#--
|
3
4
|
# Ruby Whois
|
4
5
|
#
|
5
6
|
# An intelligent pure Ruby WHOIS client and parser.
|
6
7
|
#
|
7
|
-
# Copyright (c) 2009-
|
8
|
+
# Copyright (c) 2009-2021 Simone Carletti <weppos@weppos.net>
|
8
9
|
#++
|
9
10
|
|
10
11
|
|
@@ -40,11 +41,11 @@ module Whois
|
|
40
41
|
|
41
42
|
# @return [Array<Symbol>] the definition types
|
42
43
|
TYPES = [
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
44
|
+
TYPE_TLD = :tld,
|
45
|
+
TYPE_IPV4 = :ipv4,
|
46
|
+
TYPE_IPV6 = :ipv6,
|
47
|
+
TYPE_ASN16 = :asn16,
|
48
|
+
TYPE_ASN32 = :asn32,
|
48
49
|
].freeze
|
49
50
|
|
50
51
|
# Empty hash constant used to save allocation for definitions with empty settings.
|
@@ -67,7 +68,7 @@ module Whois
|
|
67
68
|
# @return [void]
|
68
69
|
def load_definitions
|
69
70
|
clear_definitions
|
70
|
-
Dir[File.expand_path(
|
71
|
+
Dir[File.expand_path('../../data/*.json', __dir__)].each { |f| load_json(f) }
|
71
72
|
end
|
72
73
|
|
73
74
|
# Loads the definitions from a JSON file.
|
@@ -77,16 +78,17 @@ module Whois
|
|
77
78
|
# @return [void]
|
78
79
|
def load_json(file)
|
79
80
|
type = File.basename(file, File.extname(file)).to_sym
|
80
|
-
JSON.
|
81
|
+
JSON.parse(File.read(file)).each do |allocation, settings|
|
81
82
|
next if allocation == "_"
|
83
|
+
|
82
84
|
settings.reject! { |k, _| k.start_with?("_") }
|
83
85
|
host = settings.delete("host")
|
84
86
|
host = intern_string(host) if host
|
85
87
|
options = if settings.empty?
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
88
|
+
EMPTY_HASH
|
89
|
+
else
|
90
|
+
settings.map { |k, v| [k.to_sym, v.is_a?(String) ? intern_string(v) : v] }.to_h.freeze
|
91
|
+
end
|
90
92
|
define(type, allocation, host, options)
|
91
93
|
end
|
92
94
|
end
|
@@ -112,7 +114,7 @@ module Whois
|
|
112
114
|
#
|
113
115
|
def definitions(type)
|
114
116
|
TYPES.include?(type) or
|
115
|
-
|
117
|
+
raise(ArgumentError, "`#{type}` is not a valid definition type")
|
116
118
|
|
117
119
|
_definitions(type).values
|
118
120
|
end
|
@@ -156,7 +158,7 @@ module Whois
|
|
156
158
|
#
|
157
159
|
def define(type, allocation, host, options = EMPTY_HASH)
|
158
160
|
TYPES.include?(type) or
|
159
|
-
|
161
|
+
raise(ArgumentError, "`#{type}` is not a valid definition type")
|
160
162
|
|
161
163
|
_definitions(type)[allocation] = [allocation, host, options.freeze]
|
162
164
|
end
|
@@ -282,6 +284,7 @@ module Whois
|
|
282
284
|
end
|
283
285
|
rescue ArgumentError
|
284
286
|
# continue
|
287
|
+
nil
|
285
288
|
end
|
286
289
|
raise AllocationUnknown, "IP Allocation for `#{string}' unknown"
|
287
290
|
end
|
@@ -304,7 +307,7 @@ module Whois
|
|
304
307
|
token = string
|
305
308
|
defs = _definitions(TYPE_TLD)
|
306
309
|
|
307
|
-
while token != ""
|
310
|
+
while token != ""
|
308
311
|
if (found = defs[token])
|
309
312
|
return factory(:tld, *found)
|
310
313
|
else
|
@@ -328,7 +331,7 @@ module Whois
|
|
328
331
|
# that matches one of the existing server definitions.
|
329
332
|
def find_for_asn(string)
|
330
333
|
asn = string[/\d+/].to_i
|
331
|
-
asn_type = asn <=
|
334
|
+
asn_type = asn <= 65_535 ? TYPE_ASN16 : TYPE_ASN32
|
332
335
|
_definitions(asn_type).each do |_, definition|
|
333
336
|
if (range = definition.first.split.map(&:to_i)) && asn >= range.first && asn <= range.last
|
334
337
|
return factory(asn_type, *definition)
|
@@ -379,9 +382,10 @@ module Whois
|
|
379
382
|
end
|
380
383
|
|
381
384
|
def valid_ipv4?(addr)
|
382
|
-
if /\A(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\Z
|
383
|
-
return
|
385
|
+
if (m = /\A(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\Z/.match(addr))
|
386
|
+
return m.captures.all? { |i| i.to_i < 256 }
|
384
387
|
end
|
388
|
+
|
385
389
|
false
|
386
390
|
end
|
387
391
|
|
@@ -391,9 +395,10 @@ module Whois
|
|
391
395
|
return true if addr.match?(/\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*)?\Z/)
|
392
396
|
return true if addr.match?(/\A::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*)?\Z/)
|
393
397
|
# IPv6 (IPv4 compat)
|
394
|
-
return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:/ =~ addr && valid_ipv4?(
|
395
|
-
return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ addr && valid_ipv4?(
|
396
|
-
return true if /\A::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ addr && valid_ipv4?(
|
398
|
+
return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:/ =~ addr && valid_ipv4?(Regexp.last_match.post_match)
|
399
|
+
return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ addr && valid_ipv4?(Regexp.last_match.post_match)
|
400
|
+
return true if /\A::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ addr && valid_ipv4?(Regexp.last_match.post_match)
|
401
|
+
|
397
402
|
false
|
398
403
|
end
|
399
404
|
|