class Reverse

Constants

ADDR_REG_EXP
VERSION

Public Class Methods

new() click to toggle source
# File lib/reverse.rb, line 10
def initialize
  @resolv = Resolv::DNS.new(nameserver: ["8.8.8.8", "8.8.4.4"], ndots: 1)
  @list = {}
  @options = {color: true}
  Signal.trap(:INT){ exit(0) }
end

Public Instance Methods

exec(argv) click to toggle source
# File lib/reverse.rb, line 17
def exec(argv)
  opt = OptionParser.new
  opt.on('-V', '--verion',   'Show version number and quit') {|v| @options[:verion] = v }
  opt.on('-v', '--verbose',  'Verbose Mode (IP Address with reverse DNS)') {|v| @options[:verbose] = v }
  opt.on('--no-color',  'No Color Mode') {|v| @options[:color] = v }
  opt.parse!(argv)

  if @options[:verion]
    name = File.basename($PROGRAM_NAME)
    puts "#{name} #{VERSION}"
    exit
  end

  while line = gets
    output =
      if line =~ ADDR_REG_EXP
        replace_addr(line)
      else
        line
      end
    print output
  end
end

Private Instance Methods

get_name(addr) click to toggle source
# File lib/reverse.rb, line 70
def get_name(addr)
  begin
    @resolv.getname(addr).to_s
  rescue Resolv::ResolvError => e
    addr
  end
end
replace_addr(line) click to toggle source
# File lib/reverse.rb, line 43
def replace_addr(line)
  color = Term::ANSIColor
  line.gsub(ADDR_REG_EXP) do |addr|
    name = nil
    if @list[addr]
      name = @list[addr]
    else
      name = get_name(addr)
      @list[addr] = name
    end
    if @options[:verbose]
      if name == addr
        str = "unknown[#{addr}]"
      else
        str = "#{name}[#{addr}]"
      end
    else
      str = name
    end
    if @options[:color]
      color.green + str + color.clear
    else
      str
    end
  end
end