net-dns 0.8.0 → 0.20.0
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.
- checksums.yaml +6 -14
- data/.rspec +1 -0
- data/.travis.yml +9 -16
- data/CHANGELOG.md +37 -13
- data/LICENSE.txt +56 -0
- data/README.md +94 -77
- data/demo/check_soa.rb +27 -38
- data/demo/threads.rb +3 -7
- data/lib/net/dns/header.rb +86 -110
- data/lib/net/dns/names.rb +31 -31
- data/lib/net/dns/packet.rb +148 -158
- data/lib/net/dns/question.rb +41 -42
- data/lib/net/dns/resolver/socks.rb +47 -55
- data/lib/net/dns/resolver/timeouts.rb +19 -30
- data/lib/net/dns/resolver.rb +151 -176
- data/lib/net/dns/rr/a.rb +45 -55
- data/lib/net/dns/rr/aaaa.rb +39 -50
- data/lib/net/dns/rr/classes.rb +32 -37
- data/lib/net/dns/rr/cname.rb +31 -41
- data/lib/net/dns/rr/hinfo.rb +40 -56
- data/lib/net/dns/rr/mr.rb +31 -42
- data/lib/net/dns/rr/mx.rb +35 -47
- data/lib/net/dns/rr/ns.rb +31 -41
- data/lib/net/dns/rr/null.rb +10 -15
- data/lib/net/dns/rr/ptr.rb +16 -24
- data/lib/net/dns/rr/soa.rb +36 -35
- data/lib/net/dns/rr/srv.rb +18 -19
- data/lib/net/dns/rr/txt.rb +11 -16
- data/lib/net/dns/rr/types.rb +118 -109
- data/lib/net/dns/rr.rb +107 -117
- data/lib/net/dns/version.rb +5 -13
- data/lib/net/dns.rb +6 -11
- metadata +18 -83
- data/.gitignore +0 -8
- data/Gemfile +0 -4
- data/Rakefile +0 -71
- data/fixtures/resolv.conf +0 -4
- data/lib/net/dns/core_ext.rb +0 -52
- data/net-dns.gemspec +0 -35
- data/test/header_test.rb +0 -167
- data/test/names_test.rb +0 -21
- data/test/packet_test.rb +0 -49
- data/test/question_test.rb +0 -83
- data/test/resolver/timeouts_test.rb +0 -109
- data/test/resolver_test.rb +0 -117
- data/test/rr/a_test.rb +0 -113
- data/test/rr/aaaa_test.rb +0 -109
- data/test/rr/classes_test.rb +0 -85
- data/test/rr/cname_test.rb +0 -97
- data/test/rr/hinfo_test.rb +0 -117
- data/test/rr/mr_test.rb +0 -105
- data/test/rr/mx_test.rb +0 -112
- data/test/rr/ns_test.rb +0 -86
- data/test/rr/types_test.rb +0 -69
- data/test/rr_test.rb +0 -131
- data/test/test_helper.rb +0 -4
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
YzMzY2RhYjJlNTcyNTllMzQ4ODdlYjkzNjViY2QyNDg4ZTQxNDJhNjA0MDM1
|
10
|
-
OThjMGZjY2EwMmY2ZTNjYTM0NGRmMDM2YzcwMDk0Yzg2MGVjYzNiODYzZDhj
|
11
|
-
M2JjNzExN2FkMTdlMzg5MGE1ZWIyMWJlOTQzMTBmMzYxOTAwYjk=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NDRiZjIyY2UxZTMxMjYxZDM3MjhlYjFiNDAxNDhmNWEwMDRmODNiYjg3MmY3
|
14
|
-
MzQxNWU4ZTlhMGE1ZDQ0MGYzNzBmMTU4YzVkYjc4ZjJlYmQ1NmY0OTE3ZDQ5
|
15
|
-
ZjkwYTNiZmM5ODBlMjM1MWU0Y2I5MmU4ZmI4NWJmNmEzMzRiNTQ=
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fec69b4a6e824defa6fb7a25a020a67d0dba5340f2f42b1c489e3b73027b6577
|
4
|
+
data.tar.gz: bd9fcd575cb009fa14ce0443ea3b415f0924a04c3a63be620b350c913b93fe39
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3ba5ecc052ddd89bfc5bb264ce0a11edb2aa791b1d6285075f0f96245634b1b73bb69e29e883bd4656a85d6c82e6f331e11cfb66b55a10da27b90221ad61f8d6
|
7
|
+
data.tar.gz: 0ff1b210ef56b91a7dc3d914039bedb7e08803c8838a0eefe1233fef4c97a7e817b06387e45bc6b77354a3efe7f9fc885499efff0aabacb07ac24c3eb75aca15
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/.travis.yml
CHANGED
@@ -1,20 +1,13 @@
|
|
1
1
|
language: ruby
|
2
2
|
|
3
3
|
rvm:
|
4
|
-
- 1
|
5
|
-
-
|
6
|
-
-
|
7
|
-
- 2.
|
8
|
-
|
9
|
-
|
10
|
-
-
|
11
|
-
# - ruby-head
|
12
|
-
# - jruby-head
|
4
|
+
- 2.1
|
5
|
+
- 2.2
|
6
|
+
- 2.3
|
7
|
+
- 2.4
|
8
|
+
- 2.5
|
9
|
+
- jruby-9.1.5.0
|
10
|
+
- ruby-head
|
13
11
|
|
14
|
-
|
15
|
-
|
16
|
-
- weppos@weppos.net
|
17
|
-
|
18
|
-
matrix:
|
19
|
-
allow_failures:
|
20
|
-
- rvm: 2.0.0
|
12
|
+
cache:
|
13
|
+
- bundler
|
data/CHANGELOG.md
CHANGED
@@ -1,22 +1,46 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
3
|
|
4
|
-
##
|
4
|
+
## Release 0.20.0
|
5
5
|
|
6
|
-
-
|
6
|
+
- CHANGED: Minimum Ruby version is now 2.7
|
7
7
|
|
8
|
-
-
|
8
|
+
- CHANGED: Merged changes from gitlab-net-dns @stanhu
|
9
9
|
|
10
|
-
-
|
10
|
+
- FIXED: Fixed undefined method 'size' errors (GH-46, GH-81) @stanhu
|
11
11
|
|
12
|
-
-
|
12
|
+
- FIXED: uninitialized constant Net::DNS::Resolver::TimeoutError (GH-82, GH-83, GH-84)
|
13
|
+
|
14
|
+
- ADDED: Added URI/SPF/CAA type code
|
15
|
+
|
16
|
+
|
17
|
+
## Release 0.9.0
|
18
|
+
|
19
|
+
- CHANGED: Major code cleanup.
|
20
|
+
|
21
|
+
- CHANGED: Minimum Ruby version is now 2.1
|
22
|
+
|
23
|
+
- FIXED: Fixed CI run (GH-77).
|
24
|
+
|
25
|
+
- FIXED: Fixed deprecated references to Fixnum.
|
26
|
+
|
27
|
+
|
28
|
+
## Release 0.8.0
|
29
|
+
|
30
|
+
- FIXED: undefined local variable or method `source_address_inet6' (GH-40). @simsicon
|
31
|
+
|
32
|
+
- FIXED: Fixed bug on parsing multiple nameservers on different lines (GH-45). @nicholasren
|
33
|
+
|
34
|
+
- CHANGED: Dropped duplicate query ID filter. Query ID is now randomically generated but it's not guaranteed to be unique (GH-39). @ebroder
|
35
|
+
|
36
|
+
- CHANGED: require 'net/dns' is now the preferred way to load the library (GH-37). @johnroa
|
13
37
|
|
14
38
|
- CHANGED: Removed setup.rb installation script.
|
15
39
|
|
16
40
|
|
17
41
|
## Release 0.7.1
|
18
42
|
|
19
|
-
- FIXED: Invalid file permissions on several files (GH-35)
|
43
|
+
- FIXED: Invalid file permissions on several files (GH-35) @jamespharaoh
|
20
44
|
|
21
45
|
|
22
46
|
## Release 0.7.0
|
@@ -27,15 +51,15 @@
|
|
27
51
|
|
28
52
|
- FIXED: Cleaned up require dependency and recursive require statements.
|
29
53
|
|
30
|
-
- FIXED: Use RbConfig instead of obsolete and deprecated Config (GH-28, GH-33)
|
54
|
+
- FIXED: Use RbConfig instead of obsolete and deprecated Config (GH-28, GH-33) @shadowbq, @eik3
|
31
55
|
|
32
|
-
- FIXED: SRV record not required by Net::DNS::RR (GH-27)
|
56
|
+
- FIXED: SRV record not required by Net::DNS::RR (GH-27) @sebastian
|
33
57
|
|
34
|
-
- FIXED: Resolver now supports IPv6 (GH-32)
|
58
|
+
- FIXED: Resolver now supports IPv6 (GH-32) @jamesotron
|
35
59
|
|
36
|
-
- FIXED: Net::DNS::RR::PTR references an invalid parameter (GH-19)
|
60
|
+
- FIXED: Net::DNS::RR::PTR references an invalid parameter (GH-19) @dd23
|
37
61
|
|
38
|
-
- FIXED: Net::DNS::Question changes input arguments (GH-7)
|
62
|
+
- FIXED: Net::DNS::Question changes input arguments (GH-7) @gfarfl
|
39
63
|
|
40
64
|
- CHANGED: Refactoring unit test to follow most used Ruby conventions.
|
41
65
|
|
@@ -56,9 +80,9 @@
|
|
56
80
|
|
57
81
|
- ADDED: Net::DNS::Packet#to_s method (alias of #inspect)
|
58
82
|
|
59
|
-
- FIXED: typo in lib/net/dns/rr/ptr.rb
|
83
|
+
- FIXED: typo in lib/net/dns/rr/ptr.rb. Thanks Chris Lundquist.
|
60
84
|
|
61
|
-
- FIXED: warning: method redefined; discarding old inspect (GH-3)
|
85
|
+
- FIXED: warning: method redefined; discarding old inspect (GH-3). Thanks Kevin Baker.
|
62
86
|
|
63
87
|
- FIXED: issue with rescue ArgumentError (GH-5) and with IPAddr handling (GH-6)
|
64
88
|
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
net-dns is copyrighted free software by Marco Ceresa (@bluemonk) and Simone Carletti (@weppos).
|
2
|
+
You can redistribute it and/or modify it under either the terms of the
|
3
|
+
2-clause BSDL (see the file BSDL), or the conditions below:
|
4
|
+
|
5
|
+
1. You may make and give away verbatim copies of the source form of the
|
6
|
+
software without restriction, provided that you duplicate all of the
|
7
|
+
original copyright notices and associated disclaimers.
|
8
|
+
|
9
|
+
2. You may modify your copy of the software in any way, provided that
|
10
|
+
you do at least ONE of the following:
|
11
|
+
|
12
|
+
a) place your modifications in the Public Domain or otherwise
|
13
|
+
make them Freely Available, such as by posting said
|
14
|
+
modifications to Usenet or an equivalent medium, or by allowing
|
15
|
+
the author to include your modifications in the software.
|
16
|
+
|
17
|
+
b) use the modified software only within your corporation or
|
18
|
+
organization.
|
19
|
+
|
20
|
+
c) give non-standard binaries non-standard names, with
|
21
|
+
instructions on where to get the original software distribution.
|
22
|
+
|
23
|
+
d) make other distribution arrangements with the author.
|
24
|
+
|
25
|
+
3. You may distribute the software in object code or binary form,
|
26
|
+
provided that you do at least ONE of the following:
|
27
|
+
|
28
|
+
a) distribute the binaries and library files of the software,
|
29
|
+
together with instructions (in the manual page or equivalent)
|
30
|
+
on where to get the original distribution.
|
31
|
+
|
32
|
+
b) accompany the distribution with the machine-readable source of
|
33
|
+
the software.
|
34
|
+
|
35
|
+
c) give non-standard binaries non-standard names, with
|
36
|
+
instructions on where to get the original software distribution.
|
37
|
+
|
38
|
+
d) make other distribution arrangements with the author.
|
39
|
+
|
40
|
+
4. You may modify and include the part of the software into any other
|
41
|
+
software (possibly commercial). But some files in the distribution
|
42
|
+
are not written by the author, so that they are not under these terms.
|
43
|
+
|
44
|
+
For the list of those files and their copying conditions, see the
|
45
|
+
file LEGAL.
|
46
|
+
|
47
|
+
5. The scripts and library files supplied as input to or produced as
|
48
|
+
output from the software do not automatically fall under the
|
49
|
+
copyright of the software, but belong to whomever generated them,
|
50
|
+
and may be sold commercially, and may be aggregated with this
|
51
|
+
software.
|
52
|
+
|
53
|
+
6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
54
|
+
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
55
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
56
|
+
PURPOSE.
|
data/README.md
CHANGED
@@ -12,16 +12,16 @@ Net::DNS is a DNS library written in pure Ruby. It started as a port of Perl Net
|
|
12
12
|
|
13
13
|
## Requirements
|
14
14
|
|
15
|
-
|
15
|
+
Ruby >= 2.6
|
16
16
|
|
17
17
|
|
18
18
|
## Installation
|
19
19
|
|
20
20
|
The best way to install this library is via [RubyGems](https://rubygems.org/).
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
```
|
23
|
+
gem install net-dns
|
24
|
+
```
|
25
25
|
|
26
26
|
|
27
27
|
## API Documentation
|
@@ -33,71 +33,80 @@ Visit the page http://rdoc.info/gems/net-dns
|
|
33
33
|
|
34
34
|
The simplest way to use the library is to invoke the Resolver() method:
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
36
|
+
```ruby
|
37
|
+
require 'rubygems'
|
38
|
+
require 'net/dns'
|
39
|
+
p Resolver("www.google.com")
|
40
|
+
```
|
39
41
|
|
40
42
|
The output is compatible with BIND zone files and it's the same you would get with the dig utility.
|
41
43
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
44
|
+
```
|
45
|
+
;; Answer received from localhost:53 (212 bytes)
|
46
|
+
;;
|
47
|
+
;; HEADER SECTION
|
48
|
+
;; id = 64075
|
49
|
+
;; qr = 1 opCode: QUERY aa = 0 tc = 0 rd = 1
|
50
|
+
;; ra = 1 ad = 0 cd = 0 rcode = NoError
|
51
|
+
;; qdCount = 1 anCount = 3 nsCount = 4 arCount = 4
|
52
|
+
|
53
|
+
;; QUESTION SECTION (1 record):
|
54
|
+
;; google.com. IN A
|
55
|
+
|
56
|
+
;; ANSWER SECTION (3 records):
|
57
|
+
google.com. 212 IN A 74.125.45.100
|
58
|
+
google.com. 212 IN A 74.125.67.100
|
59
|
+
google.com. 212 IN A 209.85.171.100
|
60
|
+
|
61
|
+
;; AUTHORITY SECTION (4 records):
|
62
|
+
google.com. 345512 IN NS ns1.google.com.
|
63
|
+
google.com. 345512 IN NS ns4.google.com.
|
64
|
+
google.com. 345512 IN NS ns2.google.com.
|
65
|
+
google.com. 345512 IN NS ns3.google.com.
|
66
|
+
|
67
|
+
;; ADDITIONAL SECTION (4 records):
|
68
|
+
ns1.google.com. 170275 IN A 216.239.32.10
|
69
|
+
ns2.google.com. 170275 IN A 216.239.34.10
|
70
|
+
ns3.google.com. 170275 IN A 216.239.36.10
|
71
|
+
ns4.google.com. 170275 IN A 216.239.38.10
|
72
|
+
```
|
69
73
|
|
70
74
|
An optional block can be passed yielding the Net::DNS::Packet object
|
71
75
|
|
72
|
-
|
73
|
-
|
76
|
+
```ruby
|
77
|
+
Resolver("www.google.com") { |packet| puts packet.size + " bytes" }
|
78
|
+
# => 484 bytes
|
79
|
+
```
|
74
80
|
|
75
81
|
Same for Net::DNS::Resolver.start():
|
76
82
|
|
77
|
-
|
78
|
-
|
83
|
+
```ruby
|
84
|
+
Net::DNS::Resolver.start("google.com").answer.size
|
85
|
+
# => 5
|
86
|
+
```
|
79
87
|
|
80
88
|
As optional parameters, +TYPE+ and +CLASS+ can be specified.
|
81
89
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
;; QUESTION SECTION (1 record):
|
93
|
-
;; google.com. IN MX
|
94
|
-
|
95
|
-
;; ANSWER SECTION (4 records):
|
96
|
-
google.com. 10800 IN MX 10 smtp2.google.com.
|
97
|
-
google.com. 10800 IN MX 10 smtp3.google.com.
|
98
|
-
google.com. 10800 IN MX 10 smtp4.google.com.
|
99
|
-
google.com. 10800 IN MX 10 smtp1.google.com.
|
90
|
+
```ruby
|
91
|
+
p Net::DNS::Resolver.start("google.com", Net::DNS::MX)
|
92
|
+
|
93
|
+
;; Answer received from localhost:53 (316 bytes)
|
94
|
+
;;
|
95
|
+
;; HEADER SECTION
|
96
|
+
;; id = 59980
|
97
|
+
;; qr = 1 opCode: QUERY aa = 0 tc = 0 rd = 1
|
98
|
+
;; ra = 1 ad = 0 cd = 0 rcode = NoError
|
99
|
+
;; qdCount = 1 anCount = 4 nsCount = 4 arCount = 8
|
100
100
|
|
101
|
+
;; QUESTION SECTION (1 record):
|
102
|
+
;; google.com. IN MX
|
103
|
+
|
104
|
+
;; ANSWER SECTION (4 records):
|
105
|
+
google.com. 10800 IN MX 10 smtp2.google.com.
|
106
|
+
google.com. 10800 IN MX 10 smtp3.google.com.
|
107
|
+
google.com. 10800 IN MX 10 smtp4.google.com.
|
108
|
+
google.com. 10800 IN MX 10 smtp1.google.com.
|
109
|
+
```
|
101
110
|
|
102
111
|
## Handling the response packet
|
103
112
|
|
@@ -113,35 +122,43 @@ A DNS packet is divided into 5 sections:
|
|
113
122
|
|
114
123
|
You can access each section by calling the attribute with the same name on a Packet object:
|
115
124
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
125
|
+
```ruby
|
126
|
+
packet = Net::DNS::Resolver.start("google.com")
|
127
|
+
|
128
|
+
header = packet.header
|
129
|
+
answer = packet.answer
|
130
|
+
|
131
|
+
puts "The packet is #{packet.data.size} bytes"
|
132
|
+
puts "It contains #{header.anCount} answer entries"
|
133
|
+
|
134
|
+
answer.any? {|ans| p ans}
|
135
|
+
```
|
136
|
+
|
126
137
|
The output is
|
127
138
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
139
|
+
```
|
140
|
+
The packet is 378 bytes
|
141
|
+
It contains 3 answer entries
|
142
|
+
google.com. 244 IN A 74.125.45.100
|
143
|
+
google.com. 244 IN A 74.125.67.100
|
144
|
+
google.com. 244 IN A 209.85.171.100
|
145
|
+
```
|
133
146
|
|
134
147
|
A better way to handle the answer section is to use the iterators directly on a Packet object:
|
135
148
|
|
136
|
-
|
137
|
-
|
138
|
-
|
149
|
+
```ruby
|
150
|
+
packet.each_address do |ip|
|
151
|
+
puts "#{ip} is alive" if Ping.pingecho(ip.to_s, 10, 80)
|
152
|
+
end
|
153
|
+
```
|
139
154
|
|
140
155
|
Gives:
|
141
156
|
|
142
|
-
|
143
|
-
|
144
|
-
|
157
|
+
```
|
158
|
+
74.125.45.100 is alive
|
159
|
+
74.125.67.100 is alive
|
160
|
+
209.85.171.100 is alive
|
161
|
+
```
|
145
162
|
|
146
163
|
|
147
164
|
## License
|
data/demo/check_soa.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
1
|
+
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require 'rubygems' if
|
3
|
+
require 'rubygems' if RUBY_VERSION.to_s < "1.9.0"
|
4
4
|
require 'net/dns'
|
5
5
|
|
6
|
-
|
7
6
|
#------------------------------------------------------------------------------
|
8
7
|
# Get the domain from the command line.
|
9
8
|
#------------------------------------------------------------------------------
|
@@ -16,100 +15,90 @@ domain = ARGV[0]
|
|
16
15
|
# Find all the nameservers for the domain.
|
17
16
|
#------------------------------------------------------------------------------
|
18
17
|
|
19
|
-
res = Net::DNS::Resolver.new(:
|
18
|
+
res = Net::DNS::Resolver.new(defname: false, retry: 2)
|
20
19
|
|
21
20
|
ns_req = res.query(domain, Net::DNS::NS)
|
22
|
-
unless ns_req
|
21
|
+
unless ns_req && (ns_req.header.anCount > 0)
|
23
22
|
raise ArgumentError, "No nameservers found for domain: #{res.errorstring}"
|
24
23
|
end
|
25
24
|
|
26
|
-
|
27
25
|
# Send out non-recursive queries
|
28
26
|
res.recurse = false
|
29
27
|
# Do not buffer standard out
|
30
|
-
|
31
|
-
|
28
|
+
# | = 1;
|
32
29
|
|
33
30
|
#------------------------------------------------------------------------------
|
34
31
|
# Check the SOA record on each nameserver.
|
35
32
|
#------------------------------------------------------------------------------
|
36
33
|
|
37
34
|
ns_req.each_nameserver do |ns|
|
38
|
-
|
39
35
|
#----------------------------------------------------------------------
|
40
36
|
# Set the resolver to query this nameserver.
|
41
37
|
#----------------------------------------------------------------------
|
42
|
-
|
38
|
+
|
43
39
|
# In order to lookup the IP(s) of the nameserver, we need a Resolver
|
44
40
|
# object that is set to our local, recursive nameserver. So we create
|
45
41
|
# a new object just to do that.
|
46
|
-
|
42
|
+
|
47
43
|
local_res = Net::DNS::Resolver.new
|
48
|
-
|
44
|
+
|
49
45
|
a_req = local_res.query(ns, Net::DNS::A)
|
50
|
-
|
51
|
-
|
52
|
-
unless a_req
|
46
|
+
|
47
|
+
unless a_req
|
53
48
|
puts "Can not find address for ns: " + res.errorstring + "\n"
|
54
49
|
next
|
55
50
|
end
|
56
|
-
|
57
|
-
|
58
|
-
a_req.each_address do |ip|
|
59
51
|
|
52
|
+
a_req.each_address do |ip|
|
60
53
|
#----------------------------------------------------------------------
|
61
54
|
# Ask this IP.
|
62
55
|
#----------------------------------------------------------------------
|
63
|
-
res.nameservers=ip
|
64
|
-
|
56
|
+
res.nameservers = ip
|
57
|
+
|
65
58
|
print "#{ns} (#{ip}): "
|
66
|
-
|
59
|
+
|
67
60
|
#----------------------------------------------------------------------
|
68
61
|
# Get the SOA record.
|
69
62
|
#----------------------------------------------------------------------
|
70
|
-
|
63
|
+
|
71
64
|
soa_req = res.send(domain, Net::DNS::SOA, Net::DNS::IN)
|
72
|
-
|
73
|
-
if soa_req
|
65
|
+
|
66
|
+
if soa_req.nil?
|
74
67
|
puts res.errorstring, "\n"
|
75
68
|
next
|
76
69
|
end
|
77
|
-
|
70
|
+
|
78
71
|
#----------------------------------------------------------------------
|
79
72
|
# Is this nameserver authoritative for the domain?
|
80
73
|
#----------------------------------------------------------------------
|
81
|
-
|
82
|
-
unless soa_req.header.auth?
|
74
|
+
|
75
|
+
unless soa_req.header.auth?
|
83
76
|
print "isn't authoritative for domain\n"
|
84
77
|
next
|
85
78
|
end
|
86
|
-
|
79
|
+
|
87
80
|
#----------------------------------------------------------------------
|
88
81
|
# We should have received exactly one answer.
|
89
82
|
#----------------------------------------------------------------------
|
90
|
-
|
91
|
-
unless soa_req.header.anCount == 1
|
83
|
+
|
84
|
+
unless soa_req.header.anCount == 1
|
92
85
|
print "expected 1 answer, got " + soa_req.header.anCount.to_s + "\n"
|
93
86
|
next
|
94
87
|
end
|
95
|
-
|
88
|
+
|
96
89
|
#----------------------------------------------------------------------
|
97
90
|
# Did we receive an SOA record?
|
98
91
|
#----------------------------------------------------------------------
|
99
|
-
|
92
|
+
|
100
93
|
unless soa_req.answer[0].class == Net::DNS::RR::SOA
|
101
94
|
print "expected SOA, got " + Net::DNS::RR::RRTypes.to_str(soa_req.answer[0].type) + "\n"
|
102
95
|
next
|
103
96
|
end
|
104
|
-
|
97
|
+
|
105
98
|
#----------------------------------------------------------------------
|
106
99
|
# Print the serial number.
|
107
100
|
#----------------------------------------------------------------------
|
108
|
-
|
101
|
+
|
109
102
|
print "has serial number " + soa_req.answer[0].serial.to_s + "\n"
|
110
|
-
|
111
103
|
end
|
112
104
|
end
|
113
|
-
|
114
|
-
|
115
|
-
|
data/demo/threads.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
require 'rubygems' if
|
1
|
+
require 'rubygems' if RUBY_VERSION.to_s < "1.9.0"
|
2
2
|
require 'net/dns'
|
3
3
|
|
4
4
|
a = ["ibm.com", "sun.com", "redhat.com"]
|
5
5
|
|
6
6
|
threads = []
|
7
7
|
|
8
|
-
|
8
|
+
a.each do |dom|
|
9
9
|
threads << Thread.new(dom) do |domain|
|
10
10
|
res = Net::DNS::Resolver.new
|
11
11
|
res.query(domain, Net::DNS::NS).each_nameserver do |ns|
|
@@ -15,8 +15,4 @@ for dom in a
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
threads.each
|
19
|
-
t.join
|
20
|
-
end
|
21
|
-
|
22
|
-
|
18
|
+
threads.each(&:join)
|