iaxrecord.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
       ---
       iaxrecord.rb (1969B)
       ---
            1 #!/usr/bin/env ruby
            2 
            3 $:.unshift(::File.join(::File.dirname(__FILE__), "..", "lib"))
            4 
            5 
            6 def stop
            7   exit(0)
            8 end
            9 
           10 trap("SIGINT")  { stop() }
           11 trap("SIGTERM") { stop() }
           12 
           13 require 'rubygems'
           14 require "warvox/proto/iax2"
           15 require "optparse"
           16 
           17 parser = OptionParser.new
           18 opts   = {
           19   recording_time: 52
           20 }
           21 
           22 parser.banner = "Usage: #{$0} [options]"
           23 parser.on("-s server") do |v|
           24   opts[:server_host] = v
           25 end
           26 
           27 parser.on("-u user") do |v|
           28   opts[:username] = v
           29 end
           30 
           31 parser.on("-p pass") do |v|
           32   opts[:password] = v
           33 end
           34 
           35 parser.on("-o output") do |v|
           36   opts[:output] = v
           37 end
           38 
           39 parser.on("-n number") do |v|
           40   opts[:called_number] = v
           41 end
           42 
           43 parser.on("-c cid") do |v|
           44   opts[:caller_number] = v
           45 end
           46 
           47 parser.on("-l seconds") do |v|
           48   opts[:recording_time] = v.to_i
           49 end
           50 
           51 parser.on("-d") do |v|
           52   opts[:debugging] = true
           53 end
           54 
           55 parser.on("-k keys") do |v|
           56   opts[:sendkeys] = v
           57 end
           58 
           59 parser.on("-h") do
           60   $stderr.puts parser
           61   exit(1)
           62 end
           63 
           64 parser.parse!(ARGV)
           65 
           66 if not (opts[:server_host] and opts[:username] and opts[:password] and opts[:called_number] and opts[:output])
           67   $stderr.puts parser
           68   exit(1)
           69 end
           70 
           71 
           72 cli = WarVOX::Proto::IAX2::Client.new(opts)
           73 
           74 reg = cli.create_call
           75 r   = reg.register
           76 if not r
           77   $stderr.puts "ERROR: Unable to register with the IAX server"
           78   exit(0)
           79 end
           80 
           81 c = cli.create_call
           82 r = c.dial( opts[:called_number] )
           83 if not r
           84   $stderr.puts "ERROR: Unable to dial the requested number"
           85   exit(0)
           86 end
           87 
           88 begin
           89 
           90 ::Timeout.timeout( opts[:recording_time] ) do
           91   while (c.state != :hangup)
           92     case c.state
           93     when :ringing
           94     when :answered
           95     when :hangup
           96       break
           97     end
           98     select(nil,nil,nil, 0.25)
           99   end
          100 end
          101 rescue ::Timeout::Error
          102 ensure
          103   c.hangup rescue nil
          104 end
          105 
          106 cli.shutdown
          107 
          108 cnt = 0
          109 fd = ::File.open( opts[:output], "wb")
          110 c.each_audio_frame do |frame|
          111   fd.write(frame)
          112   cnt += frame.length
          113 end
          114 fd.close
          115 
          116 $stdout.puts "COMPLETED: BYTES=#{cnt} RINGTIME=#{c.ring_time} FILE=#{ ::File.expand_path( opts[:output] ) } BUSY=#{c.busy ? 1 : 0} FAIL=#{cnt == 0 ? 1 : 0}"