whois 1.2.1 → 1.2.2

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 (53) hide show
  1. data/CHANGELOG.rdoc +23 -0
  2. data/Manifest +27 -4
  3. data/README.rdoc +5 -8
  4. data/Rakefile +14 -0
  5. data/data/ip_del_list +11 -3
  6. data/data/servers_charset_list +2 -1
  7. data/data/tld_serv_list +15 -7
  8. data/lib/whois/answer/contact.rb +15 -15
  9. data/lib/whois/answer/parser/NOTES.txt +10 -13
  10. data/lib/whois/answer/parser/saudinic.net.sa.rb +36 -0
  11. data/lib/whois/answer/parser/whois.audns.net.au.rb +71 -0
  12. data/lib/whois/answer/parser/whois.ausregistry.net.au.rb +3 -39
  13. data/lib/whois/answer/parser/whois.cnnic.net.cn.rb +0 -1
  14. data/lib/whois/answer/parser/whois.jprs.jp.rb +3 -3
  15. data/lib/whois/answer/parser/whois.nic.co.rb +77 -0
  16. data/lib/whois/answer/parser/whois.nic.net.sa.rb +73 -0
  17. data/lib/whois/answer/parser/whois.tonic.to.rb +108 -0
  18. data/lib/whois/answer/parser.rb +5 -5
  19. data/lib/whois/answer/part.rb +1 -1
  20. data/lib/whois/answer/registrar.rb +4 -4
  21. data/lib/whois/client.rb +22 -10
  22. data/lib/whois/definitions/ipv4.rb +11 -3
  23. data/lib/whois/definitions/ipv4.txt +226 -0
  24. data/lib/whois/definitions/ipv6.txt +32 -0
  25. data/lib/whois/definitions/tlds.rb +12 -6
  26. data/lib/whois/definitions/tlds.txt +360 -0
  27. data/lib/whois/version.rb +2 -2
  28. data/lib/whois.rb +36 -17
  29. data/test/list_tld +21 -15
  30. data/test/testcases/responses/{whois.ausregistry.net.au → whois.audns.net.au}/available.txt +0 -0
  31. data/test/testcases/responses/{whois.ausregistry.net.au → whois.audns.net.au}/registered.txt +0 -0
  32. data/test/testcases/responses/whois.jprs.jp/jp/available.txt +17 -0
  33. data/test/testcases/responses/whois.jprs.jp/{registered.txt → jp/registered.txt} +0 -0
  34. data/test/testcases/responses/whois.jprs.jp/ne.jp/available.txt +17 -0
  35. data/test/testcases/responses/whois.jprs.jp/ne.jp/registered.txt +19 -0
  36. data/test/testcases/responses/whois.nic.co/available.txt +28 -0
  37. data/test/testcases/responses/whois.nic.co/registered.txt +82 -0
  38. data/test/testcases/responses/whois.nic.net.sa/available.txt +5 -0
  39. data/test/testcases/responses/whois.nic.net.sa/registered.txt +17 -0
  40. data/test/testcases/responses/whois.tonic.to/1.txt +1 -0
  41. data/test/testcases/responses/whois.tonic.to/available.txt +2 -0
  42. data/test/testcases/responses/whois.tonic.to/incomplete.txt +1 -0
  43. data/test/testcases/responses/whois.tonic.to/registered.txt +3 -0
  44. data/test/whois/answer/parser/saudinic.net.sa_test.rb +12 -0
  45. data/test/whois/answer/parser/whois.audns.net.au_test.rb +70 -0
  46. data/test/whois/answer/parser/whois.ausregistry.net.au_test.rb +3 -61
  47. data/test/whois/answer/parser/whois.jprs.jp_test.rb +93 -14
  48. data/test/whois/answer/parser/whois.nic.co_test.rb +64 -0
  49. data/test/whois/answer/parser/whois.nic.net.sa_test.rb +84 -0
  50. data/test/whois/answer/parser/whois.tonic.to_test.rb +125 -0
  51. data/whois.gemspec +5 -5
  52. metadata +44 -8
  53. data/test/testcases/responses/whois.jprs.jp/available.txt +0 -8
