URI: 
       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