nslookupot 0.0.9 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
- - ">="
|