@@ -0,0 +1,77 @@
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.co parser
26
+ #
27
+ # Parser for the whois.nic.co 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 WhoisNicCo < Base
36
+
37
+ property_supported :status do
38
+ @status ||= content_for_scanner.scan(/Domain Status:\s+(.*?)\n/).flatten
39
+ end
40
+
41
+ property_supported :available? do
42
+ @available ||= !!(content_for_scanner =~ /Not found:/)
43
+ end
44
+
45
+ property_supported :registered? do
46
+ !available?
47
+ end
48
+
49
+
50
+ property_supported :created_on do
51
+ @created_on ||= if content_for_scanner =~ /Domain Registration Date:\s+(.*)\n/
52
+ Time.parse($1)
53
+ end
54
+ end
55
+
56
+ property_supported :updated_on do
57
+ @updated_on ||= if content_for_scanner =~ /Domain Last Updated Date:\s+(.*)\n/
58
+ Time.parse($1)
59
+ end
60
+ end
61
+
62
+ property_supported :expires_on do
63
+ @expires_on ||= if content_for_scanner =~ /Domain Expiration Date:\s+(.*)\n/
64
+ Time.parse($1)
65
+ end
66
+ end
67
+
68
+
69
+ property_supported :nameservers do
70
+ @nameservers ||= content_for_scanner.scan(/Name Server:\s+(.*)\n/).flatten.map(&:downcase)
71
+ end
72
+
73
+ end
74
+
75
+ end
76
+ end
77
+ 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.net.sa parser
26
+ #
27
+ # Parser for the whois.nic.net.sa 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 WhoisNicNetSa < 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 =~ /^No match\.$/)
47
+ end
48
+
49
+ property_supported :registered? do
50
+ @registered ||= !available?
51
+ end
52
+
53
+
54
+ property_supported :created_on do
55
+ @created_on ||= if content_for_scanner =~ /reg-date:\s+(.*)\n/
56
+ Time.parse($1)
57
+ end
58
+ end
59
+
60
+ property_not_supported :updated_on
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
@@ -0,0 +1,108 @@
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.tonic.to parser
26
+ #
27
+ # Parser for the whois.tonic.to server.
28
+ #
29
+ class WhoisTonicTo < Base
30
+
31
+ property_not_supported :disclaimer
32
+
33
+
34
+ property_not_supported :domain
35
+
36
+ property_not_supported :domain_id
37
+
38
+
39
+ property_not_supported :referral_whois
40
+
41
+ property_not_supported :referral_url
42
+
43
+
44
+ property_supported :status do
45
+ @status ||= if incomplete_response?
46
+ :unknown
47
+ else
48
+ if available?
49
+ :available
50
+ else
51
+ :registered
52
+ end
53
+ end
54
+ end
55
+
56
+ property_supported :available? do
57
+ @available ||= (!incomplete_response? && !!(content_for_scanner =~ /No match for/))
58
+ end
59
+
60
+ property_supported :registered? do
61
+ @registered ||= (!incomplete_response? && !available?)
62
+ end
63
+
64
+
65
+ property_not_supported :created_on
66
+
67
+ property_not_supported :updated_on
68
+
69
+ property_not_supported :expires_on
70
+
71
+
72
+ property_not_supported :registrar
73
+
74
+
75
+ property_not_supported :registrant_contact
76
+
77
+ property_not_supported :admin_contact
78
+
79
+ property_not_supported :technical_contact
80
+
81
+
82
+ property_not_supported :nameservers
83
+
84
+
85
+ property_supported :changed? do |other|
86
+ !unchanged?(other)
87
+ end
88
+
89
+ property_supported :unchanged? do |other|
90
+ (self === other) ||
91
+ (self.content == other.content)
92
+ end
93
+
94
+
95
+ protected
96
+
97
+ # Very often the .to server returns a partial response, which is a response
98
+ # containing an emtpy line.
99
+ # It seems to be a very poorly-designed throttle mecanism.
100
+ def incomplete_response?
101
+ content_for_scanner.strip == ""
102
+ end
103
+
104
+ end
105
+
106
+ end
107
+ end
108
+ end
@@ -148,7 +148,7 @@ module Whois
148
148
  end
149
149
 
150
150
 
151
- # Public: Returns the proper parser instance for given <tt>part</tt>.
151
+ # Returns the proper parser instance for given <tt>part</tt>.
152
152
  # The parser class is selected according to the
153
153
  # value of the <tt>#host</tt> attribute for given <tt>part</tt>.
154
154
  #
@@ -170,7 +170,7 @@ module Whois
170
170
  parser_klass(part.host).new(part)
171
171
  end
172
172
 
173
- # Public: Detects the proper parser class according to given <tt>host</tt>
173
+ # Detects the proper parser class according to given <tt>host</tt>
174
174
  # and returns the class constant.
175
175
  #
176
176
  # This method autoloads missing parser classes. If you want to define
@@ -206,7 +206,7 @@ module Whois
206
206
  Parser::Blank
207
207
  end
208
208
 
209
- # Public: Converts <tt>host</tt> to the corresponding parser class name.
209
+ # Converts <tt>host</tt> to the corresponding parser class name.
210
210
  #
211
211
  # host - A String with the host
212
212
  #
@@ -224,7 +224,7 @@ module Whois
224
224
  gsub(/(?:^|_)(.)/) { $1.upcase }
225
225
  end
226
226
 
