evt-dns-resolve_host 0.0.0.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 +7 -0
- data/lib/dns/resolve_host/controls/hostname.rb +13 -0
- data/lib/dns/resolve_host/controls/ip_address.rb +23 -0
- data/lib/dns/resolve_host/controls/server.rb +63 -0
- data/lib/dns/resolve_host/controls.rb +16 -0
- data/lib/dns/resolve_host/defaults.rb +9 -0
- data/lib/dns/resolve_host/log.rb +11 -0
- data/lib/dns/resolve_host/nameserver.rb +9 -0
- data/lib/dns/resolve_host/resolve_host.rb +47 -0
- data/lib/dns/resolve_host/substitute.rb +27 -0
- data/lib/dns/resolve_host.rb +9 -0
- metadata +109 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a7f2c109900a98a609793db9aa17c57a226d0622
|
4
|
+
data.tar.gz: e37d7580573e4e595a3dd1710af66d1d3b3dfb6e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 958116b8dc08f84892e3847f93fd266908408df50916271b096af5b5e93e32b40dc8a6c72eea054d5c19ca649d024f8d83a00c6433ec9664bc78a3576a131504
|
7
|
+
data.tar.gz: dfbccae87305fdb7b11fdca2cb5883eb65f58a58a778d7ebc1646a6f7bf804b6505d8d39c3f1f833ff813d3e30cbbefe8414e2f85667cbf116cf76d6d59d9c3a
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module DNS
|
2
|
+
class ResolveHost
|
3
|
+
module Controls
|
4
|
+
module IPAddress
|
5
|
+
def self.example(i=nil)
|
6
|
+
i ||= 1
|
7
|
+
|
8
|
+
ip_address = IPAddr.new "127.0.0.#{i}"
|
9
|
+
|
10
|
+
ip_address.to_s
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.list(count=nil)
|
14
|
+
count ||= 3
|
15
|
+
|
16
|
+
(1..count).map do |i|
|
17
|
+
example i
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module DNS
|
2
|
+
class ResolveHost
|
3
|
+
module Controls
|
4
|
+
module Server
|
5
|
+
def self.start(hostname: nil, ip_addresses: nil, &block)
|
6
|
+
hostname ||= Hostname.example
|
7
|
+
ip_addresses ||= [IPAddress.example]
|
8
|
+
|
9
|
+
bind_address = BindAddress.example
|
10
|
+
port = Port.example
|
11
|
+
|
12
|
+
interfaces = [[:udp, bind_address, port], [:tcp, bind_address, port]]
|
13
|
+
|
14
|
+
Celluloid.logger = Log.get self
|
15
|
+
|
16
|
+
dns_server = RubyDNS.run_server :listen => interfaces, :asynchronous => true do
|
17
|
+
match %r{\A#{Regexp.escape hostname}\z} do |request|
|
18
|
+
ip_addresses.each do |ip_address|
|
19
|
+
request.respond! ip_address
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
nameserver = Nameserver.new bind_address, port
|
25
|
+
|
26
|
+
block.(nameserver)
|
27
|
+
|
28
|
+
# The rubydns library does not properly unbind its server socket when
|
29
|
+
# the actor terminates. See the following github issue:
|
30
|
+
#
|
31
|
+
# https://github.com/ioquatix/rubydns/issues/60
|
32
|
+
#
|
33
|
+
# The workaround discovered by the person who filed the issue is
|
34
|
+
# pasted here. The proper way to stop the DNS server would be this:
|
35
|
+
#
|
36
|
+
# dns_server.terminate
|
37
|
+
#
|
38
|
+
# [Nathan Ladd, Fri 30 Dec 2016]
|
39
|
+
dns_server.actors.first.links.each(&:terminate)
|
40
|
+
end
|
41
|
+
|
42
|
+
class Log < ::Log
|
43
|
+
def tag!(tags)
|
44
|
+
tags << :celluloid
|
45
|
+
tags << :control_dns_server
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
module BindAddress
|
50
|
+
def self.example
|
51
|
+
'127.0.0.1'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
module Port
|
56
|
+
def self.example
|
57
|
+
10053
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'dns/resolve_host/controls/ip_address'
|
2
|
+
require 'dns/resolve_host/controls/hostname'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'rubydns'
|
6
|
+
require 'dns/resolve_host/controls/server'
|
7
|
+
rescue LoadError
|
8
|
+
require 'pathname'
|
9
|
+
|
10
|
+
log_subject = Pathname.new(__FILE__).relative_path_from(Pathname.new(Dir.pwd))
|
11
|
+
logger = DNS::ResolveHost::Log.get log_subject.to_s
|
12
|
+
|
13
|
+
logger.warn <<~TEXT
|
14
|
+
rubydns is not present in the load path. As a result, the control server was not loaded. If the control server is needed, add `rubydns' to the current project.
|
15
|
+
TEXT
|
16
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module DNS
|
2
|
+
class ResolveHost
|
3
|
+
include Log::Dependency
|
4
|
+
|
5
|
+
configure :resolve_host
|
6
|
+
|
7
|
+
attr_accessor :nameserver
|
8
|
+
|
9
|
+
def call(hostname, &block)
|
10
|
+
if nameserver
|
11
|
+
options = { :nameserver_port => [nameserver.to_a] }
|
12
|
+
else
|
13
|
+
options = nil
|
14
|
+
end
|
15
|
+
|
16
|
+
logger.trace { "Resolving host (#{LogAttributes.get self, hostname})" }
|
17
|
+
|
18
|
+
Resolv::DNS.open options do |dns|
|
19
|
+
block.(dns) if block
|
20
|
+
|
21
|
+
addresses = dns.getaddresses hostname
|
22
|
+
|
23
|
+
addresses.map! &:to_s
|
24
|
+
|
25
|
+
if addresses.empty?
|
26
|
+
logger.warn { "Could not resolve host (#{LogAttributes.get self, hostname})" }
|
27
|
+
else
|
28
|
+
logger.info { "Resolved host (#{LogAttributes.get self, hostname}, Address#{'es' unless addresses.count == 1}: #{addresses * ', '})" }
|
29
|
+
end
|
30
|
+
|
31
|
+
return addresses
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
module LogAttributes
|
36
|
+
def self.get(resolve_host, hostname)
|
37
|
+
if resolve_host.nameserver
|
38
|
+
nameserver = resolve_host.nameserver.to_a * ':'
|
39
|
+
else
|
40
|
+
nameserver = "(system)"
|
41
|
+
end
|
42
|
+
|
43
|
+
"Hostname: #{hostname}, Nameserver: #{nameserver}"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module DNS
|
2
|
+
class ResolveHost
|
3
|
+
module Substitute
|
4
|
+
def self.build
|
5
|
+
ResolveHost.new
|
6
|
+
end
|
7
|
+
|
8
|
+
class ResolveHost
|
9
|
+
def call(hostname)
|
10
|
+
map[hostname]
|
11
|
+
end
|
12
|
+
|
13
|
+
def set(hostname, ip_addresses)
|
14
|
+
ip_addresses = Array(ip_addresses)
|
15
|
+
|
16
|
+
map[hostname] = ip_addresses
|
17
|
+
|
18
|
+
ip_addresses
|
19
|
+
end
|
20
|
+
|
21
|
+
def map
|
22
|
+
@map ||= Hash.new { [] }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: evt-dns-resolve_host
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- The Eventide Project
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-12-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: evt-configure
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: evt-log
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: test_bench
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubydns
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: " "
|
70
|
+
email: opensource@eventide-project.org
|
71
|
+
executables: []
|
72
|
+
extensions: []
|
73
|
+
extra_rdoc_files: []
|
74
|
+
files:
|
75
|
+
- lib/dns/resolve_host.rb
|
76
|
+
- lib/dns/resolve_host/controls.rb
|
77
|
+
- lib/dns/resolve_host/controls/hostname.rb
|
78
|
+
- lib/dns/resolve_host/controls/ip_address.rb
|
79
|
+
- lib/dns/resolve_host/controls/server.rb
|
80
|
+
- lib/dns/resolve_host/defaults.rb
|
81
|
+
- lib/dns/resolve_host/log.rb
|
82
|
+
- lib/dns/resolve_host/nameserver.rb
|
83
|
+
- lib/dns/resolve_host/resolve_host.rb
|
84
|
+
- lib/dns/resolve_host/substitute.rb
|
85
|
+
homepage: https://github.com/eventide-project/dns-resolve-host
|
86
|
+
licenses:
|
87
|
+
- MIT
|
88
|
+
metadata: {}
|
89
|
+
post_install_message:
|
90
|
+
rdoc_options: []
|
91
|
+
require_paths:
|
92
|
+
- lib
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: 2.3.3
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
requirements: []
|
104
|
+
rubyforge_project:
|
105
|
+
rubygems_version: 2.6.8
|
106
|
+
signing_key:
|
107
|
+
specification_version: 4
|
108
|
+
summary: Resolve host names to IP addresses
|
109
|
+
test_files: []
|