ndp.spoof: add ndp.ban

This commit is contained in:
Trevor Bergeron 2023-03-15 10:14:04 -04:00
commit cdd483e698
No known key found for this signature in database
GPG key ID: 6DA880FE359869BE

View file

@ -17,6 +17,7 @@ type NDPSpoofer struct {
prefix string prefix string
prefixLength int prefixLength int
addresses []net.IP addresses []net.IP
ban bool
waitGroup *sync.WaitGroup waitGroup *sync.WaitGroup
} }
@ -24,6 +25,7 @@ func NewNDPSpoofer(s *session.Session) *NDPSpoofer {
mod := &NDPSpoofer{ mod := &NDPSpoofer{
SessionModule: session.NewSessionModule("ndp.spoof", s), SessionModule: session.NewSessionModule("ndp.spoof", s),
addresses: make([]net.IP, 0), addresses: make([]net.IP, 0),
ban: false,
waitGroup: &sync.WaitGroup{}, waitGroup: &sync.WaitGroup{},
} }
@ -49,12 +51,25 @@ func NewNDPSpoofer(s *session.Session) *NDPSpoofer {
return mod.Start() return mod.Start()
})) }))
mod.AddHandler(session.NewModuleHandler("ndp.ban on", "",
"Start NDP spoofer in ban mode, meaning the target(s) connectivity will not work.",
func(args []string) error {
mod.ban = true
return mod.Start()
}))
mod.AddHandler(session.NewModuleHandler("ndp.spoof off", "", mod.AddHandler(session.NewModuleHandler("ndp.spoof off", "",
"Stop NDP spoofer.", "Stop NDP spoofer.",
func(args []string) error { func(args []string) error {
return mod.Stop() return mod.Stop()
})) }))
mod.AddHandler(session.NewModuleHandler("ndp.ban off", "",
"Stop NDP spoofer.",
func(args []string) error {
return mod.Stop()
}))
return mod return mod
} }
@ -107,8 +122,13 @@ func (mod *NDPSpoofer) Configure() error {
} }
if !mod.Session.Firewall.IsForwardingEnabled() { if !mod.Session.Firewall.IsForwardingEnabled() {
mod.Info("enabling forwarding") if mod.ban {
mod.Session.Firewall.EnableForwarding(true) mod.Warning("running in ban mode, forwarding not enabled!")
mod.Session.Firewall.EnableForwarding(false)
} else {
mod.Info("enabling forwarding")
mod.Session.Firewall.EnableForwarding(true)
}
} }
return nil return nil
@ -166,6 +186,7 @@ func (mod *NDPSpoofer) Start() error {
func (mod *NDPSpoofer) Stop() error { func (mod *NDPSpoofer) Stop() error {
return mod.SetRunning(false, func() { return mod.SetRunning(false, func() {
mod.Info("waiting for NDP spoofer to stop ...") mod.Info("waiting for NDP spoofer to stop ...")
mod.ban = false
mod.waitGroup.Wait() mod.waitGroup.Wait()
}) })
} }