identify_matches.rb - warvox - VoIP based wardialing tool, forked from rapid7/warvox.
 (HTM) git clone git://jay.scot/warvox
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
       identify_matches.rb (1824B)
       ---
            1 #!/usr/bin/env ruby
            2 ###################
            3 
            4 #
            5 # Load the library path
            6 #
            7 base = __FILE__
            8 while File.symlink?(base)
            9   base = File.expand_path(File.readlink(base), File.dirname(base))
           10 end
           11 $:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib'))
           12 
           13 require 'warvox'
           14 
           15 ENV['RAILS_ENV'] ||= 'production'
           16 
           17 $:.unshift(File.join(File.expand_path(File.dirname(base)), '..'))
           18 require 'config/boot'
           19 require 'config/environment'
           20 
           21 def usage
           22   $stderr.puts "Usage: #{$0} [job|all] <fprint>"
           23   exit
           24 end
           25 
           26 #
           27 # Script
           28 #
           29 
           30 job = ARGV.shift
           31 fp  = ARGV.shift
           32 
           33 if(job and job == "-h")
           34   usage()
           35 end
           36 
           37 if(not job)
           38   $stderr.puts "Listing all available jobs"
           39   $stderr.puts "=========================="
           40   DialJob.find(:all).each do |j|
           41     puts "#{j.id}\t#{j.started_at} --> #{j.completed_at}"
           42   end
           43   exit
           44 end
           45 
           46 fp  = $stdin.read.strip if fp == "-"
           47 job = nil if job.downcase == "all"
           48 
           49 if not fp
           50   usage()
           51 end
           52 
           53 
           54 begin
           55   res = nil
           56   job = DialJob.find(job.to_i) if job
           57   if job
           58     res = DialResult.find_by_sql "SELECT dial_results.*,  " +
           59       " (( icount('#{fp}'::int[] & dial_results.fprint::int[]) / icount('#{fp}'::int[])::float ) * 100.0 ) AS matchscore " +
           60       "FROM dial_results " +
           61       "WHERE " +
           62       " icount(dial_results.fprint) > 0 AND " +
           63       " dial_results.dial_job_id = '#{job.id}' " +
           64       "ORDER BY matchscore DESC"
           65   else
           66     res = DialResult.find_by_sql "SELECT dial_results.*,  " +
           67       " (( icount('#{fp}'::int[] & dial_results.fprint::int[]) / icount('#{fp}'::int[])::float ) * 100.0 ) AS matchscore " +
           68       "FROM dial_results " +
           69       "WHERE " +
           70       " icount(dial_results.fprint) > 0 " +
           71       "ORDER BY matchscore DESC"
           72   end
           73   res.each do |r|
           74     $stdout.puts "#{"%.2f" % r.matchscore}\t#{r.dial_job_id}\t#{r.number}"
           75   end
           76 rescue ActiveRecord::RecordNotFound
           77   $stderr.puts "Job not found"
           78   exit
           79 end