class Nslookupot::CLI
Public Instance Methods
parse_options(argv = ARGV)
click to toggle source
rubocop: disable Metrics/MethodLength
# File lib/nslookupot/cli.rb, line 8 def parse_options(argv = ARGV) op = OptionParser.new # default value opts = { server: '1.1.1.1', port: 853, hostname: 'cloudflare-dns.com', check_sni: true } type = 'A' op.on( '-s', '--server VALUE', "the name server IP address (default #{opts[:server]})" ) do |v| opts[:server] = v end op.on( '-p', '--port VALUE', "the name server port number (default #{opts[:port]})" ) do |v| opts[:port] = v end op.on( '-h', '--hostname VALUE', "the name server hostname (default #{opts[:hostname]})" ) do |v| opts[:hostname] = v end op.on( '-n', '--no-check-sni', "no check SNI (default #{!opts[:check_sni]})" ) do opts[:check_sni] = false end op.on( '-t', '--type VALUE', "the type of the information query (default #{type})" ) do |v| type = v end op.banner += ' name' begin args = op.parse(argv) rescue OptionParser::InvalidOption => e warn op.to_s warn "error: #{e.message}" exit 1 end begin type = s2typeclass(type) rescue NameError warn "error: unknown query type #{type}" exit 1 end if args.size != 1 warn op.to_s warn 'error: number of arguments is not 1' exit 1 end [opts, args[0], type] end
run()
click to toggle source
# File lib/nslookupot/cli.rb, line 93 def run opts, name, type = parse_options resolver = Nslookupot::Resolver.new(**opts) puts 'Address:'.ljust(16) + opts[:server] + '#' + opts[:port].to_s puts '--' resolver.resolve_resources(name, type).each do |rr| puts 'Name:'.ljust(16) + name rr.instance_variables.each do |var| k = (var[1..].capitalize + ':').ljust(16) v = rr.instance_variable_get(var).to_s puts k + v end puts '' end end
s2typeclass(s)
click to toggle source
rubocop: enable Metrics/MethodLength
# File lib/nslookupot/cli.rb, line 86 def s2typeclass(s) rr = Resolv::DNS::Resource::IN.const_get(s.upcase) raise NameError unless rr < Resolv::DNS::Resource rr end