Class: Capra::Engine

Inherits:
Object
  • Object
show all
Defined in:
lib/capra/engine.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file: nil, &block) ⇒ Engine

Returns a new instance of Engine.



6
7
8
9
10
11
12
13
14
15
# File 'lib/capra/engine.rb', line 6

def initialize(file: nil, &block)
  default_interface
  @rules = {}
  if file
    instance_eval File.read(file)
  else
    instance_eval &block
  end
  start!
end

Instance Attribute Details

#interface(iface) ⇒ Object

Returns the value of attribute interface.



3
4
5
# File 'lib/capra/engine.rb', line 3

def interface
  @interface
end

#rulesObject

Returns the value of attribute rules.



4
5
6
# File 'lib/capra/engine.rb', line 4

def rules
  @rules
end

Instance Method Details

#alert(mesg) ⇒ Object



45
46
47
# File 'lib/capra/engine.rb', line 45

def alert(mesg)
  puts mesg
end

#debug!Object



33
34
35
# File 'lib/capra/engine.rb', line 33

def debug!
  binding.pry
end

#default_interfaceObject



21
22
23
# File 'lib/capra/engine.rb', line 21

def default_interface
  @interface = Interfacez.default
end

#email(recpt) ⇒ Object



49
50
51
# File 'lib/capra/engine.rb', line 49

def email(recpt)
  puts "Sending email!"
end

#pcap(file) ⇒ Object



25
26
27
# File 'lib/capra/engine.rb', line 25

def pcap(file)
  @pcap = file
end

#rule(type, description: nil, reference: nil, &block) ⇒ Object



37
38
39
40
41
42
43
# File 'lib/capra/engine.rb', line 37

def rule(type, description: nil, reference: nil, &block)
  if @rules[type]
    @rules[type] << block
  else
    @rules[type] = [block]
  end
end

#save(packet) ⇒ Object



53
54
55
56
57
58
59
# File 'lib/capra/engine.rb', line 53

def save(packet)
  @save_to = "capra-save-"+Time.now.utc.to_s.split(" ").join("-")+".pcapng" if @save_to.nil?

  pf = PacketGen::PcapNG::File.new
  pf.array_to_file [packet]
  pf.to_f(@save_to, append: true)
end

#save_to(file) ⇒ Object



29
30
31
# File 'lib/capra/engine.rb', line 29

def save_to(file)
  @save_to = file
end

#start!Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/capra/engine.rb', line 61

def start!
  if @pcap
    read_pcap_file(@pcap) do |packet|
      @rules.each do |header, blocks|
        if header == 'ANY' || packet.is?(header)
          blocks.each do |block|
            block.call(packet)
          end
        end
      end
    end
  else
    PacketGen.capture(iface: @interface) do |packet|
      @rules.each do |header, blocks|
        if header == 'ANY' || packet.is?(header)
          blocks.each do |block|
            block.call(packet)
          end
        end
      end
    end
  end
end