whois 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
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"