227
- # Public: Requires the file at <tt>whois/answer/parser/#{name}</tt>.
227
+ # Requires the file at <tt>whois/answer/parser/#{name}</tt>.
228
228
  #
229
229
  # name - A string with the file name
230
230
  #
@@ -235,7 +235,7 @@ module Whois
235
235
  end
236
236
 
237
237
 
238
- def self.properties # :nodoc
238
+ def self.properties # :nodoc:
239
239
  Whois.deprecate("Whois::Answer::Parser.properties is deprecated. Use the Whois::Answer::Parser::PROPERTIES constant.")
240
240
  PROPERTIES
241
241
  end
@@ -24,7 +24,7 @@ module Whois
24
24
  # = Part
25
25
  #
26
26
  # A single <tt>Whois::Answer</tt> fragment. For instance,
27
- # in case of thin server, an <tt>Whois::Answer</tt> may be composed by
27
+ # in case of thin server, a <tt>Whois::Answer</tt> may be composed by
28
28
  # one or more parts corresponding to all responses
29
29
  # returned by the WHOIS servers.
30
30
  #
@@ -27,10 +27,10 @@ module Whois
27
27
  #
28
28
  # A Registrar is composed by the following attributes:
29
29
  #
30
- # <tt>:id</tt>::
31
- # <tt>:name</tt>::
32
- # <tt>:organization</tt>::
33
- # <tt>:url</tt>::
30
+ # * <tt>:id</tt>::
31
+ # * <tt>:name</tt>::
32
+ # * <tt>:organization</tt>::
33
+ # * <tt>:url</tt>::
34
34
  #
35
35
  # Be aware that every WHOIS server can return a different number of details
36
36
  # or no details at all.
data/lib/whois/client.rb CHANGED
@@ -21,7 +21,7 @@ module Whois
21
21
 
22
22
  class Client
23
23
 
24
- # The maximum time to run a whois query expressed in seconds
24
+ # The Integer maximum time to run a whois query, expressed in seconds.
25
25
  DEFAULT_TIMEOUT = 10
26
26
 
27
27
  attr_accessor :timeout
@@ -31,23 +31,30 @@ module Whois
31
31
  # :call-seq:
32
32
  # new { |client| ... } => client
33
33
  # new(options = {}) { |client| ... } => client
34
- #
35
- # Initializes a new Whois::Client with <tt>options</tt>.
36
- #
37
- # If block is given, yields self.
38
- #
34
+ #
35
+ # Initializes a new <tt>Whois::Client</tt> with <tt>options</tt>.
36
+ #
37
+ # options - The Hash options used to refine the selection (default: {}):
38
+ # :timeout - The Integer script timeout, expressed in seconds (default: DEFAULT_TIMEOUT).
39
+ #
40
+ # If <tt>block</tt> is given, yields <tt>self</tt>.
41
+ #
42
+ # Examples
43
+ #
39
44
  # client = Whois::Client.new do |c|
40
45
  # c.timeout = nil
41
46
  # end
42
47
  # client.query("google.com")
43
48
  #
49
+ #
50
+ # Returns a <tt>Whois::Client</tt>.
44
51
  def initialize(options = {}, &block)
45
52
  self.timeout = options[:timeout] || DEFAULT_TIMEOUT
46
53
  yield(self) if block_given?
47
54
  end
48
55
 
49
56
 
50
- class Query # :nodoc
57
+ class Query # :nodoc:
51
58
  # IPv6?
52
59
  # RPSL?
53
60
  # email?
@@ -59,12 +66,17 @@ module Whois
59
66
  end
60
67
 
61
68
 
62
- # Queries the right whois server for <tt>qstring</tt> and returns
63
- # a <tt>Whois::Answer</tt> instance containing the response from the server.
69
+ # Queries the right WHOIS server for <tt>qstring</tt> and returns
70
+ # the response from the server.
71
+ #
72
+ # qstring - The String to be sent as query parameter.
73
+ #
74
+ # Examples
64
75
  #
65
76
  # client.query("google.com")
66
77
  # # => #<Whois::Answer>
67
78
  #
79
+ # Returns a <tt>Whois::Answer</tt> instance.
68
80
  def query(qstring)
69
81
  string = qstring.to_s
70
82
  Timeout::timeout(timeout) do
@@ -75,4 +87,4 @@ module Whois
75
87
 
76
88
  end
77
89
 
78
- end
90
+ end
@@ -1,7 +1,9 @@
1
1
  Whois::Server.define :ipv4, "1.0.0.0/8", "whois.apnic.net"
2
2
  Whois::Server.define :ipv4, "2.0.0.0/8", "whois.ripe.net"
3
+ Whois::Server.define :ipv4, "14.0.0.0/8", "whois.apnic.net"
3
4
  Whois::Server.define :ipv4, "24.132.0.0/14", "whois.ripe.net"
