Carrier detectino - warvox - VoIP based wardialing tool, forked from rapid7/warvox.
DIR Log
DIR Files
DIR Refs
DIR README
---
DIR commit dbcda197e69a49e32e286c87c4b9516d9718da20
DIR parent 60be9accc104b2d63ff2ab74bf586b4ce054a524
HTML Author: HD Moore <hd_moore@rapid7.com>
Date: Fri, 13 Feb 2009 07:02:57 +0000
Carrier detectino
Diffstat:
A bin/search_carriers.rb | 29 +++++++++++++++++++++++++++++
M lib/warvox/db.rb | 39 +++++++++++++++++++++++++++++++
2 files changed, 68 insertions(+), 0 deletions(-)
---
DIR diff --git a/bin/search_carriers.rb b/bin/search_carriers.rb
@@ -0,0 +1,29 @@
+#!/usr/bin/env ruby
+###################
+
+#
+# Load the library path
+#
+base = __FILE__
+while File.symlink?(base)
+ base = File.expand_path(File.readlink(base), File.dirname(base))
+end
+$:.unshift(File.join(File.expand_path(File.dirname(base)), '..', 'lib'))
+require 'warvox'
+
+#
+# Script
+#
+
+def usage
+ $stderr.puts "#{$0} [warvox.db] <db-threshold>"
+ exit
+end
+
+inp = ARGV.shift || usage
+thresh = (ARGV.shift() || 800).to_i
+wdb = WarVOX::DB.new(inp, thresh)
+res = wdb.find_carriers
+res.keys.sort.each do |k|
+ puts "#{k}\t" + res[k].map{|x| sprintf("%d@%d",x[1],x[2]) }.join(", ")
+end
DIR diff --git a/lib/warvox/db.rb b/lib/warvox/db.rb
@@ -20,6 +20,11 @@ class DB
next if line.empty?
bits = line.split(/\s+/)
name = bits.shift
+
+ # Remove leading silence
+ bits.shift if bits[0][0,1] == "L"
+
+ next if bits.empty?
self.nums[name] = []
bits.each do |d|
@@ -43,6 +48,7 @@ class DB
# Utility methods
#
+ # Find the largest pattern shared between two samples
def find_sig(num1, num2, opts={})
fuzz = opts[:fuzz] || 100
@@ -53,6 +59,10 @@ class DB
if ( not (info1 and info2 and not (info1.empty? or info2.empty?) ) )
raise Error, "The database must contain both numbers"
end
+
+ # Remove the silence prefix from both samples
+ info1.shift if info1[0][0] == "L"
+ info2.shift if info2[0][0] == "L"
min_sig = 2
idx = 0
@@ -108,6 +118,35 @@ class DB
:sig => sig
}
end
+
+ def is_carrier?(num)
+ data = self[num]
+ raise Error, "The specified number does not exist: #{num}" if not data
+ tone = []
+
+ min_len = 10000
+
+ data.each do |rec|
+ next if rec[0] != "H"
+ next if rec[1] < min_len
+ tone << rec
+ end
+
+ (tone.empty? or tone.length == 1) ? false : tone
+ end
+
+ def find_carriers
+ carriers = {}
+ self.nums.keys.sort.each do |num|
+ begin
+ res = is_carrier?(num)
+ next if not res
+ carriers[num] = res
+ rescue Error
+ end
+ end
+ carriers
+ end
end
end