Class: BetterCap::Spoofers::Hsrp

Inherits:
Base
  • Object
show all
Defined in:
lib/bettercap/spoofers/hsrp.rb

Overview

Instance Method Summary collapse

Methods inherited from Base

available, get_by_name, inherited

Constructor Details

#initialize ⇒ Hsrp

Initialize the BetterCap::Spoofers::HSRP object.



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/bettercap/spoofers/hsrp.rb', line 72

def initialize
  @ctx          = Context.get
  @forwarding   = @ctx.firewall.forwarding_enabled?
  @spoof_thread = nil
  @hsrp_thread  = nil
  @arp_thread   = nil
  @running      = false

  # HelloTime - Time (in seconds) between Hello messages
  @hellotime = 3 # default

  # HoldTime - Time (in seconds) for which the Hello message is valid
  @holdtime = 255 # max

  # Table of HSRP groups
  @groups = []

  update_gateway!
end

Instance Method Details

#start ⇒ Object

Start the HSRP spoofing



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/bettercap/spoofers/hsrp.rb', line 93

def start
  Logger.debug "Starting HSRP spoofer ..."

  stop() if @running
  @running = true

  if @ctx.options.spoof.kill
    Logger.warn 'Disabling packet forwarding.'
    @ctx.firewall.enable_forwarding(false) if @forwarding
  else
    @ctx.firewall.enable_forwarding(true) unless @forwarding
  end

  @hsrp_thread = Thread.new { hsrp_watcher }
  @arp_thread = Thread.new { arp_watcher }
  @spoof_thread = Thread.new { hsrp_spoofer }
end

#stop ⇒ Object

Stop the HSRP spoofing and reset firewall state



112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/bettercap/spoofers/hsrp.rb', line 112

def stop
  raise 'HSRP spoofer is not running' unless @running

  Logger.debug 'Stopping HSRP spoofer ...'

  @running = false
  begin
    @spoof_thread.exit
  rescue
  end

  # Send a few resign packets
  @groups.each do |vip, group, password|
    3.times do
      send_resign vip, group, password
    end
  end

  Logger.debug "Resetting packet forwarding to #{@forwarding} ..."

  @ctx.firewall.enable_forwarding( @forwarding )
end