mirror of
https://github.com/bettercap/bettercap
synced 2025-07-16 10:03:39 -07:00
refact: refactored module SetRunning method (fixes #49)
This commit is contained in:
parent
76d6977967
commit
9c6eb70eb3
15 changed files with 103 additions and 174 deletions
|
@ -161,24 +161,21 @@ func (api *RestAPI) Start() error {
|
|||
return err
|
||||
}
|
||||
|
||||
api.SetRunning(true)
|
||||
go func() {
|
||||
api.SetRunning(true, func() {
|
||||
log.Info("API server starting on https://%s", api.server.Addr)
|
||||
err := api.server.ListenAndServeTLS(api.certFile, api.keyFile)
|
||||
if err != nil && err != http.ErrServerClosed {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (api *RestAPI) Stop() error {
|
||||
if api.Running() == false {
|
||||
return session.ErrAlreadyStopped
|
||||
}
|
||||
api.SetRunning(false)
|
||||
return api.SetRunning(false, func() {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
|
||||
defer cancel()
|
||||
return api.server.Shutdown(ctx)
|
||||
api.server.Shutdown(ctx)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -173,14 +173,11 @@ func (p *ArpSpoofer) Configure() error {
|
|||
}
|
||||
|
||||
func (p *ArpSpoofer) Start() error {
|
||||
if p.Running() == true {
|
||||
return session.ErrAlreadyStarted
|
||||
} else if err := p.Configure(); err != nil {
|
||||
if err := p.Configure(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
p.SetRunning(true)
|
||||
go func() {
|
||||
return p.SetRunning(true, func() {
|
||||
from := p.Session.Gateway.IP
|
||||
from_hw := p.Session.Interface.HW
|
||||
|
||||
|
@ -192,24 +189,14 @@ func (p *ArpSpoofer) Start() error {
|
|||
}
|
||||
|
||||
p.done <- true
|
||||
}()
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func (p *ArpSpoofer) Stop() error {
|
||||
if p.Running() == false {
|
||||
return session.ErrAlreadyStopped
|
||||
}
|
||||
|
||||
return p.SetRunning(false, func() {
|
||||
log.Info("Waiting for ARP spoofer to stop ...")
|
||||
|
||||
p.SetRunning(false)
|
||||
|
||||
<-p.done
|
||||
|
||||
p.unSpoof()
|
||||
p.ban = false
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
|
|
@ -369,9 +369,7 @@ func (s *DHCP6Spoofer) Start() error {
|
|||
return err
|
||||
}
|
||||
|
||||
s.SetRunning(true)
|
||||
|
||||
go func() {
|
||||
return s.SetRunning(true, func() {
|
||||
defer s.Handle.Close()
|
||||
|
||||
src := gopacket.NewPacketSource(s.Handle, s.Handle.LinkType())
|
||||
|
@ -382,16 +380,11 @@ func (s *DHCP6Spoofer) Start() error {
|
|||
|
||||
s.onPacket(packet)
|
||||
}
|
||||
}()
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func (s *DHCP6Spoofer) Stop() error {
|
||||
if s.Running() == false {
|
||||
return session.ErrAlreadyStopped
|
||||
}
|
||||
s.SetRunning(false)
|
||||
return s.SetRunning(false, func() {
|
||||
s.Handle.Close()
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
|
|
@ -266,9 +266,7 @@ func (s *DNSSpoofer) Start() error {
|
|||
return err
|
||||
}
|
||||
|
||||
s.SetRunning(true)
|
||||
|
||||
go func() {
|
||||
return s.SetRunning(true, func() {
|
||||
defer s.Handle.Close()
|
||||
|
||||
src := gopacket.NewPacketSource(s.Handle, s.Handle.LinkType())
|
||||
|
@ -279,16 +277,11 @@ func (s *DNSSpoofer) Start() error {
|
|||
|
||||
s.onPacket(packet)
|
||||
}
|
||||
}()
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func (s *DNSSpoofer) Stop() error {
|
||||
if s.Running() == false {
|
||||
return session.ErrAlreadyStopped
|
||||
}
|
||||
s.SetRunning(false)
|
||||
return s.SetRunning(false, func() {
|
||||
s.Handle.Close()
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
|
|
@ -79,15 +79,11 @@ func (s *EventsStream) Configure() error {
|
|||
}
|
||||
|
||||
func (s *EventsStream) Start() error {
|
||||
if s.Running() == true {
|
||||
return session.ErrAlreadyStarted
|
||||
} else if err := s.Configure(); err != nil {
|
||||
if err := s.Configure(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
s.SetRunning(true)
|
||||
|
||||
go func() {
|
||||
return s.SetRunning(true, func() {
|
||||
for {
|
||||
var e session.Event
|
||||
select {
|
||||
|
@ -99,9 +95,7 @@ func (s *EventsStream) Start() error {
|
|||
return
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func (s *EventsStream) Show(limit int) error {
|
||||
|
@ -123,10 +117,7 @@ func (s *EventsStream) Show(limit int) error {
|
|||
}
|
||||
|
||||
func (s *EventsStream) Stop() error {
|
||||
if s.Running() == false {
|
||||
return session.ErrAlreadyStopped
|
||||
}
|
||||
s.SetRunning(false)
|
||||
return s.SetRunning(false, func() {
|
||||
s.quit <- true
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
|
|
@ -93,17 +93,13 @@ func (p *HttpProxy) Start() error {
|
|||
return err
|
||||
}
|
||||
|
||||
p.SetRunning(true)
|
||||
return p.SetRunning(true, func() {
|
||||
p.proxy.Start()
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func (p *HttpProxy) Stop() error {
|
||||
if p.Running() == false {
|
||||
return session.ErrAlreadyStopped
|
||||
}
|
||||
p.SetRunning(false)
|
||||
|
||||
return p.proxy.Stop()
|
||||
return p.SetRunning(false, func() {
|
||||
p.proxy.Stop()
|
||||
})
|
||||
}
|
||||
|
|
|
@ -103,24 +103,19 @@ func (httpd *HttpServer) Start() error {
|
|||
return err
|
||||
}
|
||||
|
||||
httpd.SetRunning(true)
|
||||
go func() {
|
||||
return httpd.SetRunning(true, func() {
|
||||
log.Info("httpd server starting on http://%s", httpd.server.Addr)
|
||||
err := httpd.server.ListenAndServe()
|
||||
if err != nil && err != http.ErrServerClosed {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func (httpd *HttpServer) Stop() error {
|
||||
if httpd.Running() == false {
|
||||
return session.ErrAlreadyStopped
|
||||
}
|
||||
httpd.SetRunning(false)
|
||||
return httpd.SetRunning(false, func() {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
|
||||
defer cancel()
|
||||
return httpd.server.Shutdown(ctx)
|
||||
httpd.server.Shutdown(ctx)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -131,17 +131,13 @@ func (p *HttpsProxy) Start() error {
|
|||
return err
|
||||
}
|
||||
|
||||
p.SetRunning(true)
|
||||
return p.SetRunning(true, func() {
|
||||
p.proxy.Start()
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func (p *HttpsProxy) Stop() error {
|
||||
if p.Running() == false {
|
||||
return session.ErrAlreadyStopped
|
||||
}
|
||||
p.SetRunning(false)
|
||||
|
||||
return p.proxy.Stop()
|
||||
return p.SetRunning(false, func() {
|
||||
p.proxy.Stop()
|
||||
})
|
||||
}
|
||||
|
|
|
@ -103,28 +103,23 @@ func (mc *MacChanger) setMac(mac net.HardwareAddr) error {
|
|||
}
|
||||
|
||||
func (mc *MacChanger) Start() error {
|
||||
if mc.Running() == true {
|
||||
return session.ErrAlreadyStarted
|
||||
} else if err := mc.Configure(); err != nil {
|
||||
if err := mc.Configure(); err != nil {
|
||||
return err
|
||||
} else if err := mc.setMac(mc.fakeMac); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mc.SetRunning(true)
|
||||
return mc.SetRunning(true, func() {
|
||||
log.Info("Interface mac address set to %s", core.Bold(mc.fakeMac.String()))
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func (mc *MacChanger) Stop() error {
|
||||
if mc.Running() == false {
|
||||
return session.ErrAlreadyStopped
|
||||
} else if err := mc.setMac(mc.originalMac); err != nil {
|
||||
if err := mc.setMac(mc.originalMac); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mc.SetRunning(false)
|
||||
return mc.SetRunning(false, func() {
|
||||
log.Info("Interface mac address restored to %s", core.Bold(mc.originalMac.String()))
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
|
|
@ -87,15 +87,11 @@ func (p *Prober) Configure() error {
|
|||
}
|
||||
|
||||
func (p *Prober) Start() error {
|
||||
if p.Running() == true {
|
||||
return session.ErrAlreadyStarted
|
||||
} else if err := p.Configure(); err != nil {
|
||||
if err := p.Configure(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
p.SetRunning(true)
|
||||
|
||||
go func() {
|
||||
return p.SetRunning(true, func() {
|
||||
list, err := iprange.Parse(p.Session.Interface.CIDR())
|
||||
if err != nil {
|
||||
log.Fatal("%s", err)
|
||||
|
@ -121,15 +117,9 @@ func (p *Prober) Start() error {
|
|||
|
||||
time.Sleep(5 * time.Second)
|
||||
}
|
||||
}()
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func (p *Prober) Stop() error {
|
||||
if p.Running() == false {
|
||||
return session.ErrAlreadyStopped
|
||||
}
|
||||
p.SetRunning(false)
|
||||
return nil
|
||||
return p.SetRunning(false, nil)
|
||||
}
|
||||
|
|
|
@ -125,15 +125,11 @@ func (d *Discovery) Configure() error {
|
|||
}
|
||||
|
||||
func (d *Discovery) Start() error {
|
||||
if d.Running() == true {
|
||||
return session.ErrAlreadyStarted
|
||||
} else if err := d.Configure(); err != nil {
|
||||
if err := d.Configure(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
d.SetRunning(true)
|
||||
|
||||
go func() {
|
||||
return d.SetRunning(true, func() {
|
||||
for {
|
||||
select {
|
||||
case <-time.After(time.Duration(d.refresh) * time.Second):
|
||||
|
@ -152,16 +148,11 @@ func (d *Discovery) Start() error {
|
|||
return
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func (d *Discovery) Stop() error {
|
||||
if d.Running() == false {
|
||||
return session.ErrAlreadyStopped
|
||||
}
|
||||
return d.SetRunning(false, func() {
|
||||
d.quit <- true
|
||||
d.SetRunning(false)
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
|
|
@ -143,9 +143,7 @@ func (s *Sniffer) Start() error {
|
|||
return err
|
||||
}
|
||||
|
||||
s.SetRunning(true)
|
||||
|
||||
go func() {
|
||||
return s.SetRunning(true, func() {
|
||||
s.Stats = NewSnifferStats()
|
||||
|
||||
src := gopacket.NewPacketSource(s.Ctx.Handle, s.Ctx.Handle.LinkType())
|
||||
|
@ -180,17 +178,11 @@ func (s *Sniffer) Start() error {
|
|||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func (s *Sniffer) Stop() error {
|
||||
if s.Running() == false {
|
||||
return session.ErrAlreadyStopped
|
||||
}
|
||||
s.SetRunning(false)
|
||||
return s.SetRunning(false, func() {
|
||||
s.Ctx.Close()
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
|
|
@ -80,8 +80,7 @@ func (t *Ticker) Start() error {
|
|||
return err
|
||||
}
|
||||
|
||||
t.SetRunning(true)
|
||||
go func() {
|
||||
return t.SetRunning(true, func() {
|
||||
log.Info("Ticker running with period %.fs.", t.Period.Seconds())
|
||||
tick := time.Tick(t.Period)
|
||||
for _ = range tick {
|
||||
|
@ -95,15 +94,9 @@ func (t *Ticker) Start() error {
|
|||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func (t *Ticker) Stop() error {
|
||||
if t.Running() == false {
|
||||
return session.ErrAlreadyStopped
|
||||
}
|
||||
t.SetRunning(false)
|
||||
return nil
|
||||
return t.SetRunning(false, nil)
|
||||
}
|
||||
|
|
|
@ -101,11 +101,11 @@ func buildPayload(mac string) []byte {
|
|||
}
|
||||
|
||||
func (w *WOL) wolETH(mac string) error {
|
||||
w.SetRunning(true, nil)
|
||||
defer w.SetRunning(false, nil)
|
||||
|
||||
payload := buildPayload(mac)
|
||||
log.Info("Sending %d bytes of ethernet WOL packet to %s", len(payload), core.Bold(mac))
|
||||
w.SetRunning(true)
|
||||
defer w.SetRunning(false)
|
||||
|
||||
eth := layers.Ethernet{
|
||||
SrcMAC: w.Session.Interface.HW,
|
||||
DstMAC: layers.EthernetBroadcast,
|
||||
|
@ -126,10 +126,11 @@ func (w *WOL) wolETH(mac string) error {
|
|||
}
|
||||
|
||||
func (w *WOL) wolUDP(mac string) error {
|
||||
w.SetRunning(true, nil)
|
||||
defer w.SetRunning(false, nil)
|
||||
|
||||
payload := buildPayload(mac)
|
||||
log.Info("Sending %d bytes of UDP WOL packet to %s", len(payload), core.Bold(mac))
|
||||
w.SetRunning(true)
|
||||
defer w.SetRunning(false)
|
||||
|
||||
eth := layers.Ethernet{
|
||||
SrcMAC: w.Session.Interface.HW,
|
||||
|
|
|
@ -122,9 +122,16 @@ func (m *SessionModule) Running() bool {
|
|||
return m.Started
|
||||
}
|
||||
|
||||
func (m *SessionModule) SetRunning(running bool) {
|
||||
func (m *SessionModule) SetRunning(running bool, cb func()) error {
|
||||
m.StatusLock.Lock()
|
||||
defer m.StatusLock.Unlock()
|
||||
|
||||
if running && m.Started == true {
|
||||
return ErrAlreadyStarted
|
||||
} else if running == false && m.Started == false {
|
||||
return ErrAlreadyStopped
|
||||
}
|
||||
|
||||
m.Started = running
|
||||
|
||||
if *m.Session.Options.Debug == true {
|
||||
|
@ -134,4 +141,16 @@ func (m *SessionModule) SetRunning(running bool) {
|
|||
m.Session.Events.Add("mod.stopped", m.Name)
|
||||
}
|
||||
}
|
||||
|
||||
if cb != nil {
|
||||
if running == true {
|
||||
// this is the worker, start async
|
||||
go cb()
|
||||
} else {
|
||||
// stop callback, this is sync
|
||||
cb()
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue