@@ -14,30 +14,30 @@ import (
1414
1515type 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
2929func 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
194190func (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