From 857c0c7261e7abff30c53d19ca56690bb975c087 Mon Sep 17 00:00:00 2001 From: evilsocket Date: Tue, 23 Jan 2018 18:06:33 +0100 Subject: [PATCH] new: new by sent and by rcvd net.show sorting methods --- modules/net_recon.go | 18 ++++++++++++++++- modules/net_recon_sort.go | 42 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/modules/net_recon.go b/modules/net_recon.go index 8e9819e2..95b2f1bb 100644 --- a/modules/net_recon.go +++ b/modules/net_recon.go @@ -48,7 +48,7 @@ func NewDiscovery(s *session.Session) *Discovery { })) d.AddHandler(session.NewModuleHandler("net.show", "", - "Show current hosts list.", + "Show current hosts list (default sorting by ip).", func(args []string) error { return d.Show("address") })) @@ -59,6 +59,18 @@ func NewDiscovery(s *session.Session) *Discovery { return d.Show("seen") })) + d.AddHandler(session.NewModuleHandler("net.show by sent", "", + "Show current hosts list (sort by sent packets).", + func(args []string) error { + return d.Show("sent") + })) + + d.AddHandler(session.NewModuleHandler("net.show by rcvd", "", + "Show current hosts list (sort by received packets).", + func(args []string) error { + return d.Show("rcvd") + })) + return d } @@ -220,6 +232,10 @@ func (d *Discovery) Show(by string) error { sort.Sort(ByAddressSorter(targets)) } else if by == "seen" { sort.Sort(BySeenSorter(targets)) + } else if by == "sent" { + sort.Sort(BySentSorter(targets)) + } else if by == "rcvd" { + sort.Sort(ByRcvdSorter(targets)) } data = make([][]string, nTargets) diff --git a/modules/net_recon_sort.go b/modules/net_recon_sort.go index 95a4cc28..66e9ffc8 100644 --- a/modules/net_recon_sort.go +++ b/modules/net_recon_sort.go @@ -2,6 +2,8 @@ package modules import ( "github.com/evilsocket/bettercap-ng/net" + "github.com/evilsocket/bettercap-ng/packets" + "github.com/evilsocket/bettercap-ng/session" ) type ByAddressSorter []*net.Endpoint @@ -15,3 +17,43 @@ type BySeenSorter []*net.Endpoint func (a BySeenSorter) Len() int { return len(a) } func (a BySeenSorter) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (a BySeenSorter) Less(i, j int) bool { return a[i].LastSeen.After(a[j].LastSeen) } + +type BySentSorter []*net.Endpoint + +func (a BySentSorter) Len() int { return len(a) } +func (a BySentSorter) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a BySentSorter) Less(i, j int) bool { + var found bool = false + var aTraffic *packets.Traffic = nil + var bTraffic *packets.Traffic = nil + + if aTraffic, found = session.I.Queue.Traffic[a[i].IpAddress]; found == false { + aTraffic = &packets.Traffic{} + } + + if bTraffic, found = session.I.Queue.Traffic[a[j].IpAddress]; found == false { + bTraffic = &packets.Traffic{} + } + + return bTraffic.Sent < aTraffic.Sent +} + +type ByRcvdSorter []*net.Endpoint + +func (a ByRcvdSorter) Len() int { return len(a) } +func (a ByRcvdSorter) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a ByRcvdSorter) Less(i, j int) bool { + var found bool = false + var aTraffic *packets.Traffic = nil + var bTraffic *packets.Traffic = nil + + if aTraffic, found = session.I.Queue.Traffic[a[i].IpAddress]; found == false { + aTraffic = &packets.Traffic{} + } + + if bTraffic, found = session.I.Queue.Traffic[a[j].IpAddress]; found == false { + bTraffic = &packets.Traffic{} + } + + return bTraffic.Received < aTraffic.Received +}