gitlab-net-dns 0.9.1
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 +7 -0
- data/.gitignore +8 -0
- data/.gitlab-ci.yml +20 -0
- data/.rspec +1 -0
- data/.rubocop.yml +3 -0
- data/.rubocop_defaults.yml +359 -0
- data/.rubocop_todo.yml +207 -0
- data/.travis.yml +13 -0
- data/CHANGELOG.md +113 -0
- data/Gemfile +9 -0
- data/LICENSE.txt +56 -0
- data/README.md +172 -0
- data/Rakefile +38 -0
- data/THANKS.rdoc +24 -0
- data/bin/console +14 -0
- data/demo/check_soa.rb +104 -0
- data/demo/threads.rb +18 -0
- data/gitlab-net-dns.gemspec +24 -0
- data/lib/net/dns.rb +104 -0
- data/lib/net/dns/header.rb +705 -0
- data/lib/net/dns/names.rb +120 -0
- data/lib/net/dns/packet.rb +560 -0
- data/lib/net/dns/question.rb +185 -0
- data/lib/net/dns/resolver.rb +1214 -0
- data/lib/net/dns/resolver/socks.rb +148 -0
- data/lib/net/dns/resolver/timeouts.rb +70 -0
- data/lib/net/dns/rr.rb +356 -0
- data/lib/net/dns/rr/a.rb +114 -0
- data/lib/net/dns/rr/aaaa.rb +94 -0
- data/lib/net/dns/rr/classes.rb +130 -0
- data/lib/net/dns/rr/cname.rb +74 -0
- data/lib/net/dns/rr/hinfo.rb +96 -0
- data/lib/net/dns/rr/mr.rb +70 -0
- data/lib/net/dns/rr/mx.rb +82 -0
- data/lib/net/dns/rr/ns.rb +70 -0
- data/lib/net/dns/rr/null.rb +50 -0
- data/lib/net/dns/rr/ptr.rb +77 -0
- data/lib/net/dns/rr/soa.rb +75 -0
- data/lib/net/dns/rr/srv.rb +41 -0
- data/lib/net/dns/rr/txt.rb +58 -0
- data/lib/net/dns/rr/types.rb +191 -0
- data/lib/net/dns/version.rb +8 -0
- data/spec/fixtures/resolv.conf +4 -0
- data/spec/spec_helper.rb +14 -0
- data/spec/unit/resolver/dns_timeout_spec.rb +36 -0
- data/spec/unit/resolver/tcp_timeout_spec.rb +46 -0
- data/spec/unit/resolver/udp_timeout_spec.rb +46 -0
- data/test/test_helper.rb +13 -0
- data/test/unit/header_test.rb +164 -0
- data/test/unit/names_test.rb +21 -0
- data/test/unit/packet_test.rb +47 -0
- data/test/unit/question_test.rb +81 -0
- data/test/unit/resolver_test.rb +114 -0
- data/test/unit/rr/a_test.rb +106 -0
- data/test/unit/rr/aaaa_test.rb +102 -0
- data/test/unit/rr/classes_test.rb +83 -0
- data/test/unit/rr/cname_test.rb +90 -0
- data/test/unit/rr/hinfo_test.rb +111 -0
- data/test/unit/rr/mr_test.rb +99 -0
- data/test/unit/rr/mx_test.rb +106 -0
- data/test/unit/rr/ns_test.rb +80 -0
- data/test/unit/rr/types_test.rb +71 -0
- data/test/unit/rr_test.rb +127 -0
- metadata +172 -0
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## Release 0.9.1
|
4
|
+
|
5
|
+
- FIXED: Fixed undefined 'size' errors (https://gitlab.com/gitlab-org/gitlab-net-dns/merge_requests/2)
|
6
|
+
|
7
|
+
- CHANGED: Test with GitLab CI (https://gitlab.com/gitlab-org/gitlab-net-dns/merge_requests/1)
|
8
|
+
|
9
|
+
## Release 0.9.0
|
10
|
+
|
11
|
+
- FIXED: Fixed CI run (GH-77).
|
12
|
+
|
13
|
+
- FIXED: Fixed deprecated references to Fixnum.
|
14
|
+
|
15
|
+
- CHANGED: Major code cleanup.
|
16
|
+
|
17
|
+
- CHANGED: Minimum Ruby version is now 2.1
|
18
|
+
|
19
|
+
|
20
|
+
## Release 0.8.0
|
21
|
+
|
22
|
+
- FIXED: undefined local variable or method `source_address_inet6' (GH-40). [Thanks @simsicon]
|
23
|
+
|
24
|
+
- FIXED: Fixed bug on parsing multiple nameservers on different lines (GH-45). [Thanks @nicholasren]
|
25
|
+
|
26
|
+
- CHANGED: Dropped duplicate query ID filter. Query ID is now randomically generated but it's not guaranteed to be unique (GH-39). [Thanks @ebroder]
|
27
|
+
|
28
|
+
- CHANGED: require 'net/dns' is now the preferred way to load the library (GH-37). [Thanks @johnroa]
|
29
|
+
|
30
|
+
- CHANGED: Removed setup.rb installation script.
|
31
|
+
|
32
|
+
|
33
|
+
## Release 0.7.1
|
34
|
+
|
35
|
+
- FIXED: Invalid file permissions on several files (GH-35) [Thanks @jamespharaoh]
|
36
|
+
|
37
|
+
|
38
|
+
## Release 0.7.0
|
39
|
+
|
40
|
+
- ADDED: Added (experimental) Support for HINFO record.
|
41
|
+
|
42
|
+
- FIXED: Use Net::DNS::Resolver::Error class (not ResolverError, which does not exist).
|
43
|
+
|
44
|
+
- FIXED: Cleaned up require dependency and recursive require statements.
|
45
|
+
|
46
|
+
- FIXED: Use RbConfig instead of obsolete and deprecated Config (GH-28, GH-33) [Thanks @shadowbq, @eik3]
|
47
|
+
|
48
|
+
- FIXED: SRV record not required by Net::DNS::RR (GH-27) [Thanks @sebastian]
|
49
|
+
|
50
|
+
- FIXED: Resolver now supports IPv6 (GH-32) [Thanks @jamesotron]
|
51
|
+
|
52
|
+
- FIXED: Net::DNS::RR::PTR references an invalid parameter (GH-19) [Thanks @dd23]
|
53
|
+
|
54
|
+
- FIXED: Net::DNS::Question changes input arguments (GH-7) [Thanks @gfarfl]
|
55
|
+
|
56
|
+
- CHANGED: Refactoring unit test to follow most used Ruby conventions.
|
57
|
+
|
58
|
+
- CHANGED: Rewritten and simplified Net::DNS::Classes. Improved test harness.
|
59
|
+
|
60
|
+
- CHANGED: Removed Jeweler development dependency.
|
61
|
+
|
62
|
+
- CHANGED: The library is now compatible with Bundler.
|
63
|
+
|
64
|
+
- CHANGED: Minimum supported Ruby version changed to Ruby 1.8.7.
|
65
|
+
|
66
|
+
- CHANGED: Rescue NameError so unsupported record types only result in a warning.
|
67
|
+
|
68
|
+
- CHANGED: Renamed Net::DNS::Resolver#send to Net::DNS::Resolver#query to avoid overriding default meaning of send method.
|
69
|
+
|
70
|
+
|
71
|
+
## Release 0.6.1
|
72
|
+
|
73
|
+
- ADDED: Net::DNS::Packet#to_s method (alias of #inspect)
|
74
|
+
|
75
|
+
- FIXED: typo in lib/net/dns/rr/ptr.rb [Thanks Chris Lundquist]
|
76
|
+
|
77
|
+
- FIXED: warning: method redefined; discarding old inspect (GH-3) [Thanks Kevin Baker]
|
78
|
+
|
79
|
+
- FIXED: issue with rescue ArgumentError (GH-5) and with IPAddr handling (GH-6)
|
80
|
+
|
81
|
+
|
82
|
+
## Release 0.6.0
|
83
|
+
|
84
|
+
*WARNING:- If you are upgrading from a previous minor release, check out the Compatibility issue list below.
|
85
|
+
|
86
|
+
- FIXED: Added missing #to_s method to Net::DNS::Question.
|
87
|
+
|
88
|
+
- FIXED: Compatibility with Ruby 1.9
|
89
|
+
|
90
|
+
- FIXED: Types regexp order issue
|
91
|
+
|
92
|
+
- CHANGED: Refactoring unit test to follow most used Ruby conventions
|
93
|
+
|
94
|
+
- CHANGED: default timeout is now 5 seconds for both UDP and TCP
|
95
|
+
|
96
|
+
- CHANGED: Moved main dns.rb file to lib/net folder as default for GEMs. In this way it can be autoloaded when the gem is required.
|
97
|
+
|
98
|
+
### Compatibility issues
|
99
|
+
|
100
|
+
- CHANGED: RR#set_stype scope is now private to prevent invalid usage.
|
101
|
+
|
102
|
+
- CHANGED: DnsTimeout#timeout now raises LocalJumpError instead of DnsTimeoutArgumentError when block is missing.
|
103
|
+
|
104
|
+
- CHANGED: Renamed Net::DNS::RR::Types::Types to Net::DNS::RR::Types::TYPES to follow Ruby coding standards.
|
105
|
+
|
106
|
+
|
107
|
+
## Release 0.4
|
108
|
+
|
109
|
+
- many bug fixes (thanks guys!)
|
110
|
+
- a whole new class Net::DNS::Header::RCode
|
111
|
+
- new methods in Net::DNS::Resolver class to do AXFR queries
|
112
|
+
- a new SRV resource record written by Dan Janowski
|
113
|
+
- more documentation written and corrected
|
data/Gemfile
ADDED
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
ADDED
@@ -0,0 +1,172 @@
|
|
1
|
+
# Net::DNS
|
2
|
+
|
3
|
+
Net::DNS is a DNS library written in pure Ruby. It started as a port of Perl Net::DNS module, but it evolved in time into a full Ruby library.
|
4
|
+
|
5
|
+
|
6
|
+
## Features
|
7
|
+
|
8
|
+
- Complete OO interface
|
9
|
+
- Clean and intuitive API
|
10
|
+
- Modular and flexible
|
11
|
+
|
12
|
+
|
13
|
+
## Requirements
|
14
|
+
|
15
|
+
Ruby >= 2.1
|
16
|
+
|
17
|
+
|
18
|
+
## Installation
|
19
|
+
|
20
|
+
The best way to install this library is via [RubyGems](https://rubygems.org/).
|
21
|
+
|
22
|
+
```
|
23
|
+
gem install net-dns
|
24
|
+
```
|
25
|
+
|
26
|
+
|
27
|
+
## API Documentation
|
28
|
+
|
29
|
+
Visit the page http://rdoc.info/gems/net-dns
|
30
|
+
|
31
|
+
|
32
|
+
## Trivial resolver
|
33
|
+
|
34
|
+
The simplest way to use the library is to invoke the Resolver() method:
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
require 'rubygems'
|
38
|
+
require 'net/dns'
|
39
|
+
p Resolver("www.google.com")
|
40
|
+
```
|
41
|
+
|
42
|
+
The output is compatible with BIND zone files and it's the same you would get with the dig utility.
|
43
|
+
|
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
|
+
```
|
73
|
+
|
74
|
+
An optional block can be passed yielding the Net::DNS::Packet object
|
75
|
+
|
76
|
+
```ruby
|
77
|
+
Resolver("www.google.com") { |packet| puts packet.size + " bytes" }
|
78
|
+
# => 484 bytes
|
79
|
+
```
|
80
|
+
|
81
|
+
Same for Net::DNS::Resolver.start():
|
82
|
+
|
83
|
+
```ruby
|
84
|
+
Net::DNS::Resolver.start("google.com").answer.size
|
85
|
+
# => 5
|
86
|
+
```
|
87
|
+
|
88
|
+
As optional parameters, +TYPE+ and +CLASS+ can be specified.
|
89
|
+
|
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
|
+
|
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
|
+
```
|
110
|
+
|
111
|
+
## Handling the response packet
|
112
|
+
|
113
|
+
The method Net::DNS::Resolver.start is a wrapper around Resolver.new. It returns a new Net::DNS::Packet object.
|
114
|
+
|
115
|
+
A DNS packet is divided into 5 sections:
|
116
|
+
|
117
|
+
- header section # => a Net::DNS::Header object
|
118
|
+
- question section # => a Net::DNS::Question object
|
119
|
+
- answer section # => an Array of Net::DNS::RR objects
|
120
|
+
- authority section # => an Array of Net::DNS::RR objects
|
121
|
+
- additional section # => an Array of Net::DNS::RR objects
|
122
|
+
|
123
|
+
You can access each section by calling the attribute with the same name on a Packet object:
|
124
|
+
|
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
|
+
|
137
|
+
The output is
|
138
|
+
|
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
|
+
```
|
146
|
+
|
147
|
+
A better way to handle the answer section is to use the iterators directly on a Packet object:
|
148
|
+
|
149
|
+
```ruby
|
150
|
+
packet.each_address do |ip|
|
151
|
+
puts "#{ip} is alive" if Ping.pingecho(ip.to_s, 10, 80)
|
152
|
+
end
|
153
|
+
```
|
154
|
+
|
155
|
+
Gives:
|
156
|
+
|
157
|
+
```
|
158
|
+
74.125.45.100 is alive
|
159
|
+
74.125.67.100 is alive
|
160
|
+
209.85.171.100 is alive
|
161
|
+
```
|
162
|
+
|
163
|
+
|
164
|
+
## License
|
165
|
+
|
166
|
+
Net::DNS is distributed under the same license Ruby is.
|
167
|
+
|
168
|
+
|
169
|
+
## Authors
|
170
|
+
|
171
|
+
- Marco Ceresa (@bluemonk)
|
172
|
+
- Simone Carletti (@weppos)
|
data/Rakefile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
|
3
|
+
# Run test by default.
|
4
|
+
task default: :test
|
5
|
+
task test: %i[testunit spec]
|
6
|
+
|
7
|
+
require 'rake/testtask'
|
8
|
+
|
9
|
+
Rake::TestTask.new(:testunit) do |t|
|
10
|
+
t.libs = %w[lib test]
|
11
|
+
t.pattern = "test/**/*_test.rb"
|
12
|
+
t.verbose = !ENV["VERBOSE"].nil?
|
13
|
+
t.warning = !ENV["WARNING"].nil?
|
14
|
+
end
|
15
|
+
|
16
|
+
require "rubocop/rake_task"
|
17
|
+
|
18
|
+
RuboCop::RakeTask.new
|
19
|
+
|
20
|
+
require 'rspec/core/rake_task'
|
21
|
+
begin
|
22
|
+
require 'fuubar'
|
23
|
+
rescue LoadError
|
24
|
+
end
|
25
|
+
|
26
|
+
RSpec::Core::RakeTask.new do |t|
|
27
|
+
t.verbose = !!ENV["VERBOSE"]
|
28
|
+
t.rspec_opts = []
|
29
|
+
t.rspec_opts << ['--format', 'Fuubar'] if defined?(Fuubar)
|
30
|
+
end
|
31
|
+
|
32
|
+
require 'yard/rake/yardoc_task'
|
33
|
+
|
34
|
+
YARD::Rake::YardocTask.new(:yardoc) do |y|
|
35
|
+
y.options = ["--output-dir", "yardoc"]
|
36
|
+
end
|
37
|
+
|
38
|
+
CLOBBER.include "yardoc"
|
data/THANKS.rdoc
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
Many thanks to these wonderful people:
|
2
|
+
|
3
|
+
- Paul Barry for his excellent article on May07 issue of LinuxJournal, for the kind words and for bug reports
|
4
|
+
- Dan Janowski (and his SRV RR)
|
5
|
+
- Joshua Abraham
|
6
|
+
- Ben April
|
7
|
+
- Gene Rogers
|
8
|
+
- Nicholas Veeser
|
9
|
+
- Gildas Cherruel
|
10
|
+
- Alex Dalitz
|
11
|
+
- Cory Wright
|
12
|
+
- Nicolas Pugnant
|
13
|
+
- Andrea Peltrin
|
14
|
+
- Giovanni Corriga
|
15
|
+
- Luca Russo
|
16
|
+
- Pierguido Lambri
|
17
|
+
- Andrea Pampuri
|
18
|
+
- _koo_
|
19
|
+
- Oyku Gencay
|
20
|
+
- Eric Liedtke
|
21
|
+
- Justin Mercier
|
22
|
+
- Daniel Berger
|
23
|
+
and all #ruby-lang people
|
24
|
+
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "net/dns"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|