whois 5.0.0 → 5.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +8 -0
- data/.github/workflows/codeql-analysis.yml +64 -0
- data/.github/workflows/release.yml +16 -0
- data/.github/workflows/tests.yml +29 -0
- data/.rubocop.yml +27 -0
- data/.rubocop_opinionated.yml +135 -0
- data/.rubocop_todo.yml +166 -0
- data/.simplecov +2 -0
- data/.tool-versions +1 -0
- data/CHANGELOG.md +79 -50
- data/CONTRIBUTING.md +12 -12
- data/Gemfile +5 -0
- data/LICENSE.txt +1 -1
- data/README.md +22 -22
- 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 -99
- data/lib/whois/client.rb +4 -2
- data/lib/whois/errors.rb +4 -2
- data/lib/whois/record/part.rb +5 -4
- data/lib/whois/record.rb +4 -2
- data/lib/whois/server/adapters/afilias.rb +4 -1
- data/lib/whois/server/adapters/arin.rb +7 -4
- data/lib/whois/server/adapters/arpa.rb +20 -19
- data/lib/whois/server/adapters/base.rb +26 -40
- 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/server.rb +55 -53
- data/lib/whois/version.rb +4 -2
- data/lib/whois.rb +13 -11
- data/spec/integration/whois_spec.rb +6 -6
- data/spec/spec_helper.rb +4 -4
- data/spec/support/helpers/connectivity_helper.rb +3 -3
- 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 +4 -4
- data/spec/whois/server/adapters/arin_spec.rb +9 -10
- 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 +8 -8
- data/spec/whois/server/adapters/none_spec.rb +2 -2
- data/spec/whois/server/adapters/not_implemented_spec.rb +4 -4
- data/spec/whois/server/adapters/standard_spec.rb +5 -5
- data/spec/whois/server/adapters/verisign_spec.rb +5 -5
- data/spec/whois/server/adapters/web_spec.rb +4 -4
- 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
- data/utils/compare-whois.rb +1 -1
- data/utils/matrix.rb +1 -1
- metadata +13 -39
- data/.travis.yml +0 -18
- data/bin/setup +0 -8
- data/tasks/spec.rake +0 -199
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:55: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
|
},
|
@@ -5951,10 +5871,6 @@
|
|
5951
5871
|
"_type": "newgtld",
|
5952
5872
|
"host": "whois.nic.vision"
|
5953
5873
|
},
|
5954
|
-
"vistaprint": {
|
5955
|
-
"_type": "newgtld",
|
5956
|
-
"host": "whois.nic.vistaprint"
|
5957
|
-
},
|
5958
5874
|
"viva": {
|
5959
5875
|
"_group": "centralnic",
|
5960
5876
|
"_type": "newgtld",
|
@@ -6034,10 +5950,6 @@
|
|
6034
5950
|
"_type": "newgtld",
|
6035
5951
|
"host": "whois.nic.wanggou"
|
6036
5952
|
},
|
6037
|
-
"warman": {
|
6038
|
-
"_type": "newgtld",
|
6039
|
-
"host": "whois.nic.warman"
|
6040
|
-
},
|
6041
5953
|
"watch": {
|
6042
5954
|
"_group": "donuts",
|
6043
5955
|
"_type": "newgtld",
|
@@ -6398,11 +6310,6 @@
|
|
6398
6310
|
"_type": "newgtld",
|
6399
6311
|
"host": "whois.nic.xn--efvy88h"
|
6400
6312
|
},
|
6401
|
-
"xn--estv75g": {
|
6402
|
-
"_group": "afiliassrs",
|
6403
|
-
"_type": "newgtld",
|
6404
|
-
"host": "whois.nic.xn--estv75g"
|
6405
|
-
},
|
6406
6313
|
"xn--fct429k": {
|
6407
6314
|
"_group": "amazonregistry",
|
6408
6315
|
"_type": "newgtld",
|
@@ -6577,10 +6484,6 @@
|
|
6577
6484
|
"adapter": "web",
|
6578
6485
|
"url": "http://idn.jo/whois_a.aspx"
|
6579
6486
|
},
|
6580
|
-
"xn--mgbb9fbpob": {
|
6581
|
-
"_type": "newgtld",
|
6582
|
-
"adapter": "none"
|
6583
|
-
},
|
6584
6487
|
"xn--mgbbh1a": {
|
6585
6488
|
"_type": "newgtld",
|
6586
6489
|
"host": "whois.registry.in"
|
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-2022 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-2022 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/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-2022 Simone Carletti <weppos@weppos.net>
|
7
9
|
#++
|
8
10
|
|
9
11
|
|
@@ -20,12 +22,11 @@ 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)
|
28
|
-
elsif args.size
|
29
|
+
elsif args.size.zero?
|
29
30
|
super
|
30
31
|
else
|
31
32
|
raise ArgumentError
|
data/lib/whois/record.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-2022 Simone Carletti <weppos@weppos.net>
|
7
9
|
#++
|
8
10
|
|
9
11
|
|
@@ -65,7 +67,7 @@ module Whois
|
|
65
67
|
end
|
66
68
|
end
|
67
69
|
|
68
|
-
|
70
|
+
alias eql? ==
|
69
71
|
|
70
72
|
|
71
73
|
# Invokes {#match} on record {#content}
|
@@ -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-2022 Simone Carletti <weppos@weppos.net>
|
7
9
|
#++
|
8
10
|
|
9
11
|
|
@@ -40,6 +42,7 @@ module Whois
|
|
40
42
|
|
41
43
|
def extract_referral(response)
|
42
44
|
return unless (match = response.match(/Registrar WHOIS Server:(.+?)$/))
|
45
|
+
|
43
46
|
server = match[match.size - 1].strip
|
44
47
|
server.empty? ? nil : server
|
45
48
|
end
|
@@ -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-2022 Simone Carletti <weppos@weppos.net>
|
7
9
|
#++
|
8
10
|
|
9
11
|
|
@@ -38,10 +40,11 @@ module Whois
|
|
38
40
|
private
|
39
41
|
|
40
42
|
def extract_referral(response)
|
41
|
-
return unless response =~
|
43
|
+
return unless response =~ %r{ReferralServer:\s*r?whois://([\w.-]+)(?::(\d+))?}
|
44
|
+
|
42
45
|
{
|
43
|
-
host:
|
44
|
-
port:
|
46
|
+
host: Regexp.last_match(1),
|
47
|
+
port: Regexp.last_match(2) ? Regexp.last_match(2).to_i : nil,
|
45
48
|
}
|
46
49
|
end
|
47
50
|
|
@@ -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-2022 Simone Carletti <weppos@weppos.net>
|
7
9
|
#++
|
8
10
|
|
9
11
|
|
@@ -22,25 +24,24 @@ module Whois
|
|
22
24
|
|
23
25
|
private
|
24
26
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
27
|
+
# "127.1.168.192.in-addr.arpa" => "192.168.1.127"
|
28
|
+
# "1.168.192.in-addr.arpa" => "192.168.1.0"
|
29
|
+
# "168.192.in-addr.arpa" => "192.168.0.0"
|
30
|
+
# "192.in-addr.arpa" => "192.0.0.0"
|
31
|
+
# "in-addr.arpa" => "0.0.0.0"
|
32
|
+
def inaddr_to_ip(string)
|
33
|
+
raise ServerError, "Invalid .in-addr.arpa address" unless string.match?(/^([0-9]{1,3}\.?){0,4}in-addr\.arpa$/)
|
34
|
+
|
35
|
+
a, b, c, d = string.scan(/[0-9]{1,3}\./).reverse
|
36
|
+
[a, b, c, d].map do |token|
|
37
|
+
token = (token || 0).to_i
|
38
|
+
if token <= 255 && token >= 0
|
39
|
+
token
|
40
|
+
else
|
41
|
+
raise ServerError, "Invalid .in-addr.arpa token `#{token}'"
|
33
42
|
end
|
34
|
-
|
35
|
-
|
36
|
-
token = (token ||= 0).to_i
|
37
|
-
if token <= 255 && token >= 0
|
38
|
-
token
|
39
|
-
else
|
40
|
-
raise ServerError, "Invalid .in-addr.arpa token `#{token}'"
|
41
|
-
end
|
42
|
-
end.join(".")
|
43
|
-
end
|
43
|
+
end.join(".")
|
44
|
+
end
|
44
45
|
|
45
46
|
end
|
46
47
|
|
@@ -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-2022 Simone Carletti <weppos@weppos.net>
|
7
9
|
#++
|
8
10
|
|
9
11
|
|
@@ -22,9 +24,7 @@ module Whois
|
|
22
24
|
@query_handler ||= SocketHandler.new
|
23
25
|
end
|
24
26
|
|
25
|
-
|
26
|
-
@query_handler = handler
|
27
|
-
end
|
27
|
+
attr_writer :query_handler
|
28
28
|
end
|
29
29
|
|
30
30
|
# Default WHOIS request port.
|
@@ -48,15 +48,10 @@ module Whois
|
|
48
48
|
attr_reader :buffer
|
49
49
|
|
50
50
|
|
51
|
-
# @param [Symbol] type
|
52
|
-
#
|
53
|
-
#
|
54
|
-
# @param [
|
55
|
-
# The allocation, range or hostname, this server is responsible for.
|
56
|
-
# @param [String, nil] host
|
57
|
-
# The server hostname. Use nil if unknown or not available.
|
58
|
-
# @param [Hash] options Optional adapter properties.
|
59
|
-
#
|
51
|
+
# @param type [Symbol] the type of WHOIS adapter to define. Known values are :tld, :ipv4, :ipv6,
|
52
|
+
# @param allocation [String] the allocation, range or hostname, this server is responsible for.
|
53
|
+
# @param host [String, nil] the server hostname. Use nil if unknown or not available.
|
54
|
+
# @param options [Hash] optional adapter properties
|
60
55
|
def initialize(type, allocation, host, options = {})
|
61
56
|
@type = type
|
62
57
|
@allocation = allocation
|
@@ -66,53 +61,44 @@ module Whois
|
|
66
61
|
|
67
62
|
# Checks self and other for equality.
|
68
63
|
#
|
69
|
-
# @param [The Whois::Server::Adapters::Base]
|
70
|
-
# @return [Boolean]
|
64
|
+
# @param other [The Whois::Server::Adapters::Base]
|
65
|
+
# @return [Boolean] true if the other is the same object,
|
71
66
|
# or <tt>other</tt> attributes matches this object attributes.
|
72
|
-
#
|
73
67
|
def ==(other)
|
74
|
-
(
|
75
|
-
self.equal?(other)
|
76
|
-
) || (
|
68
|
+
equal?(other) || (
|
77
69
|
other.is_a?(self.class) &&
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
70
|
+
type == other.type &&
|
71
|
+
allocation == other.allocation &&
|
72
|
+
host == other.host &&
|
73
|
+
options == other.options
|
82
74
|
)
|
83
75
|
end
|
84
76
|
|
85
|
-
|
77
|
+
alias eql? ==
|
86
78
|
|
87
79
|
|
88
80
|
# Merges given +settings+ into current {#options}.
|
89
81
|
#
|
90
|
-
# @param [Hash]
|
91
|
-
# @return [Hash]
|
92
|
-
#
|
82
|
+
# @param settings [Hash]
|
83
|
+
# @return [Hash] the updated options for this object
|
93
84
|
def configure(settings)
|
94
85
|
@host = settings[:host] if settings[:host]
|
95
86
|
options.merge!(settings)
|
96
87
|
end
|
97
88
|
|
98
89
|
|
99
|
-
# Performs a Whois lookup for <tt>string</tt>
|
100
|
-
# using the current server adapter.
|
90
|
+
# Performs a Whois lookup for <tt>string</tt> using the current server adapter.
|
101
91
|
#
|
102
|
-
# Internally, this method calls {#request}
|
103
|
-
# using the Template Method design pattern.
|
92
|
+
# Internally, this method calls {#request} using the Template Method design pattern.
|
104
93
|
#
|
105
94
|
# server.lookup("google.com")
|
106
95
|
# # => Whois::Record
|
107
96
|
#
|
108
|
-
# @param [String]
|
97
|
+
# @param string [String] the string to query
|
109
98
|
# @return [Whois::Record]
|
110
|
-
#
|
111
99
|
def lookup(string)
|
112
|
-
buffer_start
|
113
|
-
|
114
|
-
Whois::Record.new(self, buffer.dup)
|
115
|
-
end
|
100
|
+
parts = buffer_start { request(string) }
|
101
|
+
Whois::Record.new(self, parts)
|
116
102
|
end
|
117
103
|
|
118
104
|
# Performs the real WHOIS request.
|
@@ -121,11 +107,10 @@ module Whois
|
|
121
107
|
# it is intended to be overwritten in the concrete subclasses.
|
122
108
|
# This is the heart of the Template Method design pattern.
|
123
109
|
#
|
124
|
-
# @param [String]
|
110
|
+
# @param string [String] the string to query
|
125
111
|
# @return [void]
|
126
112
|
# @raise [NotImplementedError]
|
127
113
|
# @abstract
|
128
|
-
#
|
129
114
|
def request(string)
|
130
115
|
raise NotImplementedError
|
131
116
|
end
|
@@ -149,6 +134,7 @@ module Whois
|
|
149
134
|
def buffer_start
|
150
135
|
@buffer ||= []
|
151
136
|
yield(@buffer)
|
137
|
+
@buffer.dup
|
152
138
|
ensure
|
153
139
|
@buffer.clear
|
154
140
|
end
|
@@ -183,7 +169,7 @@ module Whois
|
|
183
169
|
self.class.query_handler.call(query, *args)
|
184
170
|
end
|
185
171
|
|
186
|
-
alias
|
172
|
+
alias query_the_socket query
|
187
173
|
|
188
174
|
end
|
189
175
|
|
@@ -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-2022 Simone Carletti <weppos@weppos.net>
|
7
9
|
#++
|
8
10
|
|
9
11
|
|
@@ -47,7 +49,7 @@ module Whois
|
|
47
49
|
#
|
48
50
|
def request(string)
|
49
51
|
options[:format] || raise(ServerError, "Missing mandatory :format option for adapter `Formatted'")
|
50
|
-
response = query_the_socket(
|
52
|
+
response = query_the_socket(format(options[:format], string), host)
|
51
53
|
buffer_append response, host
|
52
54
|
end
|
53
55
|
|