mlightner-universal_ruby_whois 1.2.6 → 1.2.7
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +6 -0
- data/lib/universal_ruby_whois/domain.rb +14 -0
- data/lib/universal_ruby_whois/server.rb +6 -7
- data/lib/universal_ruby_whois/server_list.rb +83 -53
- data/test/whois.rb +7 -2
- data/universal_ruby_whois.gemspec +1 -1
- metadata +3 -2
data/CHANGELOG.rdoc
CHANGED
@@ -125,6 +125,20 @@ module Whois
|
|
125
125
|
def to_s
|
126
126
|
domain.to_s rescue nil
|
127
127
|
end
|
128
|
+
def to_hash
|
129
|
+
{
|
130
|
+
:status => self.status,
|
131
|
+
:creation_date => self.creation_date,
|
132
|
+
:expiration_date => self.expiration_date,
|
133
|
+
:output => self.whois_output
|
134
|
+
}
|
135
|
+
end
|
136
|
+
def to_json
|
137
|
+
self.to_hash.to_json
|
138
|
+
end
|
139
|
+
def to_xml
|
140
|
+
self.to_hash.to_xml
|
141
|
+
end
|
128
142
|
end
|
129
143
|
|
130
144
|
end
|
@@ -13,10 +13,10 @@ module Whois
|
|
13
13
|
|
14
14
|
# The default regular expressions used when defining a new server if none are supplied.
|
15
15
|
DEFAULT_WHOIS_REGULAR_EXPRESSIONS = {
|
16
|
-
:free => /(avail|free|no match|no entr|not taken|not registered|not found)/im,
|
17
|
-
:registered => /(registered|Domain ID|domain name\s*\:|is active|is not available|exists|\bregistrant\b|Created on)/im,
|
18
|
-
:creation_date => /(Creation date|created on|created at|Commencement Date|Registration Date)\s*[\:\.\]]*\s*([\w\-\:\ \/]+)[^\n\r]*[\n\r]/im,
|
19
|
-
:expiration_date => /(expiration date|expires on|registered through|Renewal date)\s*[\:\.\]]*\s*([\w\-\:\ \/]+)[^\n\r]*[\n\r]/im,
|
16
|
+
:free => /(avail|free|no match|no entr|not taken|Available|Status\:\sNot\sRegistered|not registered|not found|No match for domain)/im,
|
17
|
+
:registered => /(registered|Domain ID|domain name\s*\:|is active|Status\:\sActive|Not available|is not available|exists|\bregistrant\b|Created on|created\:)/im,
|
18
|
+
:creation_date => /(Creation date|created on|created at|Commencement Date|Registration Date|domain_dateregistered|created\:)\s*[\:\.\]]*\s*([\w\-\:\ \/]+)[^\n\r]*[\n\r]/im,
|
19
|
+
:expiration_date => /(expiration date|expires on|registered through|Renewal date|domain_datebilleduntil|expires\:)\s*[\:\.\]]*\s*([\w\-\:\ \/]+)[^\n\r]*[\n\r]/im,
|
20
20
|
:error => /(error)/im,
|
21
21
|
:server_unavailable => /(Sorry\. Server busy\.|too many requests|been blocked)/im
|
22
22
|
}
|
@@ -24,7 +24,7 @@ module Whois
|
|
24
24
|
# The location of the 'whois' binary utility.
|
25
25
|
WHOIS_BIN = '/usr/bin/env whois'
|
26
26
|
|
27
|
-
attr_reader :tld, :nic_server, :regexes, :port, :
|
27
|
+
attr_reader :tld, :nic_server, :regexes, :port, :server_unavailable, :unavailable_response
|
28
28
|
|
29
29
|
# === Whois Server Definition
|
30
30
|
#
|
@@ -145,7 +145,7 @@ module Whois
|
|
145
145
|
end
|
146
146
|
|
147
147
|
def unavailable?
|
148
|
-
@
|
148
|
+
@server_unavailable ? true : false
|
149
149
|
end
|
150
150
|
|
151
151
|
# Retrieve the raw WHOIS server output for a domain.
|
@@ -243,4 +243,3 @@ module Whois
|
|
243
243
|
end
|
244
244
|
|
245
245
|
end
|
246
|
-
|
@@ -12,6 +12,7 @@ Whois::Server.define('at', 'whois.nic.at')
|
|
12
12
|
Whois::Server.define('bg', 'whois.digsys.bg')
|
13
13
|
Whois::Server.define('bi', 'whois.nic.bi')
|
14
14
|
Whois::Server.define('bj', 'www.nic.bj')
|
15
|
+
Whois::Server.define('br', 'whois.nic.br')
|
15
16
|
Whois::Server.define('bz', 'whois.belizenic.bz')
|
16
17
|
Whois::Server.define('cc', 'whois.nic.cc')
|
17
18
|
Whois::Server.define('cd', 'whois.nic.cd')
|
@@ -27,22 +28,22 @@ Whois::Server.define('hm', 'webhst1.capital.hm')
|
|
27
28
|
Whois::Server.define('hu', 'whois.nic.hu')
|
28
29
|
Whois::Server.define('id', 'whois.idnic.net.id')
|
29
30
|
Whois::Server.define('in', 'whois.inregistry.net')
|
31
|
+
Whois::Server.define('io', 'whois.nic.io')
|
30
32
|
Whois::Server.define('ir', 'whois.nic.ir')
|
31
33
|
Whois::Server.define('kz', 'whois.nic.kz')
|
32
34
|
Whois::Server.define('la', 'whois2.afilias-grs.net')
|
33
35
|
Whois::Server.define('ly', 'whois.lydomains.com')
|
34
36
|
Whois::Server.define('mc', 'whois.ripe.net')
|
35
|
-
Whois::Server.define('ms', 'whois.ms')
|
37
|
+
Whois::Server.define('ms', 'whois.nic.ms')
|
36
38
|
Whois::Server.define('mx', 'whois.nic.mx')
|
37
39
|
Whois::Server.define('my', 'whois.mynic.net.my')
|
38
|
-
Whois::Server.define('nu', 'whois.nic.nu')
|
39
40
|
Whois::Server.define('pl', 'whois.dns.pl')
|
40
41
|
Whois::Server.define('pm', 'whois.nic.pm')
|
41
42
|
Whois::Server.define('pro', 'whois.registrypro.pro')
|
42
43
|
Whois::Server.define('pt', 'whois.nic.pt')
|
43
44
|
Whois::Server.define('sa', 'saudinic.net.sa')
|
44
45
|
Whois::Server.define('sb', 'whois.nic.net.sb')
|
45
|
-
Whois::Server.define('
|
46
|
+
Whois::Server.define('sh', 'whois.nic.sh')
|
46
47
|
Whois::Server.define('si', 'whois.arnes.si')
|
47
48
|
Whois::Server.define('sk', 'whois.sk-nic.sk')
|
48
49
|
Whois::Server.define('sm', 'whois.ripe.net')
|
@@ -61,30 +62,31 @@ Whois::Server.define('wf', 'whois.nic.wf')
|
|
61
62
|
Whois::Server.define('ws', 'whois.tld.ws')
|
62
63
|
Whois::Server.define('yt', 'whois.nic.yt')
|
63
64
|
Whois::Server.define('us', 'whois.nic.us')
|
64
|
-
Whois::Server.define('at',
|
65
|
-
Whois::Server.define('ca',
|
66
|
-
Whois::Server.define('cc',
|
67
|
-
Whois::Server.define('ch',
|
68
|
-
Whois::Server.define('cn',
|
69
|
-
Whois::Server.define('cz',
|
70
|
-
Whois::Server.define('ee',
|
71
|
-
Whois::Server.define('gr',
|
72
|
-
Whois::Server.define('it',
|
73
|
-
Whois::Server.define('li',
|
74
|
-
Whois::Server.define('lt',
|
75
|
-
Whois::Server.define('lu',
|
76
|
-
Whois::Server.define('lv',
|
77
|
-
Whois::Server.define('ms',
|
78
|
-
Whois::Server.define('co.nz',
|
79
|
-
Whois::Server.define('nu',
|
80
|
-
Whois::Server.define('pl',
|
81
|
-
Whois::Server.define('ro',
|
82
|
-
Whois::Server.define('ru',
|
83
|
-
Whois::Server.define('se',
|
84
|
-
Whois::Server.define('sk',
|
85
|
-
Whois::Server.define('tc',
|
86
|
-
Whois::Server.define('vg',
|
87
|
-
Whois::Server.define('ws',
|
65
|
+
Whois::Server.define('at', 'whois.nic.at')
|
66
|
+
Whois::Server.define('ca', 'whois.cira.ca')
|
67
|
+
Whois::Server.define('cc', 'whois.nic.cc')
|
68
|
+
Whois::Server.define('ch', 'whois.nic.ch')
|
69
|
+
Whois::Server.define('cn', 'whois.cnnic.net.cn')
|
70
|
+
Whois::Server.define('cz', 'whois.nic.cz')
|
71
|
+
Whois::Server.define('ee', 'whois.eenet.ee')
|
72
|
+
Whois::Server.define('gr', 'https://grweb.ics.forth.gr/')
|
73
|
+
Whois::Server.define('it', 'whois.nic.it')
|
74
|
+
Whois::Server.define('li', 'whois.nic.li')
|
75
|
+
Whois::Server.define('lt', 'whois.domreg.lt')
|
76
|
+
Whois::Server.define('lu', 'whois.dns.lu')
|
77
|
+
Whois::Server.define('lv', 'whois.ripe.net')
|
78
|
+
Whois::Server.define('ms', 'whois.adamsnames.tc')
|
79
|
+
Whois::Server.define('co.nz', 'whois.domainz.net.nz')
|
80
|
+
Whois::Server.define('nu', 'whois.nic.nu')
|
81
|
+
Whois::Server.define('pl', 'whois.dns.pl')
|
82
|
+
Whois::Server.define('ro', 'whois.rotld.ro')
|
83
|
+
Whois::Server.define('ru', 'whois.ripn.net')
|
84
|
+
Whois::Server.define('se', 'whois.iis.se')
|
85
|
+
Whois::Server.define('sk', 'whois.ripe.net')
|
86
|
+
Whois::Server.define('tc', 'whois.adamsnames.tc')
|
87
|
+
Whois::Server.define('vg', 'whois.adamsnames.tc')
|
88
|
+
Whois::Server.define('ws', 'whois.worldsite.ws')
|
89
|
+
Whois::Server.define('gd', 'whois.adamsnames.tc')
|
88
90
|
|
89
91
|
#Whois::Server.define('es',"https://www.nic.es/esnic/servlet/BuscarDomSolAlta?dominio=%DOMAIN%")
|
90
92
|
#Whois::Server.define('com.es',"https://www.nic.es/esnic/servlet/BuscarDomSolAlta?dominio=%DOMAIN%")
|
@@ -104,7 +106,6 @@ Whois::Server.define(
|
|
104
106
|
:free => [%q{%DOMAIN% </a> </th> <td class="disp"> <img src="../images/icon_disp_yes.gif" alt="si" />}, 'im']
|
105
107
|
)
|
106
108
|
|
107
|
-
|
108
109
|
# By leaving out the whois server, we force it to follow the internic redirection.
|
109
110
|
Whois::Server.define(
|
110
111
|
[ 'com', 'net', 'edu' ], nil,
|
@@ -118,10 +119,13 @@ Whois::Server.define(
|
|
118
119
|
:free => /Status:\s*Active/im.invert!
|
119
120
|
)
|
120
121
|
|
121
|
-
Whois::Server.define(
|
122
|
+
Whois::Server.define(
|
123
|
+
%w(asn.au com.au id.au net.au org.au),
|
124
|
+
'whois.ausregistry.net.au',
|
122
125
|
:free => /No Data Found/im,
|
123
|
-
:registered => /
|
124
|
-
:error => /BLACKLISTED/m
|
126
|
+
:registered => /Last Modified/im,
|
127
|
+
:error => /BLACKLISTED/m
|
128
|
+
)
|
125
129
|
|
126
130
|
Whois::Server.define(
|
127
131
|
%w(hk com.hk net.hk edu.hk org.hk gov.hk idv.hk),
|
@@ -177,9 +181,9 @@ Whois::Server.define(
|
|
177
181
|
)
|
178
182
|
Whois::Server.define(
|
179
183
|
'eu',
|
180
|
-
'
|
181
|
-
:free => /
|
182
|
-
:registered => /
|
184
|
+
'whois.eu',
|
185
|
+
:free => /Nameservers\:/im.invert!,
|
186
|
+
:registered => /Nameservers\:/im,
|
183
187
|
:pending => /APPLICATION PENDING/im,
|
184
188
|
:error => /NOT ALLOWED/im
|
185
189
|
)
|
@@ -193,23 +197,23 @@ Whois::Server.define(
|
|
193
197
|
Whois::Server.define(
|
194
198
|
'name',
|
195
199
|
'whois.nic.name',
|
196
|
-
:registered => /Not available for registration./im,
|
200
|
+
:registered => /Not available for second level registration./im,
|
197
201
|
:preserved => /Not available for second level registration./im,
|
198
202
|
:free => /No match./im
|
199
203
|
)
|
200
|
-
Whois::Server.define(
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
)
|
204
|
+
# Whois::Server.define(
|
205
|
+
# 'net',
|
206
|
+
# 'whois.verisign-grs.com',
|
207
|
+
# :registered => /Domain Name:/im,
|
208
|
+
# :free => /No match for/im
|
209
|
+
# )
|
206
210
|
Whois::Server.define(
|
207
211
|
'nl',
|
208
212
|
'whois.domain-registry.nl',
|
209
|
-
:registered => /
|
210
|
-
:free => /
|
211
|
-
:error => /
|
212
|
-
:preserved => /
|
213
|
+
:registered => /active/im,
|
214
|
+
:free => /free/im,
|
215
|
+
:error => /invalid domain/im,
|
216
|
+
:preserved => /excluded/im
|
213
217
|
)
|
214
218
|
Whois::Server.define(
|
215
219
|
'org',
|
@@ -247,9 +251,10 @@ Whois::Server.define(
|
|
247
251
|
)
|
248
252
|
Whois::Server.define(
|
249
253
|
'mobi',
|
250
|
-
'whois.corenic.net',
|
251
|
-
|
252
|
-
:
|
254
|
+
# 'whois.corenic.net',
|
255
|
+
'whois.dotmobiregistry.net',
|
256
|
+
:registered => /is not registered/im.invert!,
|
257
|
+
:free => /is not registered/im
|
253
258
|
)
|
254
259
|
Whois::Server.define(
|
255
260
|
'ca',
|
@@ -257,13 +262,38 @@ Whois::Server.define(
|
|
257
262
|
:registered => /EXIST/im,
|
258
263
|
:free => /AVAIL/im
|
259
264
|
)
|
260
|
-
Whois::Server.define(
|
265
|
+
Whois::Server.define(
|
266
|
+
'asia',
|
267
|
+
'whois.nic.asia',
|
261
268
|
:registered => /Domain ID/im,
|
262
269
|
:free => /NOT FOUND/im
|
263
270
|
)
|
264
271
|
Whois::Server.define(
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
272
|
+
'co.il',
|
273
|
+
'whois.isoc.org.il',
|
274
|
+
:registered => /validity:/im,
|
275
|
+
:free => /No data was found to match the request criteria./im
|
276
|
+
)
|
277
|
+
Whois::Server.define(
|
278
|
+
'ac.uk',
|
279
|
+
'whois.ja.net',
|
280
|
+
:registered => /Domain:/im,
|
281
|
+
:free => /No such domain/im
|
282
|
+
)
|
283
|
+
Whois::Server.define(
|
284
|
+
%w(cx cm ht ki mu nf sb tl),
|
285
|
+
'whois.nic.cx',
|
286
|
+
:registered => //im,
|
287
|
+
:free => /(Not Registered|No Applications Pending)/im
|
288
|
+
)Whois::Server.define(
|
289
|
+
%w(gd tc vg ms),
|
290
|
+
'whois.adamsnames.tc',
|
291
|
+
:free => /is not registered/im,
|
292
|
+
:registered => /is registered/im
|
293
|
+
)
|
294
|
+
Whois::Server.define(
|
295
|
+
'nu',
|
296
|
+
'whois.nic.nu',
|
297
|
+
:free => /NO MATCH.*/,
|
298
|
+
:registered => /Domain Name/
|
269
299
|
)
|
data/test/whois.rb
CHANGED
@@ -3,7 +3,7 @@ require File.dirname(__FILE__) + '/../lib/universal_ruby_whois'
|
|
3
3
|
|
4
4
|
class WhoisTest < Test::Unit::TestCase
|
5
5
|
|
6
|
-
TEST_TLDS = %w(com org co.uk eu.com ru info jp)
|
6
|
+
TEST_TLDS = %w(com org co.uk eu.com ru info jp eu tc nu co.nz)
|
7
7
|
REGISTERED_DOMAIN = "google"
|
8
8
|
AVAILABLE_DOMAIN = "asdfasdfasdfcvr3rwsdc2e"
|
9
9
|
|
@@ -41,7 +41,7 @@ class WhoisTest < Test::Unit::TestCase
|
|
41
41
|
|
42
42
|
def test_expiration_date
|
43
43
|
domain = find_and_assert_domain("google.com")
|
44
|
-
assert_equal Time.local(*ParseDate.parsedate("2011-09-
|
44
|
+
assert_equal Time.local(*ParseDate.parsedate("2011-09-14")), domain.expiration_date
|
45
45
|
|
46
46
|
TEST_TLDS.each do |tld|
|
47
47
|
domain = find_and_assert_domain("#{REGISTERED_DOMAIN}.#{tld}")
|
@@ -50,6 +50,11 @@ class WhoisTest < Test::Unit::TestCase
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
+
def test_mobi_domain
|
54
|
+
domain = find_and_assert_domain("google.mobi")
|
55
|
+
assert domain.expiration_date_known?
|
56
|
+
end
|
57
|
+
|
53
58
|
protected
|
54
59
|
|
55
60
|
def find_and_assert_domain(domain)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mlightner-universal_ruby_whois
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Lightner
|
@@ -9,11 +9,12 @@ autorequire: name
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-05-16 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
17
|
+
type: :runtime
|
17
18
|
version_requirement:
|
18
19
|
version_requirements: !ruby/object:Gem::Requirement
|
19
20
|
requirements:
|