net-dns 0.9.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 +4 -4
- data/CHANGELOG.md +29 -16
- data/README.md +1 -1
- data/lib/net/dns/header.rb +48 -64
- data/lib/net/dns/names.rb +8 -10
- data/lib/net/dns/packet.rb +46 -53
- data/lib/net/dns/question.rb +5 -3
- data/lib/net/dns/resolver/socks.rb +5 -7
- data/lib/net/dns/resolver/timeouts.rb +3 -5
- data/lib/net/dns/resolver.rb +54 -69
- data/lib/net/dns/rr/a.rb +3 -4
- data/lib/net/dns/rr/aaaa.rb +3 -5
- data/lib/net/dns/rr/classes.rb +6 -8
- data/lib/net/dns/rr/cname.rb +3 -5
- data/lib/net/dns/rr/hinfo.rb +9 -13
- data/lib/net/dns/rr/mr.rb +3 -5
- data/lib/net/dns/rr/mx.rb +5 -7
- data/lib/net/dns/rr/ns.rb +3 -5
- data/lib/net/dns/rr/null.rb +3 -5
- data/lib/net/dns/rr/ptr.rb +3 -5
- data/lib/net/dns/rr/soa.rb +11 -7
- data/lib/net/dns/rr/srv.rb +5 -2
- data/lib/net/dns/rr/txt.rb +4 -6
- data/lib/net/dns/rr/types.rb +90 -79
- data/lib/net/dns/rr.rb +2 -2
- data/lib/net/dns/version.rb +1 -1
- data/lib/net/dns.rb +3 -1
- metadata +11 -104
- data/.gitignore +0 -8
- data/.rubocop.yml +0 -3
- data/.rubocop_defaults.yml +0 -364
- data/.rubocop_todo.yml +0 -207
- data/Gemfile +0 -8
- data/Rakefile +0 -38
- data/bin/console +0 -14
- data/lib/net/dns/core_ext.rb +0 -45
- data/net-dns.gemspec +0 -23
- data/spec/fixtures/resolv.conf +0 -4
- data/spec/spec_helper.rb +0 -14
- data/spec/unit/resolver/dns_timeout_spec.rb +0 -36
- data/spec/unit/resolver/tcp_timeout_spec.rb +0 -46
- data/spec/unit/resolver/udp_timeout_spec.rb +0 -46
- data/test/test_helper.rb +0 -13
- data/test/unit/header_test.rb +0 -164
- data/test/unit/names_test.rb +0 -21
- data/test/unit/packet_test.rb +0 -47
- data/test/unit/question_test.rb +0 -81
- data/test/unit/resolver_test.rb +0 -114
- data/test/unit/rr/a_test.rb +0 -106
- data/test/unit/rr/aaaa_test.rb +0 -102
- data/test/unit/rr/classes_test.rb +0 -83
- data/test/unit/rr/cname_test.rb +0 -90
- data/test/unit/rr/hinfo_test.rb +0 -111
- data/test/unit/rr/mr_test.rb +0 -99
- data/test/unit/rr/mx_test.rb +0 -106
- data/test/unit/rr/ns_test.rb +0 -80
- data/test/unit/rr/types_test.rb +0 -71
- data/test/unit/rr_test.rb +0 -127
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fec69b4a6e824defa6fb7a25a020a67d0dba5340f2f42b1c489e3b73027b6577
|
4
|
+
data.tar.gz: bd9fcd575cb009fa14ce0443ea3b415f0924a04c3a63be620b350c913b93fe39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ba5ecc052ddd89bfc5bb264ce0a11edb2aa791b1d6285075f0f96245634b1b73bb69e29e883bd4656a85d6c82e6f331e11cfb66b55a10da27b90221ad61f8d6
|
7
|
+
data.tar.gz: 0ff1b210ef56b91a7dc3d914039bedb7e08803c8838a0eefe1233fef4c97a7e817b06387e45bc6b77354a3efe7f9fc885499efff0aabacb07ac24c3eb75aca15
|
data/CHANGELOG.md
CHANGED
@@ -1,33 +1,46 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
3
|
|
4
|
-
## Release 0.
|
4
|
+
## Release 0.20.0
|
5
5
|
|
6
|
-
-
|
6
|
+
- CHANGED: Minimum Ruby version is now 2.7
|
7
|
+
|
8
|
+
- CHANGED: Merged changes from gitlab-net-dns @stanhu
|
9
|
+
|
10
|
+
- FIXED: Fixed undefined method 'size' errors (GH-46, GH-81) @stanhu
|
11
|
+
|
12
|
+
- FIXED: uninitialized constant Net::DNS::Resolver::TimeoutError (GH-82, GH-83, GH-84)
|
13
|
+
|
14
|
+
- ADDED: Added URI/SPF/CAA type code
|
7
15
|
|
8
|
-
|
16
|
+
|
17
|
+
## Release 0.9.0
|
9
18
|
|
10
19
|
- CHANGED: Major code cleanup.
|
11
20
|
|
12
21
|
- CHANGED: Minimum Ruby version is now 2.1
|
13
22
|
|
23
|
+
- FIXED: Fixed CI run (GH-77).
|
24
|
+
|
25
|
+
- FIXED: Fixed deprecated references to Fixnum.
|
14
26
|
|
15
|
-
## Release 0.8.0
|
16
27
|
|
17
|
-
|
28
|
+
## Release 0.8.0
|
18
29
|
|
19
|
-
- FIXED:
|
30
|
+
- FIXED: undefined local variable or method `source_address_inet6' (GH-40). @simsicon
|
20
31
|
|
21
|
-
-
|
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
|
22
35
|
|
23
|
-
- CHANGED: require 'net/dns' is now the preferred way to load the library (GH-37).
|
36
|
+
- CHANGED: require 'net/dns' is now the preferred way to load the library (GH-37). @johnroa
|
24
37
|
|
25
38
|
- CHANGED: Removed setup.rb installation script.
|
26
39
|
|
27
40
|
|
28
41
|
## Release 0.7.1
|
29
42
|
|
30
|
-
- FIXED: Invalid file permissions on several files (GH-35)
|
43
|
+
- FIXED: Invalid file permissions on several files (GH-35) @jamespharaoh
|
31
44
|
|
32
45
|
|
33
46
|
## Release 0.7.0
|
@@ -38,15 +51,15 @@
|
|
38
51
|
|
39
52
|
- FIXED: Cleaned up require dependency and recursive require statements.
|
40
53
|
|
41
|
-
- 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
|
42
55
|
|
43
|
-
- FIXED: SRV record not required by Net::DNS::RR (GH-27)
|
56
|
+
- FIXED: SRV record not required by Net::DNS::RR (GH-27) @sebastian
|
44
57
|
|
45
|
-
- FIXED: Resolver now supports IPv6 (GH-32)
|
58
|
+
- FIXED: Resolver now supports IPv6 (GH-32) @jamesotron
|
46
59
|
|
47
|
-
- FIXED: Net::DNS::RR::PTR references an invalid parameter (GH-19)
|
60
|
+
- FIXED: Net::DNS::RR::PTR references an invalid parameter (GH-19) @dd23
|
48
61
|
|
49
|
-
- FIXED: Net::DNS::Question changes input arguments (GH-7)
|
62
|
+
- FIXED: Net::DNS::Question changes input arguments (GH-7) @gfarfl
|
50
63
|
|
51
64
|
- CHANGED: Refactoring unit test to follow most used Ruby conventions.
|
52
65
|
|
@@ -67,9 +80,9 @@
|
|
67
80
|
|
68
81
|
- ADDED: Net::DNS::Packet#to_s method (alias of #inspect)
|
69
82
|
|
70
|
-
- FIXED: typo in lib/net/dns/rr/ptr.rb
|
83
|
+
- FIXED: typo in lib/net/dns/rr/ptr.rb. Thanks Chris Lundquist.
|
71
84
|
|
72
|
-
- FIXED: warning: method redefined; discarding old inspect (GH-3)
|
85
|
+
- FIXED: warning: method redefined; discarding old inspect (GH-3). Thanks Kevin Baker.
|
73
86
|
|
74
87
|
- FIXED: issue with rescue ArgumentError (GH-5) and with IPAddr handling (GH-6)
|
75
88
|
|
data/README.md
CHANGED
data/lib/net/dns/header.rb
CHANGED
@@ -128,16 +128,16 @@ module Net
|
|
128
128
|
"",
|
129
129
|
"",].freeze
|
130
130
|
|
131
|
-
attr_reader :code
|
131
|
+
attr_reader :code
|
132
|
+
attr_reader :type
|
133
|
+
attr_reader :explanation
|
132
134
|
|
133
135
|
def initialize(code)
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
raise ArgumentError, "RCode `#{code}' out of range"
|
140
|
-
end
|
136
|
+
raise ArgumentError, "RCode `#{code}' out of range" unless (0..10).cover? code
|
137
|
+
|
138
|
+
@code = code
|
139
|
+
@type = RCodeType[code]
|
140
|
+
@explanation = RCodeErrorString[code]
|
141
141
|
end
|
142
142
|
|
143
143
|
def to_s
|
@@ -205,11 +205,9 @@ module Net
|
|
205
205
|
# See also each option for a detailed explanation of usage.
|
206
206
|
#
|
207
207
|
def initialize(arg = {})
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
raise ArgumentError, "Wrong argument class `#{arg.class}'"
|
212
|
-
end
|
208
|
+
raise ArgumentError, "Wrong argument class `#{arg.class}'" unless arg.is_a? Hash
|
209
|
+
|
210
|
+
new_from_hash(arg)
|
213
211
|
end
|
214
212
|
|
215
213
|
# Creates a new Net::DNS::Header object from binary data, which is
|
@@ -225,13 +223,11 @@ module Net
|
|
225
223
|
# #=> "true" if it comes from authoritative name server
|
226
224
|
#
|
227
225
|
def self.parse(arg)
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
raise ArgumentError, "Wrong argument class `#{arg.class}'"
|
234
|
-
end
|
226
|
+
raise ArgumentError, "Wrong argument class `#{arg.class}'" unless arg.is_a? String
|
227
|
+
|
228
|
+
o = allocate
|
229
|
+
o.send(:new_from_binary, arg)
|
230
|
+
o
|
235
231
|
end
|
236
232
|
|
237
233
|
# Inspect method, prints out all the options and relative values.
|
@@ -251,18 +247,18 @@ module Net
|
|
251
247
|
# do stuff
|
252
248
|
else
|
253
249
|
";; qr = #{@qr}\t" \
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
250
|
+
"opCode: #{opCode_str}\t" \
|
251
|
+
"aa = #{@aa}\t" \
|
252
|
+
"tc = #{@tc}\t" \
|
253
|
+
"rd = #{@rd}\n" \
|
254
|
+
";; ra = #{@ra}\t" \
|
255
|
+
"ad = #{@ad}\t" \
|
256
|
+
"cd = #{@cd}\t" \
|
257
|
+
"rcode = #{@rCode.type}\n" \
|
258
|
+
";; qdCount = #{@qdCount}\t" \
|
259
|
+
"anCount = #{@anCount}\t" \
|
260
|
+
"nsCount = #{@nsCount}\t" \
|
261
|
+
"arCount = #{@arCount}\n"
|
266
262
|
end
|
267
263
|
end
|
268
264
|
|
@@ -329,11 +325,9 @@ module Net
|
|
329
325
|
# performing security tests.
|
330
326
|
#
|
331
327
|
def id=(val)
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
raise ArgumentError, "ID `#{val}' out of range"
|
336
|
-
end
|
328
|
+
raise ArgumentError, "ID `#{val}' out of range" unless (0..65_535).cover? val
|
329
|
+
|
330
|
+
@id = val
|
337
331
|
end
|
338
332
|
|
339
333
|
# Checks whether the header is a query (+qr+ bit set to 0)
|
@@ -392,11 +386,9 @@ module Net
|
|
392
386
|
# header.opCode = Header::STATUS
|
393
387
|
#
|
394
388
|
def opCode=(val)
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
raise WrongOpcodeError, "Wrong opCode value (#{val}), must be QUERY, IQUERY or STATUS"
|
399
|
-
end
|
389
|
+
raise WrongOpcodeError, "Wrong opCode value (#{val}), must be QUERY, IQUERY or STATUS" unless (0..2).cover? val
|
390
|
+
|
391
|
+
@opCode = val
|
400
392
|
end
|
401
393
|
|
402
394
|
# Checks whether the response is authoritative
|
@@ -620,41 +612,33 @@ module Net
|
|
620
612
|
# Sets the number of entries in a question section
|
621
613
|
#
|
622
614
|
def qdCount=(val)
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
raise WrongCountError, "Wrong number of count (#{val}), must be 0-65535"
|
627
|
-
end
|
615
|
+
raise WrongCountError, "Wrong number of count (#{val}), must be 0-65535" unless (0..65_535).cover? val
|
616
|
+
|
617
|
+
@qdCount = val
|
628
618
|
end
|
629
619
|
|
630
620
|
# Sets the number of RRs in an answer section
|
631
621
|
#
|
632
622
|
def anCount=(val)
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
raise WrongCountError, "Wrong number of count (#{val}), must be 0-65535"
|
637
|
-
end
|
623
|
+
raise WrongCountError, "Wrong number of count (#{val}), must be 0-65535" unless (0..65_535).cover? val
|
624
|
+
|
625
|
+
@anCount = val
|
638
626
|
end
|
639
627
|
|
640
628
|
# Sets the number of RRs in an authority section
|
641
629
|
#
|
642
630
|
def nsCount=(val)
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
raise WrongCountError, "Wrong number of count (#{val}), must be 0-65535"
|
647
|
-
end
|
631
|
+
raise WrongCountError, "Wrong number of count (#{val}), must be 0-65535" unless (0..65_535).cover? val
|
632
|
+
|
633
|
+
@nsCount = val
|
648
634
|
end
|
649
635
|
|
650
636
|
# Sets the number of RRs in an addictional section
|
651
637
|
#
|
652
638
|
def arCount=(val)
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
raise WrongCountError, "Wrong number of count: `#{val}' must be 0-65535"
|
657
|
-
end
|
639
|
+
raise WrongCountError, "Wrong number of count: `#{val}' must be 0-65535" unless (0..65_535).cover? val
|
640
|
+
|
641
|
+
@arCount = val
|
658
642
|
end
|
659
643
|
|
660
644
|
private
|
@@ -674,12 +658,12 @@ module Net
|
|
674
658
|
end
|
675
659
|
|
676
660
|
arr = str.unpack("n C2 n4")
|
677
|
-
@id
|
661
|
+
@id = arr[0]
|
678
662
|
@qr = (arr[1] >> 7) & 0x01
|
679
663
|
@opCode = (arr[1] >> 3) & 0x0F
|
680
664
|
@aa = (arr[1] >> 2) & 0x01
|
681
665
|
@tc = (arr[1] >> 1) & 0x01
|
682
|
-
@rd
|
666
|
+
@rd = arr[1] & 0x1
|
683
667
|
@ra = (arr[2] >> 7) & 0x01
|
684
668
|
@ad = (arr[2] >> 5) & 0x01
|
685
669
|
@cd = (arr[2] >> 4) & 0x01
|
data/lib/net/dns/names.rb
CHANGED
@@ -12,7 +12,7 @@ module Net # :nodoc:
|
|
12
12
|
INT16SZ = 2
|
13
13
|
|
14
14
|
# Expand a compressed name in a DNS Packet object. Please
|
15
|
-
# see
|
15
|
+
# see RFC1035 for an explanation of how the compression
|
16
16
|
# in DNS packets works, how may it be useful and how should
|
17
17
|
# be handled.
|
18
18
|
#
|
@@ -24,9 +24,9 @@ module Net # :nodoc:
|
|
24
24
|
name = ""
|
25
25
|
packetlen = packet.size
|
26
26
|
loop do
|
27
|
-
raise ExpandError, "Offset is greater than packet
|
27
|
+
raise ExpandError, "Offset is greater than packet length!" if packetlen < (offset + 1)
|
28
28
|
|
29
|
-
len = packet.
|
29
|
+
len = packet.unpack1("@#{offset} C")
|
30
30
|
|
31
31
|
if len == 0
|
32
32
|
offset += 1
|
@@ -34,7 +34,7 @@ module Net # :nodoc:
|
|
34
34
|
elsif (len & 0xC0) == 0xC0
|
35
35
|
raise ExpandError, "Packet ended before offset expand" if packetlen < (offset + INT16SZ)
|
36
36
|
|
37
|
-
ptr = packet.
|
37
|
+
ptr = packet.unpack1("@#{offset} n")
|
38
38
|
ptr &= 0x3FFF
|
39
39
|
name2 = dn_expand(packet, ptr)[0]
|
40
40
|
raise ExpandError, "Packet is malformed!" if name2.nil?
|
@@ -98,7 +98,7 @@ module Net # :nodoc:
|
|
98
98
|
offset += INT16SZ
|
99
99
|
break
|
100
100
|
else
|
101
|
-
len = entry.
|
101
|
+
len = entry.unpack1("C")
|
102
102
|
elem = entry[1..len]
|
103
103
|
str += [len, elem].pack("Ca*")
|
104
104
|
names.update(entry.to_s => offset)
|
@@ -109,11 +109,9 @@ module Net # :nodoc:
|
|
109
109
|
end
|
110
110
|
|
111
111
|
def valid?(name)
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
raise ArgumentError, "Invalid FQDN: #{name}"
|
116
|
-
end
|
112
|
+
raise ArgumentError, "Invalid FQDN: #{name}" unless name =~ /^([a-z0-9]([-a-z0-9]*[a-z0-9])?\.)+((a[cdefgilmnoqrstuwxz]|aero|arpa)|(b[abdefghijmnorstvwyz]|biz)|(c[acdfghiklmnorsuvxyz]|cat|com|coop)|d[ejkmoz]|(e[ceghrstu]|edu)|f[ijkmor]|(g[abdefghilmnpqrstuwy]|gov)|h[kmnrtu]|(i[delmnoqrst]|info|int)|(j[emop]|jobs)|k[eghimnprwyz]|l[abcikrstuvy]|(m[acdghklmnopqrstuvwxyz]|mil|mobi|museum)|(n[acefgilopruz]|name|net)|(om|org)|(p[aefghklmnrstwy]|pro)|qa|r[eouw]|s[abcdeghijklmnortvyz]|(t[cdfghjklmnoprtvwz]|travel)|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw])$/i
|
113
|
+
|
114
|
+
name
|
117
115
|
end
|
118
116
|
end
|
119
117
|
end
|
data/lib/net/dns/packet.rb
CHANGED
@@ -90,8 +90,13 @@ module Net
|
|
90
90
|
class PacketError < Error
|
91
91
|
end
|
92
92
|
|
93
|
-
attr_reader :header
|
94
|
-
attr_reader :
|
93
|
+
attr_reader :header
|
94
|
+
attr_reader :question
|
95
|
+
attr_reader :answer
|
96
|
+
attr_reader :authority
|
97
|
+
attr_reader :additional
|
98
|
+
attr_reader :answerfrom
|
99
|
+
attr_reader :answersize
|
95
100
|
|
96
101
|
# Creates a new instance of <tt>Net::DNS::Packet</tt> class. Arguments are the
|
97
102
|
# canonical name of the resource, an optional type field and an optional
|
@@ -261,11 +266,9 @@ module Net
|
|
261
266
|
# Assigns a <tt>Net::DNS::Header</tt> <tt>object</tt>
|
262
267
|
# to this <tt>Net::DNS::Packet</tt> instance.
|
263
268
|
def header=(object)
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
raise ArgumentError, "Argument must be a Net::DNS::Header object"
|
268
|
-
end
|
269
|
+
raise ArgumentError, "Argument must be a Net::DNS::Header object" unless object.is_a? Net::DNS::Header
|
270
|
+
|
271
|
+
@header = object
|
269
272
|
end
|
270
273
|
|
271
274
|
# Assigns a <tt>Net::DNS::Question</tt> <tt>object</tt>
|
@@ -273,11 +276,10 @@ module Net
|
|
273
276
|
def question=(object)
|
274
277
|
case object
|
275
278
|
when Array
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
end
|
279
|
+
raise ArgumentError, "Some of the elements is not an Net::DNS::Question object" unless object.all? { |x| x.is_a? Net::DNS::Question }
|
280
|
+
|
281
|
+
@question = object
|
282
|
+
|
281
283
|
when Net::DNS::Question
|
282
284
|
@question = [object]
|
283
285
|
else
|
@@ -290,11 +292,10 @@ module Net
|
|
290
292
|
def answer=(object)
|
291
293
|
case object
|
292
294
|
when Array
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
end
|
295
|
+
raise ArgumentError, "Some of the elements is not an Net::DNS::RR object" unless object.all? { |x| x.is_a? Net::DNS::RR }
|
296
|
+
|
297
|
+
@answer = object
|
298
|
+
|
298
299
|
when Net::DNS::RR
|
299
300
|
@answer = [object]
|
300
301
|
else
|
@@ -307,11 +308,10 @@ module Net
|
|
307
308
|
def additional=(object)
|
308
309
|
case object
|
309
310
|
when Array
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
end
|
311
|
+
raise ArgumentError, "Some of the elements is not an Net::DNS::RR object" unless object.all? { |x| x.is_a? Net::DNS::RR }
|
312
|
+
|
313
|
+
@additional = object
|
314
|
+
|
315
315
|
when Net::DNS::RR
|
316
316
|
@additional = [object]
|
317
317
|
else
|
@@ -324,11 +324,10 @@ module Net
|
|
324
324
|
def authority=(object)
|
325
325
|
case object
|
326
326
|
when Array
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
end
|
327
|
+
raise ArgumentError, "Some of the elements is not an Net::DNS::RR object" unless object.all? { |x| x.is_a? Net::DNS::RR }
|
328
|
+
|
329
|
+
@authority = object
|
330
|
+
|
332
331
|
when Net::DNS::RR
|
333
332
|
@authority = [object]
|
334
333
|
else
|
@@ -345,7 +344,7 @@ module Net
|
|
345
344
|
#
|
346
345
|
# As you can see in the documentation for the <tt>Net::DNS::RR::A</tt> class,
|
347
346
|
# the address returned is an instance of <tt>IPAddr</tt> class.
|
348
|
-
def each_address
|
347
|
+
def each_address
|
349
348
|
@answer.each do |elem|
|
350
349
|
next unless elem.class == Net::DNS::RR::A
|
351
350
|
|
@@ -360,7 +359,7 @@ module Net
|
|
360
359
|
# puts "Nameserver found: #{ns}"
|
361
360
|
# end
|
362
361
|
#
|
363
|
-
def each_nameserver
|
362
|
+
def each_nameserver
|
364
363
|
@answer.each do |elem|
|
365
364
|
next unless elem.class == Net::DNS::RR::NS
|
366
365
|
|
@@ -375,7 +374,7 @@ module Net
|
|
375
374
|
# puts "Mail exchange #{name} has preference #{pref}"
|
376
375
|
# end
|
377
376
|
#
|
378
|
-
def each_mx
|
377
|
+
def each_mx
|
379
378
|
@answer.each do |elem|
|
380
379
|
next unless elem.class == Net::DNS::RR::MX
|
381
380
|
|
@@ -390,7 +389,7 @@ module Net
|
|
390
389
|
# puts "Canonical name: #{cname}"
|
391
390
|
# end
|
392
391
|
#
|
393
|
-
def each_cname
|
392
|
+
def each_cname
|
394
393
|
@answer.each do |elem|
|
395
394
|
next unless elem.class == Net::DNS::RR::CNAME
|
396
395
|
|
@@ -405,7 +404,7 @@ module Net
|
|
405
404
|
# puts "Pointer for resource: #{ptr}"
|
406
405
|
# end
|
407
406
|
#
|
408
|
-
def each_ptr
|
407
|
+
def each_ptr
|
409
408
|
@answer.each do |elem|
|
410
409
|
next unless elem.class == Net::DNS::RR::PTR
|
411
410
|
|
@@ -505,13 +504,11 @@ module Net
|
|
505
504
|
|
506
505
|
@answer = []
|
507
506
|
@header.anCount.times do
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
warn "Net::DNS unsupported record type: #{e.message}"
|
514
|
-
end
|
507
|
+
rrobj, offset = Net::DNS::RR.parse_packet(data, offset)
|
508
|
+
@answer << rrobj
|
509
|
+
@logger.debug rrobj.inspect
|
510
|
+
rescue NameError => e
|
511
|
+
warn "Net::DNS unsupported record type: #{e.message}"
|
515
512
|
end
|
516
513
|
|
517
514
|
#------------------------------------------------------------
|
@@ -522,13 +519,11 @@ module Net
|
|
522
519
|
|
523
520
|
@authority = []
|
524
521
|
@header.nsCount.times do
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
warn "Net::DNS unsupported record type: #{e.message}"
|
531
|
-
end
|
522
|
+
rrobj, offset = Net::DNS::RR.parse_packet(data, offset)
|
523
|
+
@authority << rrobj
|
524
|
+
@logger.debug rrobj.inspect
|
525
|
+
rescue NameError => e
|
526
|
+
warn "Net::DNS unsupported record type: #{e.message}"
|
532
527
|
end
|
533
528
|
|
534
529
|
#------------------------------------------------------------
|
@@ -538,13 +533,11 @@ module Net
|
|
538
533
|
|
539
534
|
@additional = []
|
540
535
|
@header.arCount.times do
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
warn "Net::DNS unsupported record type: #{e.message}"
|
547
|
-
end
|
536
|
+
rrobj, offset = Net::DNS::RR.parse_packet(data, offset)
|
537
|
+
@additional << rrobj
|
538
|
+
@logger.debug rrobj.inspect
|
539
|
+
rescue NameError => e
|
540
|
+
warn "Net::DNS unsupported record type: #{e.message}"
|
548
541
|
end
|
549
542
|
end
|
550
543
|
|
data/lib/net/dns/question.rb
CHANGED
@@ -152,7 +152,7 @@ module Net
|
|
152
152
|
result = ""
|
153
153
|
offset = 0
|
154
154
|
loop do
|
155
|
-
len = str.
|
155
|
+
len = str.unpack1("@#{offset} C")
|
156
156
|
break if len == 0
|
157
157
|
|
158
158
|
offset += 1
|
@@ -165,7 +165,7 @@ module Net
|
|
165
165
|
|
166
166
|
def check_name(input)
|
167
167
|
name = input.to_s.strip
|
168
|
-
if name =~ /[^\w\.\-_]/
|
168
|
+
if name =~ /[^\w\.\-_\*]/
|
169
169
|
raise NameInvalid, "Invalid Question Name `#{name}'"
|
170
170
|
end
|
171
171
|
|
@@ -173,11 +173,13 @@ module Net
|
|
173
173
|
end
|
174
174
|
|
175
175
|
def new_from_binary(data)
|
176
|
+
raise NameInvalid if data.size <= 4
|
177
|
+
|
176
178
|
str, type, cls = data.unpack("a#{data.size - 4}nn")
|
177
179
|
@qName = build_qName(str)
|
178
180
|
@qType = Net::DNS::RR::Types.new type
|
179
181
|
@qClass = Net::DNS::RR::Classes.new cls
|
180
|
-
rescue StandardError
|
182
|
+
rescue StandardError
|
181
183
|
raise ArgumentError, "Invalid data: #{data.inspect}"
|
182
184
|
end
|
183
185
|
end
|
@@ -50,7 +50,7 @@ class RawSocket # :nodoc:
|
|
50
50
|
[@protocol, 'C'], # protocol
|
51
51
|
[0, 'n'], # checksum
|
52
52
|
[@src_addr.to_i, 'N'], # source
|
53
|
-
[@dest_addr.to_i, 'N'],
|
53
|
+
[@dest_addr.to_i, 'N'], # destination
|
54
54
|
])
|
55
55
|
packet << make_transport_header(payload.size)
|
56
56
|
packet << [payload].pack("a*")
|
@@ -71,11 +71,9 @@ class RawSocket # :nodoc:
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def check_port(port)
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
raise ArgumentError, "Port #{port} not valid"
|
78
|
-
end
|
74
|
+
raise ArgumentError, "Port #{port} not valid" unless (1..65_535).cover?(port) && port.is_a?(Integer)
|
75
|
+
|
76
|
+
port
|
79
77
|
end
|
80
78
|
|
81
79
|
def genID
|
@@ -142,7 +140,7 @@ class UdpRawSocket < RawSocket # :nodoc:
|
|
142
140
|
[@src_port, 'n'], # source port
|
143
141
|
[@dest_port, 'n'], # destination port
|
144
142
|
[8 + pay_size, 'n'], # len
|
145
|
-
[0, 'n']
|
143
|
+
[0, 'n'], # checksum (mandatory)
|
146
144
|
])
|
147
145
|
end
|
148
146
|
end
|
@@ -7,11 +7,9 @@ module Net # :nodoc:
|
|
7
7
|
attr_reader :seconds
|
8
8
|
|
9
9
|
def initialize(seconds)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
raise ArgumentError, "Invalid value for tcp timeout"
|
14
|
-
end
|
10
|
+
raise ArgumentError, "Invalid value for tcp timeout" unless seconds.is_a?(Numeric) && seconds >= 0
|
11
|
+
|
12
|
+
@seconds = seconds
|
15
13
|
end
|
16
14
|
|
17
15
|
# Returns a string representation of the timeout corresponding
|