whois 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +11 -1
- data/EXAMPLES +40 -0
- data/NOTES +13 -0
- data/README +14 -2
- data/lib/data/ipv4.yaml +5 -4
- data/lib/data/ipv6.yaml +33 -0
- data/lib/server/server.rb +56 -2
- data/lib/whois.rb +98 -127
- data/test/example.rb +110 -0
- data/test/test_whois.rb +171 -0
- metadata +9 -5
data/CHANGELOG
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
= Whois CHANGELOG
|
2
2
|
|
3
|
+
== 0.4.0
|
4
|
+
|
5
|
+
* Add new list of IPv4 by whois programm of Marco d'Itri
|
6
|
+
* Fixed a bug of generate list of Ipv4-6. Now the search of good server is
|
7
|
+
made by higher mask before smaller.
|
8
|
+
* Add support of Ipv6, by IPAddr or String
|
9
|
+
* Add several unittest of Whois class
|
10
|
+
* Add Coverage of Code (89%)
|
11
|
+
* No support of ToRedo (RFC 4773) and 6To4 (RFC 3056)
|
12
|
+
|
3
13
|
== 0.3.0
|
4
14
|
|
5
15
|
* Add possibility construct the Whois Object with a IPAddr object
|
@@ -8,7 +18,7 @@
|
|
8
18
|
This information is optionnal. By default it's false.
|
9
19
|
For that the host is resolv, the second arg to Whois.new must be true
|
10
20
|
|
11
|
-
* Add request whois
|
21
|
+
* Add request whois with a host String.
|
12
22
|
|
13
23
|
== 0.2.1
|
14
24
|
|
data/EXAMPLES
CHANGED
@@ -80,3 +80,43 @@
|
|
80
80
|
|
81
81
|
# The host of this host
|
82
82
|
w.host #=> fg-in-f147.google.com
|
83
|
+
|
84
|
+
== Whois request for a Ipv6 2001:0660:: like a String
|
85
|
+
|
86
|
+
require 'rubygems'
|
87
|
+
require 'whois'
|
88
|
+
|
89
|
+
w = Whois::Whois.new '2001:0660::'
|
90
|
+
w.search_whois
|
91
|
+
|
92
|
+
# All return of request
|
93
|
+
w.all
|
94
|
+
|
95
|
+
# The ip return with object IPAddr
|
96
|
+
w.ip
|
97
|
+
|
98
|
+
# The server where the request has send
|
99
|
+
w.server
|
100
|
+
|
101
|
+
# The host of this host
|
102
|
+
w.host #=> nil
|
103
|
+
|
104
|
+
== Whois request for a Ipv6 2001:0660:: like an IPAddr Object
|
105
|
+
|
106
|
+
require 'rubygems'
|
107
|
+
require 'whois'
|
108
|
+
|
109
|
+
w = Whois::Whois.new(IPAddr.new('2001:0660::'))
|
110
|
+
w.search_whois
|
111
|
+
|
112
|
+
# All return of request
|
113
|
+
w.all
|
114
|
+
|
115
|
+
# The ip return with object IPAddr
|
116
|
+
w.ip
|
117
|
+
|
118
|
+
# The server where the request has send
|
119
|
+
w.server
|
120
|
+
|
121
|
+
# The host of this host
|
122
|
+
w.host #=> nil
|
data/NOTES
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
= Whois Release Notes
|
2
2
|
|
3
|
+
== 0.4.0
|
4
|
+
|
5
|
+
Now you can create a Whois Object with an object IPAddr (require 'ipaddr')
|
6
|
+
for a Ipv6. You can create too with a String represent an IPV6.
|
7
|
+
|
8
|
+
All system of Ipv6 is not supported now with 6to4 (RFC 3056) and TeRedo (RFC 4773)
|
9
|
+
|
10
|
+
For the Ipv6 a bug must be made with creation of IPAddr like an Ipv6. If you have
|
11
|
+
compile ruby with enable the Ipv6 Support like with several OS. If This Ipv6 hasn't
|
12
|
+
a host, the IPAddr is not construct. I ask the
|
13
|
+
question[http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/11049]
|
14
|
+
to Core Ruby.
|
15
|
+
|
3
16
|
== 0.3.0
|
4
17
|
|
5
18
|
Now you can create a Whois class with an object IPAddr (require 'ipaddr')
|
data/README
CHANGED
@@ -14,14 +14,26 @@ This library is start with work to Michael Neumann. Thank to him.
|
|
14
14
|
|
15
15
|
If you are just starting, check out the EXAMPLES[link://files/EXAMPLES.html] file.
|
16
16
|
|
17
|
+
== Test
|
18
|
+
|
19
|
+
This Class is test by Unit test with 8 tests and 53 assertions. You can see
|
20
|
+
the Coverage[link://coverage/index.html] of this class.
|
21
|
+
|
17
22
|
== Authors
|
18
23
|
|
19
24
|
Copyright (c) 2007 by Cyril Mougel (cyril.mougel@gmail.com)
|
20
25
|
|
21
|
-
If you want more information on me see my blog
|
22
|
-
it's in french, because my english is not really good
|
26
|
+
If you want more information on me see my blog[http://shingara.free.fr/blog],
|
27
|
+
it's in french, because my english is not really good. An
|
28
|
+
{english version}[HTTP://shingara.free.fr/blog_en].
|
29
|
+
exist
|
23
30
|
|
24
31
|
== License
|
25
32
|
|
26
33
|
This library is distributed under the GPL. Please see the LICENSE file.
|
27
34
|
|
35
|
+
== Thanks
|
36
|
+
|
37
|
+
This project is host by RubyForge[http://rubyforge.org], the {project
|
38
|
+
page}[http://rubyforge.org/projects/whois] is on.
|
39
|
+
|
data/lib/data/ipv4.yaml
CHANGED
@@ -39,6 +39,7 @@
|
|
39
39
|
218.224.0.0/13: Nicad
|
40
40
|
210.248.0.0/13: Nicad
|
41
41
|
210.204.0.0/14: Nicor
|
42
|
+
116.0.0.0/6: Apnic
|
42
43
|
202.24.0.0/15: Nicad
|
43
44
|
200.0.0.0/7: Lacnic
|
44
45
|
200.17.0.0/16: Nicbr
|
@@ -121,7 +122,7 @@
|
|
121
122
|
124.0.0.0/7: Apnic
|
122
123
|
58.0.0.0/7: Apnic
|
123
124
|
218.0.0.0/7: Apnic
|
124
|
-
204.0.0.0/14:
|
125
|
+
204.0.0.0/14: Ginntt
|
125
126
|
193.0.0.0/8: Ripe
|
126
127
|
200.20.0.0/16: Nicbr
|
127
128
|
192.162.0.0/16: Ripe
|
@@ -134,15 +135,14 @@
|
|
134
135
|
210.241.0.0/15: Twnic
|
135
136
|
210.216.0.0/13: Nicor
|
136
137
|
61.72.0.0/13: Nicor
|
137
|
-
122.0.0.0/7: Apnic
|
138
138
|
192.114.0.0/15: Ripe
|
139
139
|
80.0.0.0/5: Ripe
|
140
140
|
210.188.0.0/14: Nicad
|
141
141
|
210.178.0.0/15: Nicor
|
142
142
|
210.90.0.0/15: Nicor
|
143
143
|
203.180.0.0/14: Nicad
|
144
|
-
146.48.0.0/16: Ripe
|
145
144
|
202.208.0.0/12: Nicad
|
145
|
+
146.48.0.0/16: Ripe
|
146
146
|
163.160.0.0/12: Ripe
|
147
147
|
192.72.254.0/24: Arin
|
148
148
|
213.154.32.0/19: Afrinic
|
@@ -165,13 +165,13 @@
|
|
165
165
|
210.160.0.0/12: Nicad
|
166
166
|
210.65.0.0/16: Twnic
|
167
167
|
160.216.0.0/14: Ripe
|
168
|
+
92.0.0.0/7: Ripe
|
168
169
|
164.148.0.0/14: Afrinic
|
169
170
|
189.0.0.0/8: Lacnic
|
170
171
|
202.23.0.0/16: Nicad
|
171
172
|
145.0.0.0/8: Ripe
|
172
173
|
204.0.0.0/6: Arin
|
173
174
|
165.143.0.0/16: Afrinic
|
174
|
-
121.0.0.0/8: Apnic
|
175
175
|
169.208.0.0/12: Apnic
|
176
176
|
211.104.0.0/13: Nicor
|
177
177
|
210.196.0.0/14: Nicad
|
@@ -194,6 +194,7 @@
|
|
194
194
|
210.62.252.0/22: Twnic
|
195
195
|
203.224.0.0/11: Nicor
|
196
196
|
77.0.0.0/8: Ripe
|
197
|
+
120.0.0.0/6: Apnic
|
197
198
|
88.0.0.0/6: Ripe
|
198
199
|
188.0.0.0/8: Ripe
|
199
200
|
202.13.0.0/16: Nicad
|
data/lib/data/ipv6.yaml
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
---
|
2
|
+
2001:4A00::/23: Ripe
|
3
|
+
2001:4600::/23: Ripe
|
4
|
+
2001:4200::/23: Afrinic
|
5
|
+
2001:0200::/23: Apnic
|
6
|
+
2400:0000::/12: Apnic
|
7
|
+
2001:1C00::/22: Ripe
|
8
|
+
2001:8000::/18: Apnic
|
9
|
+
2001:1800::/23: Arin
|
10
|
+
2001:0600::/23: Ripe
|
11
|
+
3FFE:0000::/16: Ipv6Bone
|
12
|
+
2001:5000::/20: Ripe
|
13
|
+
2001:1A00::/23: Ripe
|
14
|
+
2001:0C00::/22: Apnic
|
15
|
+
2001:0800::/22: Ripe
|
16
|
+
2800:0000::/12: Lacnic
|
17
|
+
2620:0000::/23: Arin
|
18
|
+
2001:0400::/23: Arin
|
19
|
+
2C00:0000::/12: Afrinic
|
20
|
+
2610:0000::/23: Arin
|
21
|
+
2003:0000::/18: Ripe
|
22
|
+
2001:4000::/23: Ripe
|
23
|
+
2600:0000::/12: Arin
|
24
|
+
2002:0000::/16: Ipv6ToIpv4
|
25
|
+
2001:2000::/19: Ripe
|
26
|
+
2001:0000::/32: Teredo
|
27
|
+
2A00:0000::/12: Ripe
|
28
|
+
2001:4C00::/22: Ripe
|
29
|
+
2400:0000::/20: Kornet
|
30
|
+
2001:4800::/23: Arin
|
31
|
+
2001:4400::/23: Apnic
|
32
|
+
2001:1400::/22: Ripe
|
33
|
+
2001:1000::/22: Lacnic
|
data/lib/server/server.rb
CHANGED
@@ -3,7 +3,7 @@ module Server
|
|
3
3
|
# Define if the module has or not the Class in this module
|
4
4
|
def self.class_exist? str
|
5
5
|
begin
|
6
|
-
self.class_eval str
|
6
|
+
self.class_eval str.to_s
|
7
7
|
return true
|
8
8
|
rescue NameError
|
9
9
|
return false
|
@@ -13,7 +13,6 @@ module Server
|
|
13
13
|
# Class For define a model of Server
|
14
14
|
class Server
|
15
15
|
attr_reader :server
|
16
|
-
|
17
16
|
end
|
18
17
|
|
19
18
|
# Class for the server Afrinic
|
@@ -73,5 +72,60 @@ module Server
|
|
73
72
|
@server = 'whois.nic.br'
|
74
73
|
end
|
75
74
|
end
|
75
|
+
|
76
|
+
# Class for the teredo RFC 4773
|
77
|
+
class Teredo < Server
|
78
|
+
def initialize
|
79
|
+
@server = nil
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# Class for 6To4 RFC 3056
|
84
|
+
class Ipv6ToIpv4 < Server
|
85
|
+
def initialize
|
86
|
+
@server = nil
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# Class for server whois.kornet.net
|
91
|
+
class Kornet < Server
|
92
|
+
def initialize
|
93
|
+
@server = 'whois.kornet.net'
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
# Class for server whois.v6nic.net
|
98
|
+
class V6nic < Server
|
99
|
+
def initialize
|
100
|
+
@server = 'whois.v6nic.net'
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
# Class for server whois.twnic.net
|
105
|
+
class Twnic < Server
|
106
|
+
def initialize
|
107
|
+
@server = 'whois.twnic.net'
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
# Class for server whois.verio.net
|
112
|
+
class Verio < Server
|
113
|
+
def initialize
|
114
|
+
@server = 'whois.verio.net'
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# Class for server whois.6bone.net
|
119
|
+
class Ipv6Bone < Server
|
120
|
+
def initialize
|
121
|
+
@server = 'whois.6bone.net'
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
class Ginntt < Server
|
126
|
+
def initialize
|
127
|
+
@server = 'rwhois.gin.ntt.net'
|
128
|
+
end
|
129
|
+
end
|
76
130
|
|
77
131
|
end
|
data/lib/whois.rb
CHANGED
@@ -4,72 +4,77 @@ require 'socket'
|
|
4
4
|
require 'resolv'
|
5
5
|
require 'ipaddr'
|
6
6
|
require 'yaml'
|
7
|
-
require 'server/server'
|
7
|
+
require File.dirname(__FILE__) + '/server/server'
|
8
8
|
|
9
9
|
# Module for manage all Whois Class
|
10
10
|
module Whois
|
11
11
|
|
12
|
-
|
12
|
+
# Base exception of Whois
|
13
13
|
class WhoisException < Exception
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
16
|
+
# Exception of Whois who made report a bug
|
17
|
+
class WhoisExceptionError < WhoisException
|
18
|
+
def initialize (i)
|
19
|
+
WhoisException.initialize('Report a bug with error #{i} to http://rubyforge.org/projects/whois/')
|
20
|
+
end
|
21
|
+
end
|
22
22
|
|
23
23
|
# Class to get all information about Host or IP with the Whois request
|
24
24
|
class Whois
|
25
25
|
|
26
|
-
|
26
|
+
Version = '0.4.0'
|
27
27
|
|
28
28
|
attr_reader :all
|
29
29
|
attr_reader :server
|
30
30
|
attr_reader :ip
|
31
|
-
|
32
|
-
|
31
|
+
attr_reader :host
|
32
|
+
attr_accessor :host_search
|
33
33
|
|
34
34
|
# Initialize with a request. The request must be an IPv4, or a host string
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
35
|
+
#
|
36
|
+
# The first params now is :
|
37
|
+
# * a string which a Ipv4, Ipv6 or a host.
|
38
|
+
# * A IPAddr instance
|
39
|
+
#
|
40
|
+
# A second param, host_search is optionnal. By default he is false.
|
41
|
+
# If this value is true, a resolv host is made for know the host to this IPv4
|
42
|
+
def initialize(request, host_search=false)
|
43
|
+
@host_search = host_search
|
44
|
+
@host = nil
|
45
|
+
if request.instance_of? IPAddr
|
46
|
+
if request.ipv4?
|
47
|
+
@ip = request
|
48
|
+
@server = server_ipv4
|
49
|
+
elsif request.ipv6?
|
50
|
+
@ip = request
|
51
|
+
@server = server_ipv6
|
52
|
+
else
|
53
|
+
raise WhoisExceptionError.new(1)
|
54
|
+
end
|
53
55
|
elsif Resolv::IPv4::Regex =~ request
|
54
56
|
ipv4_init request
|
55
57
|
unless self.server
|
56
58
|
raise WhoisException.new("no server found for this IPv4 : #{request}")
|
57
59
|
end
|
58
60
|
elsif Resolv::IPv6::Regex =~ request
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
61
|
+
ipv6_init request
|
62
|
+
unless self.server
|
63
|
+
raise WhoisException.new("no server found for this Ipv6 : #{request}")
|
64
|
+
end
|
65
|
+
else
|
66
|
+
# Test if the request is an host or not
|
67
|
+
begin
|
68
|
+
ip = Resolv.getaddress request
|
69
|
+
@ip = IPAddr.new ip
|
70
|
+
@server = server_ipv4
|
71
|
+
@host = request
|
72
|
+
rescue Resolv::ResolvError
|
73
|
+
raise WhoisException.new('host #{request} has no DNS result')
|
74
|
+
end
|
70
75
|
end
|
71
|
-
|
72
|
-
|
76
|
+
|
77
|
+
search_host unless @host
|
73
78
|
end
|
74
79
|
|
75
80
|
# Ask of whois server
|
@@ -83,105 +88,71 @@ module Whois
|
|
83
88
|
end
|
84
89
|
|
85
90
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
91
|
+
# Search the host for this IPv4, if the value host_search is true, else host = nil
|
92
|
+
def search_host
|
93
|
+
begin
|
94
|
+
if @host_search
|
95
|
+
@host = Resolv.getname self.ip.to_s
|
96
|
+
else
|
97
|
+
@host = nil
|
98
|
+
end
|
99
|
+
rescue Resolv::ResolvError
|
100
|
+
@host = nil
|
101
|
+
end
|
102
|
+
end
|
98
103
|
|
99
|
-
|
104
|
+
private
|
100
105
|
|
101
106
|
# Init value for a ipv4 request
|
102
107
|
def ipv4_init (ip)
|
103
108
|
@ip = IPAddr.new ip
|
104
109
|
@server = server_ipv4
|
105
110
|
end
|
111
|
+
|
112
|
+
# Init value for a ipv6 request
|
113
|
+
def ipv6_init (ip)
|
114
|
+
@ip = IPAddr.new ip
|
115
|
+
@server = server_ipv6
|
116
|
+
end
|
117
|
+
|
118
|
+
# Return the Server with the hash of mask
|
119
|
+
def server_with_hash(ip_hash)
|
120
|
+
# Sort by mask of Ip Range
|
121
|
+
arr_tmp = ip_hash.sort{|b,c| c[0][/\/(.+)/, 1].to_i <=> b[0][/\/(.+)/, 1].to_i}
|
122
|
+
arr_tmp.each do |l|
|
123
|
+
ip_range = IPAddr.new l[0]
|
124
|
+
if ip_range.include? self.ip
|
125
|
+
return Object.instance_eval("Server::#{l[1]}.new")
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
# Define the server of Whois in IPC6 list of YAML
|
131
|
+
def server_ipv6
|
132
|
+
ipv6_list = YAML::load_file(File.dirname(__FILE__) + '/data/ipv6.yaml')
|
133
|
+
server = server_with_hash(ipv6_list)
|
134
|
+
unless server.kind_of? Server::Server
|
135
|
+
raise WhoisException.new("no server found for this IPv6 : #{self.ip}")
|
136
|
+
else
|
137
|
+
return server
|
138
|
+
end
|
139
|
+
end
|
106
140
|
|
107
141
|
# Define the server of Whois in IPV4 list of YAML
|
108
142
|
def server_ipv4
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
end
|
117
|
-
end
|
143
|
+
ipv4_list = YAML::load_file(File.dirname(__FILE__) + '/data/ipv4.yaml')
|
144
|
+
server = server_with_hash(ipv4_list)
|
145
|
+
unless server.kind_of? Server::Server
|
146
|
+
raise WhoisException.new("no server found for this IPv4 : #{self.ip}")
|
147
|
+
else
|
148
|
+
return server
|
149
|
+
end
|
118
150
|
end
|
119
151
|
end
|
120
152
|
end
|
121
153
|
|
122
154
|
|
123
155
|
if $0 == __FILE__
|
124
|
-
|
125
|
-
|
126
|
-
#b = a[41]
|
127
|
-
#b.init
|
128
|
-
|
129
|
-
# puts b.server
|
130
|
-
|
131
|
-
w = Whois::Whois.new '41.14.221.147'
|
132
|
-
puts w.search_whois
|
133
|
-
|
134
|
-
begin
|
135
|
-
w = Whois::Whois.new '42.14.221.147'
|
136
|
-
puts w.search_whois
|
137
|
-
rescue Whois::WhoisException
|
138
|
-
puts 'rescue'
|
139
|
-
end
|
140
|
-
|
141
|
-
# Test with Apnic Server
|
142
|
-
w = Whois::Whois.new '218.14.221.147'
|
143
|
-
puts w.search_whois
|
144
|
-
|
145
|
-
w = Whois::Whois.new '61.80.221.147'
|
146
|
-
puts w.search_whois
|
147
|
-
|
148
|
-
# Test whois Ripe Server
|
149
|
-
w = Whois::Whois.new '194.14.221.147'
|
150
|
-
puts w.search_whois
|
151
|
-
|
152
|
-
# Test whois Arin Server
|
153
|
-
w = Whois::Whois.new '216.14.221.147'
|
154
|
-
puts w.search_whois
|
155
|
-
|
156
|
-
# Test whois Lacnic Server
|
157
|
-
w = Whois::Whois.new '200.14.221.147'
|
158
|
-
puts w.search_whois
|
159
|
-
|
160
|
-
a = IPAddr.new '200.14.221.147'
|
161
|
-
w = Whois::Whois.new(a)
|
162
|
-
puts w.search_whois
|
163
|
-
|
164
|
-
# ip = Resolv.getname '72.14.221.147'
|
165
|
-
# puts ip
|
166
|
-
#
|
167
|
-
# ip = Resolv.getaddress 'google.com'
|
168
|
-
# puts ip
|
169
|
-
#
|
170
|
-
# w = Whois::Whois.new '72.14.221.147'
|
171
|
-
# puts w.search_whois
|
172
|
-
#
|
173
|
-
w = Whois::Whois.new 'fg-in-f147.google.com'
|
174
|
-
puts w.search_whois
|
175
|
-
|
176
|
-
w = Whois::Whois.new '72.14.221.147', true
|
177
|
-
puts w.search_whois
|
178
|
-
puts w.host
|
179
|
-
|
180
|
-
puts '#################################'
|
181
|
-
|
182
|
-
w = Whois::Whois.new '72.14.221.147'
|
183
|
-
puts w.search_whois
|
184
|
-
puts w.host
|
185
|
-
|
186
|
-
# puts w.all
|
156
|
+
w = Whois::Whois.new '218.14.221.147'
|
157
|
+
puts w.search_whois
|
187
158
|
end
|
data/test/example.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
|
2
|
+
# FIRST EXAMPLE
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require '../lib/whois'
|
6
|
+
|
7
|
+
w = Whois::Whois.new '72.14.207.99'
|
8
|
+
w.search_whois
|
9
|
+
|
10
|
+
# All return of request
|
11
|
+
w.all
|
12
|
+
|
13
|
+
# The ip return with object IPAddr
|
14
|
+
w.ip
|
15
|
+
|
16
|
+
# The server where the request has send
|
17
|
+
w.server
|
18
|
+
|
19
|
+
# The host of this IPv4
|
20
|
+
w.host
|
21
|
+
|
22
|
+
# SECOND EXAMPLE
|
23
|
+
|
24
|
+
require 'ipaddr'
|
25
|
+
|
26
|
+
ip = IPAddr.new '72.17.207.99'
|
27
|
+
w = Whois::Whois.new ip
|
28
|
+
w.search_whois
|
29
|
+
|
30
|
+
# All return of request
|
31
|
+
w.all
|
32
|
+
|
33
|
+
# The ip return with object IPAddr
|
34
|
+
w.ip
|
35
|
+
|
36
|
+
# The server where the request has send
|
37
|
+
w.server
|
38
|
+
|
39
|
+
# The host of this IPv4
|
40
|
+
w.host
|
41
|
+
|
42
|
+
# THIRD EXAMPLE
|
43
|
+
|
44
|
+
w = Whois::Whois.new '72.14.221.147', true
|
45
|
+
w.search_whois
|
46
|
+
|
47
|
+
# All return of request
|
48
|
+
w.all
|
49
|
+
|
50
|
+
# The ip return with object IPAddr
|
51
|
+
w.ip
|
52
|
+
|
53
|
+
# The server where the request has send
|
54
|
+
w.server
|
55
|
+
|
56
|
+
# The host of this IPv4
|
57
|
+
w.host #=> fg-in-f147.google.com
|
58
|
+
|
59
|
+
# FOUR EXAMPLE
|
60
|
+
|
61
|
+
|
62
|
+
w = Whois::Whois.new 'fg-in-f147.google.com'
|
63
|
+
w.search_whois
|
64
|
+
|
65
|
+
# All return of request
|
66
|
+
w.all
|
67
|
+
|
68
|
+
# The ip return with object IPAddr
|
69
|
+
w.ip
|
70
|
+
|
71
|
+
# The server where the request has send
|
72
|
+
w.server
|
73
|
+
|
74
|
+
# The host of this host
|
75
|
+
w.host #=> fg-in-f147.google.com
|
76
|
+
|
77
|
+
|
78
|
+
# FIFTH EXAMPLE
|
79
|
+
|
80
|
+
w = Whois::Whois.new '2001:0660::'
|
81
|
+
w.search_whois
|
82
|
+
|
83
|
+
# All return of request
|
84
|
+
w.all
|
85
|
+
|
86
|
+
# The ip return with object IPAddr
|
87
|
+
w.ip
|
88
|
+
|
89
|
+
# The server where the request has send
|
90
|
+
w.server
|
91
|
+
|
92
|
+
# The host of this host
|
93
|
+
w.host #=> fg-in-f147.google.com
|
94
|
+
|
95
|
+
# SIX EXAMPLE
|
96
|
+
|
97
|
+
w = Whois::Whois.new(IPAddr.new('2001:0660::'))
|
98
|
+
w.search_whois
|
99
|
+
|
100
|
+
# All return of request
|
101
|
+
p w.all
|
102
|
+
|
103
|
+
# The ip return with object IPAddr
|
104
|
+
p w.ip
|
105
|
+
|
106
|
+
# The server where the request has send
|
107
|
+
p w.server
|
108
|
+
|
109
|
+
# The host of this host
|
110
|
+
p w.host #=> fg-in-f147.google.com
|
data/test/test_whois.rb
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'lib/whois'
|
3
|
+
require 'ipaddr'
|
4
|
+
|
5
|
+
class TestWhois < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_ipv4_string
|
8
|
+
ip_with_server '72.14.207.99', Server::Arin
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_rescue
|
12
|
+
ip_with_server '42.14.221.147', Server::Arin
|
13
|
+
ip_with_server '41.14.221.147', Server::Afrinic
|
14
|
+
#ip_with_server '218.14.221.147', Server::Apnic
|
15
|
+
#=> It's random, because Apnic has 2 nodes
|
16
|
+
ip_with_server '61.80.221.147', Server::Nicor
|
17
|
+
ip_with_server '194.14.221.147', Server::Ripe
|
18
|
+
ip_with_server '216.14.221.147', Server::Arin
|
19
|
+
#ip_with_server '200.14.221.147', Server::Lacnic
|
20
|
+
#=> it's random because a hour of request is renseign
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_second_example
|
24
|
+
|
25
|
+
ip = IPAddr.new '72.17.207.99'
|
26
|
+
w = Whois::Whois.new ip
|
27
|
+
w.search_whois
|
28
|
+
|
29
|
+
# All return of request
|
30
|
+
assert_equal((request_whois_unix "72.17.207.99"), w.all)
|
31
|
+
|
32
|
+
# The ip return with object IPAddr
|
33
|
+
assert_equal(IPAddr.new('72.17.207.99'), w.ip)
|
34
|
+
|
35
|
+
# The server where the request has send
|
36
|
+
assert_instance_of(Server::Arin, w.server)
|
37
|
+
|
38
|
+
# The host of this IPv4
|
39
|
+
assert_nil w.host
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_third_example
|
43
|
+
w = Whois::Whois.new '72.14.221.147', true
|
44
|
+
w.search_whois
|
45
|
+
|
46
|
+
# All return of request
|
47
|
+
assert_equal((request_whois_unix "72.14.221.147"), w.all)
|
48
|
+
|
49
|
+
# The ip return with object IPAddr
|
50
|
+
assert_equal((IPAddr.new '72.14.221.147'), w.ip)
|
51
|
+
|
52
|
+
# The server where the request has send
|
53
|
+
assert_instance_of Server::Arin, w.server
|
54
|
+
|
55
|
+
# The host of this IPv4
|
56
|
+
assert_equal(request_host_with_ip('72.14.221.147'), w.host)
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_four_example
|
60
|
+
|
61
|
+
host = 'fg-in-f147.google.com'
|
62
|
+
w = Whois::Whois.new host
|
63
|
+
w.search_whois
|
64
|
+
|
65
|
+
|
66
|
+
# The ip return with object IPAddr
|
67
|
+
assert_equal(request_ip_with_host(host), w.ip)
|
68
|
+
|
69
|
+
assert_equal((request_whois_unix w.ip), w.all)
|
70
|
+
|
71
|
+
# The server where the request has send
|
72
|
+
assert_instance_of Server::Arin, w.server
|
73
|
+
|
74
|
+
# The host of this host
|
75
|
+
assert_equal 'fg-in-f147.google.com', w.host
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_fifth_example
|
79
|
+
ip_with_server '2001:0660::', Server::Ripe
|
80
|
+
ip_with_server '2001:4200:a42e:2131', Server::Ripe, false, true
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_Ipaddr_for_ipv6
|
84
|
+
ip = IPAddr.new '2001:0660::'
|
85
|
+
w = Whois::Whois.new ip
|
86
|
+
w.search_whois
|
87
|
+
|
88
|
+
# All return of request
|
89
|
+
assert_equal((request_whois_unix "2001:0660::"), w.all)
|
90
|
+
|
91
|
+
# The ip return with object IPAddr
|
92
|
+
assert_equal(IPAddr.new('2001:0660::'), w.ip)
|
93
|
+
|
94
|
+
# The server where the request has send
|
95
|
+
assert_instance_of(Server::Ripe, w.server)
|
96
|
+
|
97
|
+
# The host of this IPv4
|
98
|
+
assert_nil w.host
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_Ipv6_not_host
|
103
|
+
ip = IPAddr.new 'a13e:1678:129b:7341'
|
104
|
+
assert_raise Whois::WhoisException do
|
105
|
+
w = Whois::Whois.new ip
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
private
|
110
|
+
|
111
|
+
def request_host_with_ip(ip)
|
112
|
+
line = IO.popen("host #{ip}")
|
113
|
+
line = line.gets
|
114
|
+
if line =~ /(.+)domain name pointer (.+)\./
|
115
|
+
Regexp.last_match 2
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def request_ip_with_host(host)
|
120
|
+
line = IO.popen("host #{host}")
|
121
|
+
line = line.gets
|
122
|
+
if line =~ /(.+)has address (.+)/
|
123
|
+
IPAddr.new(Regexp.last_match(2))
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def request_whois_unix(ip)
|
128
|
+
result = ''
|
129
|
+
IO.popen("whois #{ip}").each do |l|
|
130
|
+
|
131
|
+
# not good but use because ServerReferral use
|
132
|
+
if l =~ /^Renvoi/
|
133
|
+
result = result.chop().chop()
|
134
|
+
break
|
135
|
+
end
|
136
|
+
|
137
|
+
result += l
|
138
|
+
end
|
139
|
+
result
|
140
|
+
end
|
141
|
+
|
142
|
+
def ip_with_server(ip, server, read=false, except=false)
|
143
|
+
w = nil
|
144
|
+
unless except
|
145
|
+
assert_nothing_raised do
|
146
|
+
w = Whois::Whois.new ip
|
147
|
+
end
|
148
|
+
else
|
149
|
+
assert_raise Whois::WhoisException do
|
150
|
+
Whois::Whois.new(ip)
|
151
|
+
end
|
152
|
+
return
|
153
|
+
end
|
154
|
+
w.search_whois
|
155
|
+
|
156
|
+
|
157
|
+
if read
|
158
|
+
puts w.server
|
159
|
+
puts(request_whois_unix(ip))
|
160
|
+
puts w.all
|
161
|
+
puts w.ip
|
162
|
+
end
|
163
|
+
|
164
|
+
assert_equal((request_whois_unix ip).strip().gsub(/[\s]/, ''),
|
165
|
+
w.all.strip().gsub(/[\s]/, ''))
|
166
|
+
assert_equal(IPAddr.new(ip), w.ip)
|
167
|
+
assert_instance_of(server, w.server)
|
168
|
+
assert_nil w.host
|
169
|
+
end
|
170
|
+
|
171
|
+
end
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.
|
2
|
+
rubygems_version: 0.9.0
|
3
3
|
specification_version: 1
|
4
4
|
name: whois
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.4.0
|
7
|
+
date: 2007-04-29 00:00:00 +02:00
|
8
8
|
summary: Whois provides a library for request whois server
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -25,14 +25,18 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
25
25
|
platform: ruby
|
26
26
|
signing_key:
|
27
27
|
cert_chain:
|
28
|
+
post_install_message:
|
28
29
|
authors:
|
29
30
|
- Cyril Mougel
|
30
31
|
files:
|
32
|
+
- test/test_whois.rb
|
33
|
+
- test/example.rb
|
31
34
|
- lib/server
|
32
|
-
- lib/data
|
33
|
-
- lib/whois.rb
|
34
35
|
- lib/server/server.rb
|
36
|
+
- lib/data
|
35
37
|
- lib/data/ipv4.yaml
|
38
|
+
- lib/data/ipv6.yaml
|
39
|
+
- lib/whois.rb
|
36
40
|
- README
|
37
41
|
- EXAMPLES
|
38
42
|
- CHANGELOG
|