Skip to content

Commit 5dc15eb

Browse files
committed
new: allow to change spoofing interval
1 parent 5ae0860 commit 5dc15eb

File tree

1 file changed

+29
-34
lines changed

1 file changed

+29
-34
lines changed

modules/arp_spoof/arp_spoof.go

Lines changed: 29 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -14,30 +14,30 @@ import (
1414

1515
type ArpSpoofer struct {
1616
session.SessionModule
17-
addresses []net.IP
18-
macs []net.HardwareAddr
17+
tAddresses []net.IP
18+
tMacs []net.HardwareAddr
1919
wAddresses []net.IP
2020
wMacs []net.HardwareAddr
21-
uAdresses []net.IP
21+
sAdresses []net.IP
2222
fullDuplex bool
23-
ban bool
2423
skipRestore bool
2524
forward bool
25+
intervalMs int
2626
waitGroup *sync.WaitGroup
2727
}
2828

2929
func NewArpSpoofer(s *session.Session) *ArpSpoofer {
3030
mod := &ArpSpoofer{
3131
SessionModule: session.NewSessionModule("arp.spoof", s),
32-
addresses: make([]net.IP, 0),
33-
macs: make([]net.HardwareAddr, 0),
32+
tAddresses: make([]net.IP, 0),
33+
tMacs: make([]net.HardwareAddr, 0),
3434
wAddresses: make([]net.IP, 0),
3535
wMacs: make([]net.HardwareAddr, 0),
36-
uAdresses: make([]net.IP, 0),
37-
ban: false,
36+
sAdresses: make([]net.IP, 0),
3837
fullDuplex: false,
3938
skipRestore: false,
4039
forward: true,
40+
intervalMs: 1000,
4141
waitGroup: &sync.WaitGroup{},
4242
}
4343

@@ -47,7 +47,7 @@ func NewArpSpoofer(s *session.Session) *ArpSpoofer {
4747

4848
mod.AddParam(session.NewStringParameter("arp.spoof.whitelist", "", "", "Comma separated list of IP addresses, MAC addresses or aliases to skip while spoofing."))
4949

50-
mod.AddParam((session.NewStringParameter("arp.spoof.usurpate", session.ParamGatewayAddress, "", "IP addresses to usurpate, also supports nmap style IP ranges.")))
50+
mod.AddParam((session.NewStringParameter("arp.spoof.spoofed", session.ParamGatewayAddress, "", "IP addresses to spoof, also supports nmap style IP ranges.")))
5151

5252
mod.AddParam(session.NewBoolParameter("arp.spoof.fullduplex",
5353
"false",
@@ -71,19 +71,16 @@ func NewArpSpoofer(s *session.Session) *ArpSpoofer {
7171
"true",
7272
"If set to true, IP forwarding will be enabled."))
7373

74+
mod.AddParam(session.NewIntParameter("arp.spoof.interval",
75+
"1000",
76+
"Spoofing time interval."))
77+
7478
mod.AddHandler(session.NewModuleHandler("arp.spoof on", "",
7579
"Start ARP spoofer.",
7680
func(args []string) error {
7781
return mod.Start()
7882
}))
7983

80-
mod.AddHandler(session.NewModuleHandler("arp.ban on", "",
81-
"Start ARP spoofer in ban mode, meaning the target(s) connectivity will not work.",
82-
func(args []string) error {
83-
mod.ban = true
84-
return mod.Start()
85-
}))
86-
8784
mod.AddHandler(session.NewModuleHandler("arp.spoof off", "",
8885
"Stop ARP spoofer.",
8986
func(args []string) error {
@@ -121,26 +118,25 @@ func (mod *ArpSpoofer) Configure() error {
121118
return err
122119
} else if err, mod.forward = mod.BoolParam("arp.spoof.forwarding"); err != nil {
123120
return err
121+
} else if err, mod.intervalMs = mod.IntParam("arp.spoof.interval"); err != nil {
122+
return err
124123
} else if err, targets = mod.StringParam("arp.spoof.targets"); err != nil {
125124
return err
126125
} else if err, whitelist = mod.StringParam("arp.spoof.whitelist"); err != nil {
127126
return err
128-
} else if err, uTargets = mod.StringParam("arp.spoof.usurpate"); err != nil {
127+
} else if err, uTargets = mod.StringParam("arp.spoof.spoofed"); err != nil {
129128
return err
130-
} else if mod.addresses, mod.macs, err = network.ParseTargets(targets, mod.Session.Lan.Aliases()); err != nil {
129+
} else if mod.tAddresses, mod.tMacs, err = network.ParseTargets(targets, mod.Session.Lan.Aliases()); err != nil {
131130
return err
132131
} else if mod.wAddresses, mod.wMacs, err = network.ParseTargets(whitelist, mod.Session.Lan.Aliases()); err != nil {
133132
return err
134-
} else if mod.uAdresses, _, err = network.ParseTargets(uTargets, nil); err != nil {
133+
} else if mod.sAdresses, _, err = network.ParseTargets(uTargets, nil); err != nil {
135134
return err
136135
}
137136

138-
mod.Debug(" addresses=%v macs=%v whitelisted-addresses=%v whitelisted-macs=%v usurpate-addresses=%v", mod.addresses, mod.macs, mod.wAddresses, mod.wMacs, mod.uAdresses)
137+
mod.Debug(" addresses=%v macs=%v whitelisted-addresses=%v whitelisted-macs=%v spoofed-addresses=%v", mod.tAddresses, mod.tMacs, mod.wAddresses, mod.wMacs, mod.sAdresses)
139138

140-
if mod.ban {
141-
mod.Warning("running in ban mode, forwarding not enabled!")
142-
mod.Session.Firewall.EnableForwarding(false)
143-
} else if mod.forward {
139+
if mod.forward {
144140
mod.Info("enabling forwarding")
145141
if !mod.Session.Firewall.IsForwardingEnabled() {
146142
mod.Session.Firewall.EnableForwarding(true)
@@ -160,16 +156,16 @@ func (mod *ArpSpoofer) Start() error {
160156
return err
161157
}
162158

163-
nTargets := len(mod.addresses) + len(mod.macs)
159+
nTargets := len(mod.tAddresses) + len(mod.tMacs)
164160
if nTargets == 0 {
165161
mod.Warning("list of targets is empty, module not starting.")
166162
return nil
167163
}
168164

169165
return mod.SetRunning(true, func() {
170-
nUsurpate := len(mod.uAdresses)
166+
nSpoofed := len(mod.sAdresses)
171167

172-
mod.Info("arp spoofer started targeting %d addresses, probing %d targets.", nUsurpate, nTargets)
168+
mod.Info("arp spoofer started spoofing %d addresses, probing %d targets.", nSpoofed, nTargets)
173169

174170
if mod.fullDuplex {
175171
mod.Warning("full duplex spoofing enabled, if the router has ARP spoofing mechanisms, the attack will fail.")
@@ -180,23 +176,23 @@ func (mod *ArpSpoofer) Start() error {
180176

181177
myMAC := mod.Session.Interface.HW
182178
for mod.Running() {
183-
for _, address := range mod.uAdresses {
179+
for _, address := range mod.sAdresses {
184180
if net.IP.Equal(address, mod.Session.Gateway.IP) || !mod.Session.Skip(address) {
185181
mod.arpSpoofTargets(address, myMAC, true, false)
186182
}
187183
}
188184

189-
time.Sleep(1 * time.Second)
185+
time.Sleep(time.Duration(mod.intervalMs) * time.Millisecond)
190186
}
191187
})
192188
}
193189

194190
func (mod *ArpSpoofer) unSpoof() error {
195191
if !mod.skipRestore {
196-
nTargets := len(mod.addresses) + len(mod.macs)
192+
nTargets := len(mod.tAddresses) + len(mod.tMacs)
197193
mod.Info("restoring ARP cache of %d targets.", nTargets)
198194

199-
for _, address := range mod.uAdresses {
195+
for _, address := range mod.sAdresses {
200196
if net.IP.Equal(address, mod.Session.Gateway.IP) || !mod.Session.Skip(address) {
201197
if realMAC, err := mod.Session.FindMAC(address, false); err == nil {
202198
mod.arpSpoofTargets(address, realMAC, false, false)
@@ -216,7 +212,6 @@ func (mod *ArpSpoofer) Stop() error {
216212
return mod.SetRunning(false, func() {
217213
mod.Info("waiting for ARP spoofer to stop ...")
218214
mod.unSpoof()
219-
mod.ban = false
220215
mod.waitGroup.Wait()
221216
})
222217
}
@@ -241,7 +236,7 @@ func (mod *ArpSpoofer) getTargets(probe bool) map[string]net.HardwareAddr {
241236
targets := make(map[string]net.HardwareAddr)
242237

243238
// add targets specified by IP address
244-
for _, ip := range mod.addresses {
239+
for _, ip := range mod.tAddresses {
245240
if mod.Session.Skip(ip) {
246241
continue
247242
}
@@ -251,7 +246,7 @@ func (mod *ArpSpoofer) getTargets(probe bool) map[string]net.HardwareAddr {
251246
}
252247
}
253248
// add targets specified by MAC address
254-
for _, hw := range mod.macs {
249+
for _, hw := range mod.tMacs {
255250
if ip, err := network.ArpInverseLookup(mod.Session.Interface.Name(), hw.String(), false); err == nil {
256251
if mod.Session.Skip(net.ParseIP(ip)) {
257252
continue

0 commit comments

Comments
 (0)