phone.rb - warvox - VoIP based wardialing tool, forked from rapid7/warvox.
HTML git clone git://jay.scot/warvox
DIR Log
DIR Files
DIR Refs
DIR README
---
phone.rb (1357B)
---
1 module WarVOX
2 class Phone
3
4 # Convert 123456XXXX to an array of expanded numbers
5 def self.crack_mask(mask)
6 masks = mask.split(/[\s,]+/) || [ ]
7 masks.delete(nil)
8 self.crack_masks(masks)
9 end
10
11 def self.crack_masks(masks)
12 res = {}
13 masks.each do |mask|
14 mask = mask.strip
15
16 if(mask.index(':'))
17 next if mask.index('X')
18
19 # Quick hack to fix leading 0s
20 prefix = ""
21 if mask =~ /^(0+)/
22 prefix = $1
23 end
24
25 rbeg,rend = mask.split(':').map{|c| c.gsub(/[^\d]/, '').to_i }
26 rbeg.upto(rend) do |n|
27 res[prefix + n.to_s] = {}
28 end
29 next
30 end
31
32 incdigits = 0
33 mask.each_char do |c|
34 incdigits += 1 if c =~ /^[X#]$/i
35 end
36
37 max = (10**incdigits)-1
38
39 (0..max).each do |num|
40 number = mask.dup # copy the mask
41 numstr = sprintf("%0#{incdigits}d", num) # stringify our incrementing number
42 j = 0 # index for numstr
43 for i in 0..number.length-1 do # step through the number (mask)
44 if number[i].chr =~ /^[X#]$/i
45 number[i] = numstr[j] # replaced masked indexes with digits from incrementing number
46 j += 1
47 end
48 end
49 res[number] = {}
50 end
51
52 end
53
54 return res.keys.sort
55 end
56
57 end
58 end