nslookupot 0.0.9 → 0.0.10
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/.github/workflows/ci.yml +1 -1
- data/.rubocop.yml +1 -1
- data/lib/nslookupot/cli.rb +27 -9
- data/lib/nslookupot/error.rb +12 -0
- data/lib/nslookupot/resolver.rb +17 -5
- data/lib/nslookupot/version.rb +1 -1
- data/lib/nslookupot.rb +1 -0
- data/nslookupot.gemspec +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 327221d555480cece10786485fe2dcdda611e1808b95a4cc4e350a666ac20fa9
|
4
|
+
data.tar.gz: 4132dc893b13642955b4cd830d73e98fadf4779ee03fd909abbf17ab83db3dc2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1bea793a0d39ffd71be4335e6fe67ae87531720ed95761134b016c87b09271de5f0231f181827fc4e3503b208b06154f84f3a700b01ac91492aa2047526588cb
|
7
|
+
data.tar.gz: c902c61d252da40c0467a32a2457ed7976617e78a7de0ac1c47ef76f493c6ae8fdb3cfa87fafad3259c5e302a2475d751385b2a4ed2e28f79a931314e3e946b3
|
data/.github/workflows/ci.yml
CHANGED
data/.rubocop.yml
CHANGED
data/lib/nslookupot/cli.rb
CHANGED
@@ -4,6 +4,7 @@ require 'optparse'
|
|
4
4
|
|
5
5
|
module Nslookupot
|
6
6
|
class CLI
|
7
|
+
# rubocop: disable Metrics/AbcSize
|
7
8
|
# rubocop: disable Metrics/MethodLength
|
8
9
|
def parse_options(argv = ARGV)
|
9
10
|
op = OptionParser.new
|
@@ -62,25 +63,26 @@ module Nslookupot
|
|
62
63
|
args = op.parse(argv)
|
63
64
|
rescue OptionParser::InvalidOption => e
|
64
65
|
warn op.to_s
|
65
|
-
warn "
|
66
|
+
warn "** #{e.message}"
|
66
67
|
exit 1
|
67
68
|
end
|
68
69
|
|
69
70
|
begin
|
70
71
|
type = s2typeclass(type)
|
71
72
|
rescue NameError
|
72
|
-
warn "
|
73
|
+
warn "** unknown query type: #{type.upcase}"
|
73
74
|
exit 1
|
74
75
|
end
|
75
76
|
|
76
77
|
if args.size != 1
|
77
78
|
warn op.to_s
|
78
|
-
warn '
|
79
|
+
warn '** `name` argument is not specified'
|
79
80
|
exit 1
|
80
81
|
end
|
81
82
|
|
82
83
|
[opts, args[0], type]
|
83
84
|
end
|
85
|
+
# rubocop: enable Metrics/AbcSize
|
84
86
|
# rubocop: enable Metrics/MethodLength
|
85
87
|
|
86
88
|
def s2typeclass(s)
|
@@ -90,21 +92,37 @@ module Nslookupot
|
|
90
92
|
rr
|
91
93
|
end
|
92
94
|
|
95
|
+
# rubocop: disable Metrics/AbcSize
|
93
96
|
def run
|
94
97
|
opts, name, type = parse_options
|
95
98
|
|
96
|
-
resolver =
|
97
|
-
puts '
|
98
|
-
puts '
|
99
|
-
|
99
|
+
resolver = Resolver.new(**opts)
|
100
|
+
puts 'Server:'.ljust(16) + opts[:server]
|
101
|
+
puts 'Address:'.ljust(16) + "#{opts[:server]}\##{opts[:port]}"
|
102
|
+
puts
|
103
|
+
|
104
|
+
result = nil
|
105
|
+
begin
|
106
|
+
result = resolver.resolve_resources(name, type)
|
107
|
+
rescue Error::DNNotFound
|
108
|
+
t = type.name.split('::').last
|
109
|
+
warn "** Not Found: (domain, type) = (#{name}, #{t})"
|
110
|
+
exit 1
|
111
|
+
rescue Error::DoTServerUnavailable => e
|
112
|
+
warn "** DoT Server Unavailable: #{e.message}"
|
113
|
+
exit 1
|
114
|
+
end
|
115
|
+
|
116
|
+
result.each do |rr|
|
100
117
|
puts 'Name:'.ljust(16) + name
|
101
118
|
rr.instance_variables.each do |var|
|
102
|
-
k =
|
119
|
+
k = "#{var[1..].capitalize}:".ljust(16)
|
103
120
|
v = rr.instance_variable_get(var).to_s
|
104
121
|
puts k + v
|
105
122
|
end
|
106
|
-
puts
|
123
|
+
puts
|
107
124
|
end
|
108
125
|
end
|
126
|
+
# rubocop: enable Metrics/AbcSize
|
109
127
|
end
|
110
128
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nslookupot
|
4
|
+
module Error
|
5
|
+
# Generic error, common for all classes under Nslookupot::Error module.
|
6
|
+
class Error < StandardError; end
|
7
|
+
|
8
|
+
class DNNotFound < Error; end
|
9
|
+
|
10
|
+
class DoTServerUnavailable < Error; end
|
11
|
+
end
|
12
|
+
end
|
data/lib/nslookupot/resolver.rb
CHANGED
@@ -35,14 +35,26 @@ module Nslookupot
|
|
35
35
|
# @param name [String]
|
36
36
|
# @param typeclass [Resolv::DNS::Resource::IN constant]
|
37
37
|
#
|
38
|
+
# @raise [Nslookupot::Error]
|
39
|
+
#
|
38
40
|
# @return [Array of Resolv::DNS::Resource]
|
39
41
|
def resolve_resources(name, typeclass)
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
42
|
+
begin
|
43
|
+
sock = gen_sock
|
44
|
+
send_msg(sock, name, typeclass)
|
45
|
+
msg = recv_msg(sock)
|
46
|
+
sock.close
|
47
|
+
rescue SocketError, Errno::ECONNREFUSED
|
48
|
+
err_msg = "#{@server}\##{@port} connection refused"
|
49
|
+
raise Error::DoTServerUnavailable.new, err_msg
|
50
|
+
rescue OpenSSL::SSL::SSLError => e
|
51
|
+
raise Error::DoTServerUnavailable.new, e.message
|
52
|
+
end
|
53
|
+
|
54
|
+
result = msg.answer.map(&:last)
|
55
|
+
raise Error::DNNotFound if result.empty?
|
44
56
|
|
45
|
-
|
57
|
+
result
|
46
58
|
end
|
47
59
|
|
48
60
|
private
|
data/lib/nslookupot/version.rb
CHANGED
data/lib/nslookupot.rb
CHANGED
data/nslookupot.gemspec
CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.description = spec.summary
|
14
14
|
spec.homepage = 'https://github.com/thekuwayama/nslookupot'
|
15
15
|
spec.license = 'MIT'
|
16
|
-
spec.required_ruby_version = '>=2.
|
16
|
+
spec.required_ruby_version = '>=2.7.0'
|
17
17
|
|
18
18
|
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nslookupot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- thekuwayama
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- exe/nslookupot
|
85
85
|
- lib/nslookupot.rb
|
86
86
|
- lib/nslookupot/cli.rb
|
87
|
+
- lib/nslookupot/error.rb
|
87
88
|
- lib/nslookupot/resolver.rb
|
88
89
|
- lib/nslookupot/version.rb
|
89
90
|
- nslookupot.gemspec
|
@@ -102,7 +103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
102
103
|
requirements:
|
103
104
|
- - ">="
|
104
105
|
- !ruby/object:Gem::Version
|
105
|
-
version: 2.
|
106
|
+
version: 2.7.0
|
106
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
108
|
requirements:
|
108
109
|
- - ">="
|