class Anamo::Ports::Thor

Public Instance Methods

exec() click to toggle source
# File lib/anamo/ports/thor.rb, line 17
def exec

  data = inspect false
  ::Anamo::Api.new.post_ports MultiJson.dump data

end
inspect(output = true) click to toggle source
# File lib/anamo/ports/thor.rb, line 28
def inspect output = true

  netstat_results = nil
  nmap_results = nil

  status, stdout, stderr = systemu "netstat -lnutp"
  if status.success?
    netstat_results = []
    stdout.split("\n").drop(2).each do |line|
      cols = line.gsub(/\s+/m, ' ').strip.split(" ")
      cols.delete_at(5) if cols.length == 7
      process = cols[5].match(/^([^\/]*)\/(.*)$/)
      netstat_results << {
        'proto' => cols[0],
        'l_addr' => cols[3].split(':')[0],
        'l_port' => cols[3].split(':')[1],
        'f_addr' => cols[4].split(':')[0],
        'f_port' => cols[4].split(':')[1],
        'p_id' => process[1],
        'p_name' => process[2]
      }
    end
  end

  l_addr = "127.0.0.1"

  # tcp scan
  status, stdout, stderr = systemu "nmap -sS --open -p1-65535 #{l_addr}"
  if status.success?
    nmap_results = [] unless nmap_results
    stdout.split("\n").each do |line|
      cols = line.gsub(/\s+/m, ' ').strip.split(" ")
      next unless cols.length > 0
      port_col = cols[0].match(/([^\/]*)\/tcp/)
      next unless port_col
      nmap_results << {
        'proto' => 'tcp',
        'l_addr' => l_addr,
        'l_port' => port_col[1]
      }
    end
  end

  status, stdout, stderr = systemu "nmap -sU --open -p1-65535 #{l_addr}"
  if status.success?
    nmap_results = [] unless nmap_results
    stdout.split("\n").each do |line|
      cols = line.gsub(/\s+/m, ' ').strip.split(" ")
      next unless cols.length > 0
      port_col = cols[0].match(/([^\/]*)\/udp/)
      next unless port_col
      nmap_results << {
        'proto' => 'udp',
        'l_addr' => l_addr,
        'l_port' => port_col[1]
      }
    end
  end

  data = {}

  data['nmap'] = nmap_results if nmap_results
  data['netstat'] = netstat_results if netstat_results

  puts data if output

  data

end