Module: ManyThreads

Defined in:
lib/bscan/modules/many_threads.rb

Instance Method Summary collapse

Instance Method Details

#run(*args) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/bscan/modules/many_threads.rb', line 5

def run *args
  @config ||= @bscan_config
  
  @activity[0]=true

  @prop_pref = 'bscan.many_threads.'
  @prop_pref += args[2] + '.' if args[2] && args[2].length > 0
  @mid = args[2]?"ManyThreads.#{args[2]}.":'ManyThreads.' 
  
  param = @config[prop('request')]
  a=[]
  if (not param or (a=param.split(':',3)).size < 2)
      Log 0, "#{@mid}run: 'request' parameter is not valid #{param}, it should be 'request.txt:protocol[:repeater]'"
      return
  end
  threads = @config[prop('threads')]
  threads ||= '10'
  Log 2, "#{@mid}run input: #{a.join('|')} #{threads}"

  threads = threads.to_i

  begin
    f,proto,rep = a
    
    file = open_in_path(f)
    req = file.read
    req.gsub!(/\^M\n/,"\r\n")
    if (rep)
      rep = Regexp.escape(rep)
      req.gsub!(/#{rep}(.+?)#{rep}(\d+)/) {|m| $1*$2.to_i}
    end
    
    set_len req
    
    file.close
    threads.times do
      Thread.new() {
      @activity[0]=true
       send_req req, proto, '' 
      }
    end
  rescue Exception => e
      Log 0, "#{@mid}run Exception: #{e.message}"
      Log 0, e.backtrace.join("\n")
  end
end