whois 1.3.8 → 1.3.9
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +24 -0
- data/lib/whois.rb +6 -0
- data/lib/whois/answer/parser/NOTES.txt +6 -0
- data/lib/whois/answer/parser/whois.arnes.si.rb +1 -2
- data/lib/whois/answer/parser/whois.cira.ca.rb +33 -6
- data/lib/whois/answer/parser/whois.domain-registry.nl.rb +1 -2
- data/lib/whois/answer/parser/whois.ficora.fi.rb +81 -0
- data/lib/whois/answer/parser/whois.gg.rb +78 -0
- data/lib/whois/answer/parser/whois.isoc.org.il.rb +79 -0
- data/lib/whois/answer/parser/whois.netcom.cm.rb +1 -2
- data/lib/whois/answer/parser/whois.nic.af.rb +3 -2
- data/lib/whois/answer/parser/whois.nic.cx.rb +3 -2
- data/lib/whois/answer/parser/whois.nic.cz.rb +2 -3
- data/lib/whois/answer/parser/whois.nic.dz.rb +71 -0
- data/lib/whois/answer/parser/whois.nic.gs.rb +90 -0
- data/lib/whois/answer/parser/whois.nic.ir.rb +73 -0
- data/lib/whois/answer/parser/whois.pandi.or.id.rb +10 -4
- data/lib/whois/answer/parser/whois.ripe.net.rb +1 -1
- data/lib/whois/answer/parser/whois.usp.ac.fj.rb +81 -0
- data/lib/whois/definitions/tlds.rb +3 -3
- data/lib/whois/version.rb +1 -1
- data/whois.gemspec +2 -2
- metadata +11 -4
data/CHANGELOG.rdoc
CHANGED
@@ -1,5 +1,29 @@
|
|
1
1
|
= Changelog
|
2
2
|
|
3
|
+
== Release 1.3.9
|
4
|
+
|
5
|
+
* SERVER: Sync definitions with Debian whois 5.0.8:
|
6
|
+
* Updated the .bb, .ps, and .lk TLD definitions.
|
7
|
+
|
8
|
+
* NEW: Added simple .dz TLD parser (whois.nic.dz).
|
9
|
+
|
10
|
+
* NEW: Added simple .fi TLD parser (whois.ficora.fi).
|
11
|
+
|
12
|
+
* NEW: Added simple .fj TLD parser (whois.usp.ac.fj).
|
13
|
+
|
14
|
+
* NEW: Added simple .gg TLD parser (whois.gg).
|
15
|
+
|
16
|
+
* NEW: Added simple .gs TLD parser (whois.nic.gs).
|
17
|
+
|
18
|
+
* NEW: Added simple .il TLD parser (whois.isoc.org.il).
|
19
|
+
|
20
|
+
* NEW: Added simple .ir TLD parser (whois.nic.ir).
|
21
|
+
|
22
|
+
* CHANGED: Standardized whois.pandi.or.id #status property, it now returns symbols instead of strings.
|
23
|
+
|
24
|
+
* FIXED: Compatibility with the new whois.cira.ca record schema.
|
25
|
+
|
26
|
+
|
3
27
|
== Release 1.3.8
|
4
28
|
|
5
29
|
* FIXED: The Verisign WHOIS adapter crashes in some rare circumstances when the response from the Verisign database returns a "not defined" value for the Referral Whois Server (#42)
|
data/lib/whois.rb
CHANGED
@@ -39,8 +39,7 @@ module Whois
|
|
39
39
|
case $1.downcase
|
40
40
|
when "ok" then :registered
|
41
41
|
else
|
42
|
-
|
43
|
-
"Please report the issue at http://github.com/weppos/whois/issues"
|
42
|
+
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
44
43
|
end
|
45
44
|
else
|
46
45
|
:available
|
@@ -37,12 +37,17 @@ module Whois
|
|
37
37
|
property_supported :status do
|
38
38
|
@status ||= if content_for_scanner =~ /Domain status:\s+(.*?)\n/
|
39
39
|
case $1.downcase
|
40
|
-
|
41
|
-
when "
|
40
|
+
# schema-2
|
41
|
+
when "registered" then :registered
|
42
|
+
when "available" then :available
|
43
|
+
# schema-1
|
44
|
+
when "exist" then :registered
|
45
|
+
when "avail" then :available
|
42
46
|
else
|
43
|
-
|
44
|
-
"Please report the issue at http://github.com/weppos/whois/issues"
|
47
|
+
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
45
48
|
end
|
49
|
+
else
|
50
|
+
Whois.bug!(ParserError, "Unable to parse status.")
|
46
51
|
end
|
47
52
|
end
|
48
53
|
|
@@ -56,11 +61,16 @@ module Whois
|
|
56
61
|
|
57
62
|
|
58
63
|
property_supported :created_on do
|
59
|
-
|
64
|
+
# schema-2
|
65
|
+
@created_on ||= if content_for_scanner =~ /Creation date:\s+(.*?)\n/
|
66
|
+
Time.parse($1)
|
67
|
+
# schema-1
|
68
|
+
elsif content_for_scanner =~ /Approval date:\s+(.*?)\n/
|
60
69
|
Time.parse($1)
|
61
70
|
end
|
62
71
|
end
|
63
72
|
|
73
|
+
# TODO: Not supported in schema-2?
|
64
74
|
property_supported :updated_on do
|
65
75
|
@updated_on ||= if content_for_scanner =~ /Updated date:\s+(.*?)\n/
|
66
76
|
Time.parse($1)
|
@@ -68,7 +78,11 @@ module Whois
|
|
68
78
|
end
|
69
79
|
|
70
80
|
property_supported :expires_on do
|
71
|
-
|
81
|
+
# schema-2
|
82
|
+
@expires_on ||= if content_for_scanner =~ /Expiry date:\s+(.*?)\n/
|
83
|
+
Time.parse($1)
|
84
|
+
# schema-1
|
85
|
+
elsif content_for_scanner =~ /Renewal date:\s+(.*?)\n/
|
72
86
|
Time.parse($1)
|
73
87
|
end
|
74
88
|
end
|
@@ -92,6 +106,19 @@ module Whois
|
|
92
106
|
end
|
93
107
|
end
|
94
108
|
|
109
|
+
|
110
|
+
# Attempts to detect and returns the
|
111
|
+
# schema version.
|
112
|
+
def schema
|
113
|
+
@schema ||= if content_for_scanner =~ /^% \(c\) (.+?) Canadian Internet Registration Authority/
|
114
|
+
case $1
|
115
|
+
when "2007" then "1"
|
116
|
+
when "2010" then "2"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
@schema || Whois.bug!(ParserError, "Unable to detect schema version.")
|
120
|
+
end
|
121
|
+
|
95
122
|
end
|
96
123
|
|
97
124
|
end
|
@@ -40,8 +40,7 @@ module Whois
|
|
40
40
|
when "active" then :registered
|
41
41
|
when "in quarantine" then :quarantine
|
42
42
|
else
|
43
|
-
|
44
|
-
"Please report the issue at http://github.com/weppos/whois/issues"
|
43
|
+
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
45
44
|
end
|
46
45
|
else
|
47
46
|
:available
|
@@ -0,0 +1,81 @@
|
|
1
|
+
#
|
2
|
+
# = Ruby Whois
|
3
|
+
#
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# Category:: Net
|
8
|
+
# Package:: Whois
|
9
|
+
# Author:: Simone Carletti <weppos@weppos.net>
|
10
|
+
# License:: MIT License
|
11
|
+
#
|
12
|
+
#--
|
13
|
+
#
|
14
|
+
#++
|
15
|
+
|
16
|
+
|
17
|
+
require 'whois/answer/parser/base'
|
18
|
+
|
19
|
+
|
20
|
+
module Whois
|
21
|
+
class Answer
|
22
|
+
class Parser
|
23
|
+
|
24
|
+
#
|
25
|
+
# = whois.ficora.fi parser
|
26
|
+
#
|
27
|
+
# Parser for the whois.ficora.fi server.
|
28
|
+
#
|
29
|
+
# NOTE: This parser is just a stub and provides only a few basic methods
|
30
|
+
# to check for domain availability and get domain status.
|
31
|
+
# Please consider to contribute implementing missing methods.
|
32
|
+
# See WhoisNicIt parser for an explanation of all available methods
|
33
|
+
# and examples.
|
34
|
+
#
|
35
|
+
class WhoisFicoraFi < Base
|
36
|
+
|
37
|
+
property_supported :status do
|
38
|
+
@status ||= if content_for_scanner =~ /status:\s+(.*?)\n/
|
39
|
+
case $1.downcase
|
40
|
+
when "granted" then :registered
|
41
|
+
else
|
42
|
+
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
43
|
+
end
|
44
|
+
else
|
45
|
+
:available
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
property_supported :available? do
|
50
|
+
@available ||= (status == :available)
|
51
|
+
end
|
52
|
+
|
53
|
+
property_supported :registered? do
|
54
|
+
@registered ||= !available?
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
property_supported :created_on do
|
59
|
+
@created_on ||= if content_for_scanner =~ /created:\s+(.*)\n/
|
60
|
+
Time.parse($1)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
property_not_supported :updated_on
|
65
|
+
|
66
|
+
property_supported :expires_on do
|
67
|
+
@expires_on ||= if content_for_scanner =~ /expires:\s+(.*)\n/
|
68
|
+
Time.parse($1)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
property_supported :nameservers do
|
74
|
+
@nameservers ||= content_for_scanner.scan(/nserver:\s+(.+)\n/).flatten.map { |value| value.split(" ").first }
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
#
|
2
|
+
# = Ruby Whois
|
3
|
+
#
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# Category:: Net
|
8
|
+
# Package:: Whois
|
9
|
+
# Author:: Simone Carletti <weppos@weppos.net>
|
10
|
+
# License:: MIT License
|
11
|
+
#
|
12
|
+
#--
|
13
|
+
#
|
14
|
+
#++
|
15
|
+
|
16
|
+
|
17
|
+
require 'whois/answer/parser/base'
|
18
|
+
|
19
|
+
|
20
|
+
module Whois
|
21
|
+
class Answer
|
22
|
+
class Parser
|
23
|
+
|
24
|
+
#
|
25
|
+
# = whois.gg parser
|
26
|
+
#
|
27
|
+
# Parser for the whois.gg server.
|
28
|
+
#
|
29
|
+
# NOTE: This parser is just a stub and provides only a few basic methods
|
30
|
+
# to check for domain availability and get domain status.
|
31
|
+
# Please consider to contribute implementing missing methods.
|
32
|
+
# See WhoisNicIt parser for an explanation of all available methods
|
33
|
+
# and examples.
|
34
|
+
#
|
35
|
+
class WhoisGg < Base
|
36
|
+
|
37
|
+
property_supported :status do
|
38
|
+
@status ||= if content_for_scanner =~ /status:(.+?)\n/
|
39
|
+
case $1.downcase
|
40
|
+
when "0" then :available
|
41
|
+
when "1" then :registered
|
42
|
+
else
|
43
|
+
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
44
|
+
end
|
45
|
+
else
|
46
|
+
Whois.bug!(ParserError, "Unable to parse status.")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
property_supported :available? do
|
51
|
+
@available ||= (status == :available)
|
52
|
+
end
|
53
|
+
|
54
|
+
property_supported :registered? do
|
55
|
+
@registered ||= !available?
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
property_not_supported :created_on
|
60
|
+
|
61
|
+
property_not_supported :updated_on
|
62
|
+
|
63
|
+
property_not_supported :expires_on
|
64
|
+
|
65
|
+
|
66
|
+
property_supported :nameservers do
|
67
|
+
@nameservers ||= if content_for_scanner =~ /Registered Nameservers\n[-]+\n((.+\n)+)\n/
|
68
|
+
$1.split("\n").map { |value| value.chomp(".") }
|
69
|
+
else
|
70
|
+
[]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
#
|
2
|
+
# = Ruby Whois
|
3
|
+
#
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# Category:: Net
|
8
|
+
# Package:: Whois
|
9
|
+
# Author:: Simone Carletti <weppos@weppos.net>
|
10
|
+
# License:: MIT License
|
11
|
+
#
|
12
|
+
#--
|
13
|
+
#
|
14
|
+
#++
|
15
|
+
|
16
|
+
|
17
|
+
require 'whois/answer/parser/base'
|
18
|
+
|
19
|
+
|
20
|
+
module Whois
|
21
|
+
class Answer
|
22
|
+
class Parser
|
23
|
+
|
24
|
+
#
|
25
|
+
# = whois.isoc.org.il parser
|
26
|
+
#
|
27
|
+
# Parser for the whois.isoc.org.il server.
|
28
|
+
#
|
29
|
+
# NOTE: This parser is just a stub and provides only a few basic methods
|
30
|
+
# to check for domain availability and get domain status.
|
31
|
+
# Please consider to contribute implementing missing methods.
|
32
|
+
# See WhoisNicIt parser for an explanation of all available methods
|
33
|
+
# and examples.
|
34
|
+
#
|
35
|
+
class WhoisIsocOrgIl < Base
|
36
|
+
|
37
|
+
property_supported :status do
|
38
|
+
@status ||= if content_for_scanner =~ /status:\s+(.*?)\n/
|
39
|
+
case $1.downcase
|
40
|
+
when "transfer locked" then :registered
|
41
|
+
else
|
42
|
+
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
43
|
+
end
|
44
|
+
else
|
45
|
+
:available
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
property_supported :available? do
|
50
|
+
@available ||= (status == :available)
|
51
|
+
end
|
52
|
+
|
53
|
+
property_supported :registered? do
|
54
|
+
@registered ||= !available?
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
# TODO: first changed record
|
59
|
+
property_not_supported :created_on
|
60
|
+
|
61
|
+
property_supported :updated_on do
|
62
|
+
@updated_on ||= if content_for_scanner =~ /changed:\s+(.+)\n/
|
63
|
+
t = content_for_scanner.scan(/changed:\s+(?:.+?) (\d+) \(Changed\)\n/).flatten.last
|
64
|
+
Time.parse(t)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
property_not_supported :expires_on
|
69
|
+
|
70
|
+
|
71
|
+
property_supported :nameservers do
|
72
|
+
@nameservers ||= content_for_scanner.scan(/nserver:\s+(.+)\n/).flatten.map { |value| value.split(" ").first }
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -40,8 +40,7 @@ module Whois
|
|
40
40
|
when "active" then :registered
|
41
41
|
when "not registered" then :available
|
42
42
|
else
|
43
|
-
|
44
|
-
"Please report the issue at http://github.com/weppos/whois/issues"
|
43
|
+
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
45
44
|
end
|
46
45
|
end
|
47
46
|
end
|
@@ -40,9 +40,10 @@ module Whois
|
|
40
40
|
when "active" then :registered
|
41
41
|
when "not registered" then :available
|
42
42
|
else
|
43
|
-
|
44
|
-
"Please report the issue at http://github.com/weppos/whois/issues"
|
43
|
+
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
45
44
|
end
|
45
|
+
else
|
46
|
+
Whois.bug!(ParserError, "Unable to parse status.")
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
@@ -40,9 +40,10 @@ module Whois
|
|
40
40
|
when "active" then :registered
|
41
41
|
when "not registered" then :available
|
42
42
|
else
|
43
|
-
|
44
|
-
"Please report the issue at http://github.com/weppos/whois/issues"
|
43
|
+
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
45
44
|
end
|
45
|
+
else
|
46
|
+
Whois.bug!(ParserError, "Unable to parse status.")
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
@@ -39,8 +39,7 @@ module Whois
|
|
39
39
|
case $1.downcase
|
40
40
|
when "paid and in zone" then :registered
|
41
41
|
else
|
42
|
-
|
43
|
-
"Please report the issue at http://github.com/weppos/whois/issues"
|
42
|
+
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
44
43
|
end
|
45
44
|
else
|
46
45
|
:available
|
@@ -48,7 +47,7 @@ module Whois
|
|
48
47
|
end
|
49
48
|
|
50
49
|
property_supported :available? do
|
51
|
-
@available ||= !!(content_for_scanner =~ /%
|
50
|
+
@available ||= !!(content_for_scanner =~ /%ERROR:101: no entries found/)
|
52
51
|
end
|
53
52
|
|
54
53
|
property_supported :registered? do
|
@@ -0,0 +1,71 @@
|
|
1
|
+
#
|
2
|
+
# = Ruby Whois
|
3
|
+
#
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# Category:: Net
|
8
|
+
# Package:: Whois
|
9
|
+
# Author:: Simone Carletti <weppos@weppos.net>
|
10
|
+
# License:: MIT License
|
11
|
+
#
|
12
|
+
#--
|
13
|
+
#
|
14
|
+
#++
|
15
|
+
|
16
|
+
|
17
|
+
require 'whois/answer/parser/base'
|
18
|
+
|
19
|
+
|
20
|
+
module Whois
|
21
|
+
class Answer
|
22
|
+
class Parser
|
23
|
+
|
24
|
+
#
|
25
|
+
# = whois.nic.dz parser
|
26
|
+
#
|
27
|
+
# Parser for the whois.nic.dz server.
|
28
|
+
#
|
29
|
+
# NOTE: This parser is just a stub and provides only a few basic methods
|
30
|
+
# to check for domain availability and get domain status.
|
31
|
+
# Please consider to contribute implementing missing methods.
|
32
|
+
# See WhoisNicIt parser for an explanation of all available methods
|
33
|
+
# and examples.
|
34
|
+
#
|
35
|
+
class WhoisNicDz < Base
|
36
|
+
|
37
|
+
property_supported :status do
|
38
|
+
@status ||= if content_for_scanner =~ /ETAT:\.+(.*?)\n/
|
39
|
+
case $1.downcase
|
40
|
+
when "actif" then :registered
|
41
|
+
else
|
42
|
+
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
43
|
+
end
|
44
|
+
else
|
45
|
+
:available
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
property_supported :available? do
|
50
|
+
@available ||= !!(content_for_scanner =~ /^NO OBJECT FOUND!$/)
|
51
|
+
end
|
52
|
+
|
53
|
+
property_supported :registered? do
|
54
|
+
@registered ||= !available?
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
property_not_supported :created_on
|
59
|
+
|
60
|
+
property_not_supported :updated_on
|
61
|
+
|
62
|
+
property_not_supported :expires_on
|
63
|
+
|
64
|
+
|
65
|
+
property_not_supported :nameservers
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
#
|
2
|
+
# = Ruby Whois
|
3
|
+
#
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# Category:: Net
|
8
|
+
# Package:: Whois
|
9
|
+
# Author:: Simone Carletti <weppos@weppos.net>
|
10
|
+
# License:: MIT License
|
11
|
+
#
|
12
|
+
#--
|
13
|
+
#
|
14
|
+
#++
|
15
|
+
|
16
|
+
|
17
|
+
require 'whois/answer/parser/base'
|
18
|
+
|
19
|
+
|
20
|
+
module Whois
|
21
|
+
class Answer
|
22
|
+
class Parser
|
23
|
+
|
24
|
+
#
|
25
|
+
# = whois.nic.gs parser
|
26
|
+
#
|
27
|
+
# Parser for the whois.nic.gs server.
|
28
|
+
#
|
29
|
+
# NOTE: This parser is just a stub and provides only a few basic methods
|
30
|
+
# to check for domain availability and get domain status.
|
31
|
+
# Please consider to contribute implementing missing methods.
|
32
|
+
# See WhoisNicIt parser for an explanation of all available methods
|
33
|
+
# and examples.
|
34
|
+
#
|
35
|
+
class WhoisNicGs < Base
|
36
|
+
|
37
|
+
property_supported :status do
|
38
|
+
@status ||= if content_for_scanner =~ /Status:\s+(.*?)\n/
|
39
|
+
case $1.downcase
|
40
|
+
when "active" then :registered
|
41
|
+
when "not registered" then :available
|
42
|
+
else
|
43
|
+
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
44
|
+
end
|
45
|
+
else
|
46
|
+
Whois.bug!(ParserError, "Unable to parse status.")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
property_supported :available? do
|
51
|
+
@available ||= (status == :available)
|
52
|
+
end
|
53
|
+
|
54
|
+
property_supported :registered? do
|
55
|
+
@registered ||= !available?
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
property_supported :created_on do
|
60
|
+
@created_on ||= if content_for_scanner =~ /Created:\s+(.*)\n/
|
61
|
+
Time.parse($1)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
property_supported :updated_on do
|
66
|
+
@updated_on ||= if content_for_scanner =~ /Modified:\s+(.*)\n/
|
67
|
+
Time.parse($1)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
property_supported :expires_on do
|
72
|
+
@expires_on ||= if content_for_scanner =~ /Expires:\s+(.*)\n/
|
73
|
+
Time.parse($1)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
property_supported :nameservers do
|
79
|
+
@nameservers ||= if content_for_scanner =~ /Name Servers:\n((.+\n)+)\n/
|
80
|
+
$1.split("\n").map(&:strip)
|
81
|
+
else
|
82
|
+
[]
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
#
|
2
|
+
# = Ruby Whois
|
3
|
+
#
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# Category:: Net
|
8
|
+
# Package:: Whois
|
9
|
+
# Author:: Simone Carletti <weppos@weppos.net>
|
10
|
+
# License:: MIT License
|
11
|
+
#
|
12
|
+
#--
|
13
|
+
#
|
14
|
+
#++
|
15
|
+
|
16
|
+
|
17
|
+
require 'whois/answer/parser/base'
|
18
|
+
|
19
|
+
|
20
|
+
module Whois
|
21
|
+
class Answer
|
22
|
+
class Parser
|
23
|
+
|
24
|
+
#
|
25
|
+
# = whois.nic.ir parser
|
26
|
+
#
|
27
|
+
# Parser for the whois.nic.ir server.
|
28
|
+
#
|
29
|
+
# NOTE: This parser is just a stub and provides only a few basic methods
|
30
|
+
# to check for domain availability and get domain status.
|
31
|
+
# Please consider to contribute implementing missing methods.
|
32
|
+
# See WhoisNicIt parser for an explanation of all available methods
|
33
|
+
# and examples.
|
34
|
+
#
|
35
|
+
class WhoisNicIr < Base
|
36
|
+
|
37
|
+
property_supported :status do
|
38
|
+
@status ||= if available?
|
39
|
+
:available
|
40
|
+
else
|
41
|
+
:registered
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
property_supported :available? do
|
46
|
+
@available ||= !!(content_for_scanner =~ /%ERROR:101: no entries found/)
|
47
|
+
end
|
48
|
+
|
49
|
+
property_supported :registered? do
|
50
|
+
@registered ||= !available?
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
property_not_supported :created_on
|
55
|
+
|
56
|
+
property_supported :updated_on do
|
57
|
+
@updated_on ||= if content_for_scanner =~ /last-updated:\s+(.*)\n/
|
58
|
+
Time.parse($1)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
property_not_supported :expires_on
|
63
|
+
|
64
|
+
|
65
|
+
property_supported :nameservers do
|
66
|
+
@nameservers ||= content_for_scanner.scan(/nserver:\s+(.+)\n/).flatten
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -35,17 +35,23 @@ module Whois
|
|
35
35
|
class WhoisPandiOrId < Base
|
36
36
|
|
37
37
|
property_supported :status do
|
38
|
-
@status ||= if content_for_scanner =~ /domain-status:\s+(
|
39
|
-
$1
|
38
|
+
@status ||= if content_for_scanner =~ /domain-status:\s+(.+)\n/
|
39
|
+
case $1.downcase
|
40
|
+
when "object is active" then :registered
|
41
|
+
else
|
42
|
+
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
43
|
+
end
|
44
|
+
else
|
45
|
+
:available
|
40
46
|
end
|
41
47
|
end
|
42
48
|
|
43
49
|
property_supported :available? do
|
44
|
-
@available
|
50
|
+
@available ||= !!(content_for_scanner =~ /%ERROR:101: no entries found/)
|
45
51
|
end
|
46
52
|
|
47
53
|
property_supported :registered? do
|
48
|
-
!available?
|
54
|
+
@registered ||= !available?
|
49
55
|
end
|
50
56
|
|
51
57
|
|
@@ -0,0 +1,81 @@
|
|
1
|
+
#
|
2
|
+
# = Ruby Whois
|
3
|
+
#
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
5
|
+
#
|
6
|
+
#
|
7
|
+
# Category:: Net
|
8
|
+
# Package:: Whois
|
9
|
+
# Author:: Simone Carletti <weppos@weppos.net>
|
10
|
+
# License:: MIT License
|
11
|
+
#
|
12
|
+
#--
|
13
|
+
#
|
14
|
+
#++
|
15
|
+
|
16
|
+
|
17
|
+
require 'whois/answer/parser/base'
|
18
|
+
|
19
|
+
|
20
|
+
module Whois
|
21
|
+
class Answer
|
22
|
+
class Parser
|
23
|
+
|
24
|
+
#
|
25
|
+
# = whois.usp.ac.fj parser
|
26
|
+
#
|
27
|
+
# Parser for the whois.usp.ac.fj server.
|
28
|
+
#
|
29
|
+
# NOTE: This parser is just a stub and provides only a few basic methods
|
30
|
+
# to check for domain availability and get domain status.
|
31
|
+
# Please consider to contribute implementing missing methods.
|
32
|
+
# See WhoisNicIt parser for an explanation of all available methods
|
33
|
+
# and examples.
|
34
|
+
#
|
35
|
+
class WhoisUspAcFj < Base
|
36
|
+
|
37
|
+
property_supported :status do
|
38
|
+
@status ||= if content_for_scanner =~ /Status:\s+(.*?)\n/
|
39
|
+
case $1.downcase
|
40
|
+
when "active" then :registered
|
41
|
+
else
|
42
|
+
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
43
|
+
end
|
44
|
+
else
|
45
|
+
:available
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
property_supported :available? do
|
50
|
+
@available ||= !!(content_for_scanner =~ /^The domain (.+?) was not found!$/)
|
51
|
+
end
|
52
|
+
|
53
|
+
property_supported :registered? do
|
54
|
+
@registered ||= !available?
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
property_not_supported :created_on
|
59
|
+
|
60
|
+
property_not_supported :updated_on
|
61
|
+
|
62
|
+
property_supported :expires_on do
|
63
|
+
@expires_on ||= if content_for_scanner =~ /Expires:\s+(.*)\n/
|
64
|
+
Time.parse($1)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
property_supported :nameservers do
|
70
|
+
@nameservers ||= if content_for_scanner =~ /Domain servers:\n\n((.+\n)+)\n/
|
71
|
+
$1.split("\n").map { |value| value.strip.downcase }
|
72
|
+
else
|
73
|
+
[]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -64,7 +64,7 @@ Whois::Server.define :tld, ".aw", nil, {:adapter=>Whois::Server::Adapters::None}
|
|
64
64
|
Whois::Server.define :tld, ".ax", nil, {:adapter=>Whois::Server::Adapters::None}
|
65
65
|
Whois::Server.define :tld, ".az", nil, {:web=>"http://www.nic.az/AzCheck.htm", :adapter=>Whois::Server::Adapters::Web}
|
66
66
|
Whois::Server.define :tld, ".ba", nil, {:web=>"http://www.nic.ba/stream/whois/", :adapter=>Whois::Server::Adapters::Web}
|
67
|
-
Whois::Server.define :tld, ".bb", nil, {:web=>"http://
|
67
|
+
Whois::Server.define :tld, ".bb", nil, {:web=>"http://whois.telecoms.gov.bb/search_domain.php", :adapter=>Whois::Server::Adapters::Web}
|
68
68
|
Whois::Server.define :tld, ".bd", nil, {:adapter=>Whois::Server::Adapters::Web, :web=>"http://whois.btcl.net.bd/"}
|
69
69
|
Whois::Server.define :tld, ".be", "whois.dns.be"
|
70
70
|
Whois::Server.define :tld, ".bf", nil, {:adapter=>Whois::Server::Adapters::None}
|
@@ -175,7 +175,7 @@ Whois::Server.define :tld, ".la", "whois.nic.la"
|
|
175
175
|
Whois::Server.define :tld, ".lb", nil, {:adapter=>Whois::Server::Adapters::Web, :web=>"http://www.aub.edu.lb/lbdr/"}
|
176
176
|
Whois::Server.define :tld, ".lc", "whois.afilias-grs.info", {:adapter=>Whois::Server::Adapters::Afilias}
|
177
177
|
Whois::Server.define :tld, ".li", "whois.nic.li"
|
178
|
-
Whois::Server.define :tld, ".lk",
|
178
|
+
Whois::Server.define :tld, ".lk", nil, {:adapter=>Whois::Server::Adapters::None}
|
179
179
|
Whois::Server.define :tld, ".lr", nil, {:adapter=>Whois::Server::Adapters::None}
|
180
180
|
Whois::Server.define :tld, ".ls", nil, {:adapter=>Whois::Server::Adapters::Web, :web=>"http://www.co.ls/co.asp"}
|
181
181
|
Whois::Server.define :tld, ".lt", "whois.domreg.lt"
|
@@ -228,7 +228,7 @@ Whois::Server.define :tld, ".pl", "whois.dns.pl"
|
|
228
228
|
Whois::Server.define :tld, ".pm", "whois.nic.fr"
|
229
229
|
Whois::Server.define :tld, ".pn", nil, {:web=>"http://www.pitcairn.pn/PnRegistry/", :adapter=>Whois::Server::Adapters::Web}
|
230
230
|
Whois::Server.define :tld, ".pr", "whois.nic.pr"
|
231
|
-
Whois::Server.define :tld, ".ps",
|
231
|
+
Whois::Server.define :tld, ".ps", "whois.pnina.ps"
|
232
232
|
Whois::Server.define :tld, ".pt", "whois.dns.pt"
|
233
233
|
Whois::Server.define :tld, ".pw", nil, {:adapter=>Whois::Server::Adapters::None}
|
234
234
|
Whois::Server.define :tld, ".py", nil, {:web=>"http://www.nic.py/consultas.html", :adapter=>Whois::Server::Adapters::Web}
|
data/lib/whois/version.rb
CHANGED
data/whois.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{whois}
|
5
|
-
s.version = "1.3.
|
5
|
+
s.version = "1.3.8"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Simone Carletti"]
|
9
|
-
s.date = %q{2010-
|
9
|
+
s.date = %q{2010-10-07}
|
10
10
|
s.default_executable = %q{ruby-whois}
|
11
11
|
s.description = %q{ Whois is an intelligent WHOIS client and parser written in pure Ruby. It can query registry data for IPv4, IPv6 and top level domains, parse and convert responses into easy-to-use Ruby objects.
|
12
12
|
}
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: whois
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 9
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 1.3.
|
9
|
+
- 9
|
10
|
+
version: 1.3.9
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Simone Carletti
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-10-
|
18
|
+
date: 2010-10-13 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -92,11 +92,14 @@ files:
|
|
92
92
|
- lib/whois/answer/parser/whois.eenet.ee.rb
|
93
93
|
- lib/whois/answer/parser/whois.eu.org.rb
|
94
94
|
- lib/whois/answer/parser/whois.eu.rb
|
95
|
+
- lib/whois/answer/parser/whois.ficora.fi.rb
|
96
|
+
- lib/whois/answer/parser/whois.gg.rb
|
95
97
|
- lib/whois/answer/parser/whois.hkdnr.net.hk.rb
|
96
98
|
- lib/whois/answer/parser/whois.hkirc.hk.rb
|
97
99
|
- lib/whois/answer/parser/whois.iana.org.rb
|
98
100
|
- lib/whois/answer/parser/whois.in.ua.rb
|
99
101
|
- lib/whois/answer/parser/whois.isnic.is.rb
|
102
|
+
- lib/whois/answer/parser/whois.isoc.org.il.rb
|
100
103
|
- lib/whois/answer/parser/whois.jprs.jp.rb
|
101
104
|
- lib/whois/answer/parser/whois.meregistry.net.rb
|
102
105
|
- lib/whois/answer/parser/whois.museum.rb
|
@@ -120,14 +123,17 @@ files:
|
|
120
123
|
- lib/whois/answer/parser/whois.nic.coop.rb
|
121
124
|
- lib/whois/answer/parser/whois.nic.cx.rb
|
122
125
|
- lib/whois/answer/parser/whois.nic.cz.rb
|
126
|
+
- lib/whois/answer/parser/whois.nic.dz.rb
|
123
127
|
- lib/whois/answer/parser/whois.nic.ec.rb
|
124
128
|
- lib/whois/answer/parser/whois.nic.fr.rb
|
125
129
|
- lib/whois/answer/parser/whois.nic.gl.rb
|
126
130
|
- lib/whois/answer/parser/whois.nic.gov.rb
|
131
|
+
- lib/whois/answer/parser/whois.nic.gs.rb
|
127
132
|
- lib/whois/answer/parser/whois.nic.ht.rb
|
128
133
|
- lib/whois/answer/parser/whois.nic.hu.rb
|
129
134
|
- lib/whois/answer/parser/whois.nic.im.rb
|
130
135
|
- lib/whois/answer/parser/whois.nic.io.rb
|
136
|
+
- lib/whois/answer/parser/whois.nic.ir.rb
|
131
137
|
- lib/whois/answer/parser/whois.nic.it.rb
|
132
138
|
- lib/whois/answer/parser/whois.nic.kz.rb
|
133
139
|
- lib/whois/answer/parser/whois.nic.la.rb
|
@@ -164,6 +170,7 @@ files:
|
|
164
170
|
- lib/whois/answer/parser/whois.samoanic.ws.rb
|
165
171
|
- lib/whois/answer/parser/whois.srs.net.nz.rb
|
166
172
|
- lib/whois/answer/parser/whois.tonic.to.rb
|
173
|
+
- lib/whois/answer/parser/whois.usp.ac.fj.rb
|
167
174
|
- lib/whois/answer/parser/whois.za.net.rb
|
168
175
|
- lib/whois/answer/parser/whois.za.org.rb
|
169
176
|
- lib/whois/answer/parser.rb
|