From 73f887087a04806bbd8e5b378ec0148b94616bae Mon Sep 17 00:00:00 2001 From: evilsocket Date: Thu, 1 Feb 2018 19:45:09 +0100 Subject: [PATCH] fix: fixed a bug of the probe and recon algos which prevented targets from being removed once offline --- modules/net_probe.go | 2 -- modules/net_recon.go | 28 +++++++++++----------------- net/arp.go | 12 ------------ session/targets.go | 2 +- 4 files changed, 12 insertions(+), 32 deletions(-) diff --git a/modules/net_probe.go b/modules/net_probe.go index 5d566a6b..4d774986 100644 --- a/modules/net_probe.go +++ b/modules/net_probe.go @@ -60,8 +60,6 @@ func (p *Prober) shouldProbe(ip net.IP) bool { return false } else if addr == p.Session.Gateway.IpAddress { return false - } else if p.Session.Targets.Has(addr) == true { - return false } return true } diff --git a/modules/net_recon.go b/modules/net_recon.go index dac7fa0d..93887c83 100644 --- a/modules/net_recon.go +++ b/modules/net_recon.go @@ -102,27 +102,21 @@ func (d *Discovery) checkShared(new net.ArpTable) { } func (d *Discovery) runDiff() { - var new net.ArpTable = make(net.ArpTable) + // check for endpoints who disappeared var rem net.ArpTable = make(net.ArpTable) - - if d.before != nil { - new = net.ArpDiff(d.current, d.before) - rem = net.ArpDiff(d.before, d.current) - } else { - new = d.current + for mac, t := range d.Session.Targets.Targets { + if _, found := d.current[mac]; found == false { + rem[mac] = t.IpAddress + } } - if len(new) > 0 || len(rem) > 0 { - d.checkShared(new) + for mac, ip := range rem { + d.Session.Targets.Remove(ip, mac) + } - // refresh target pool - for ip, mac := range rem { - d.Session.Targets.Remove(ip, mac) - } - - for ip, mac := range new { - d.Session.Targets.AddIfNotExist(ip, mac) - } + // now check for new friends ^_^ + for ip, mac := range d.current { + d.Session.Targets.AddIfNotExist(ip, mac) } } diff --git a/net/arp.go b/net/arp.go index 35195d63..b86f7cbe 100644 --- a/net/arp.go +++ b/net/arp.go @@ -13,18 +13,6 @@ var ( arpTable = make(ArpTable) ) -func ArpDiff(current, before ArpTable) ArpTable { - diff := make(ArpTable) - for ip, mac := range current { - _, found := before[ip] - if !found { - diff[ip] = mac - } - } - - return diff -} - func ArpLookup(iface string, address string, refresh bool) (string, error) { // Refresh ARP table if first run or if a force refresh has been instructed. if ArpParsed() == false || refresh == true { diff --git a/session/targets.go b/session/targets.go index 6185de59..bccb8e2e 100644 --- a/session/targets.go +++ b/session/targets.go @@ -12,7 +12,7 @@ import ( "github.com/evilsocket/bettercap-ng/net" ) -const TargetsDefaultTTL = 2 +const TargetsDefaultTTL = 10 const TargetsAliasesFile = "~/bettercap.aliases" type Targets struct {