4
5
  Whois::Server.define :ipv4, "27.0.0.0/8", "whois.apnic.net"
6
+ Whois::Server.define :ipv4, "31.0.0.0/8", "whois.ripe.net"
5
7
  Whois::Server.define :ipv4, "41.0.0.0/8", "whois.afrinic.net"
6
8
  Whois::Server.define :ipv4, "43.0.0.0/8", "whois.v6nic.net"
7
9
  Whois::Server.define :ipv4, "46.0.0.0/8", "whois.ripe.net"
@@ -20,14 +22,16 @@ Whois::Server.define :ipv4, "77.0.0.0/8", "whois.ripe.net"
20
22
  Whois::Server.define :ipv4, "78.0.0.0/7", "whois.ripe.net"
21
23
  Whois::Server.define :ipv4, "80.0.0.0/4", "whois.ripe.net"
22
24
  Whois::Server.define :ipv4, "96.0.0.0/6", "whois.arin.net"
25
+ Whois::Server.define :ipv4, "107.0.0.0/8", "whois.arin.net"
23
26
  Whois::Server.define :ipv4, "108.0.0.0/8", "whois.arin.net"
24
27
  Whois::Server.define :ipv4, "109.0.0.0/8", "whois.ripe.net"
25
28
  Whois::Server.define :ipv4, "110.0.0.0/7", "whois.apnic.net"
26
29
  Whois::Server.define :ipv4, "96.0.0.0/4", nil, {:adapter=>Whois::Server::Adapters::None}
27
- Whois::Server.define :ipv4, "118.32.0.0/11", "whois.nic.or.kr"
28
- Whois::Server.define :ipv4, "119.192.0.0/11", "whois.nic.or.kr"
30
+ Whois::Server.define :ipv4, "112.160.0.0/11", "whois.nic.or.kr"
29
31
  Whois::Server.define :ipv4, "115.0.0.0/12", "whois.nic.or.kr"
30
32
  Whois::Server.define :ipv4, "115.16.0.0/13", "whois.nic.or.kr"
33
+ Whois::Server.define :ipv4, "118.32.0.0/11", "whois.nic.or.kr"
34
+ Whois::Server.define :ipv4, "119.192.0.0/11", "whois.nic.or.kr"
31
35
  Whois::Server.define :ipv4, "112.0.0.0/5", "whois.apnic.net"
32
36
  Whois::Server.define :ipv4, "121.128.0.0/10", "whois.nic.or.kr"
33
37
  Whois::Server.define :ipv4, "125.128.0.0/11", "whois.nic.or.kr"
@@ -88,9 +92,14 @@ Whois::Server.define :ipv4, "165.148.0.0/15", "whois.afrinic.net"
88
92
  Whois::Server.define :ipv4, "169.208.0.0/12", "whois.apnic.net"
89
93
  Whois::Server.define :ipv4, "171.16.0.0/12", "whois.ripe.net"
90
94
  Whois::Server.define :ipv4, "171.32.0.0/15", "whois.ripe.net"
95
+ Whois::Server.define :ipv4, "175.192.0.0/10", "whois.nic.or.kr"
91
96
  Whois::Server.define :ipv4, "175.0.0.0/8", "whois.apnic.net"
97
+ Whois::Server.define :ipv4, "176.0.0.0/8", "whois.ripe.net"
98
+ Whois::Server.define :ipv4, "177.0.0.0/8", "whois.lacnic.net"
92
99
  Whois::Server.define :ipv4, "178.0.0.0/8", "whois.ripe.net"
93
100
  Whois::Server.define :ipv4, "180.0.0.0/8", "whois.apnic.net"
101
+ Whois::Server.define :ipv4, "181.0.0.0/8", "whois.lacnic.net"
102
+ Whois::Server.define :ipv4, "183.96.0.0/11", "whois.nic.or.kr"
94
103
  Whois::Server.define :ipv4, "182.0.0.0/7", "whois.apnic.net"
95
104
  Whois::Server.define :ipv4, "186.0.0.0/7", "whois.lacnic.net"
96
105
  Whois::Server.define :ipv4, "188.0.0.0/8", "whois.ripe.net"
@@ -214,5 +223,4 @@ Whois::Server.define :ipv4, "222.112.0.0/13", "whois.nic.or.kr"
214
223
  Whois::Server.define :ipv4, "222.120.0.0/15", "whois.nic.or.kr"
215
224
  Whois::Server.define :ipv4, "222.122.0.0/16", "whois.nic.or.kr"
216
225
  Whois::Server.define :ipv4, "222.232.0.0/13", "whois.nic.or.kr"
217
- Whois::Server.define :ipv4, "223.0.0.0/8", nil, {:adapter=>Whois::Server::Adapters::None}
218
226
  Whois::Server.define :ipv4, "220.0.0.0/6", "whois.apnic.net"