diff --git a/modules/net_recon.go b/modules/net_recon.go index 0f5ec452..8e9819e2 100644 --- a/modules/net_recon.go +++ b/modules/net_recon.go @@ -50,7 +50,13 @@ func NewDiscovery(s *session.Session) *Discovery { d.AddHandler(session.NewModuleHandler("net.show", "", "Show current hosts list.", func(args []string) error { - return d.Show() + return d.Show("address") + })) + + d.AddHandler(session.NewModuleHandler("net.show by seen", "", + "Show current hosts list (sort by last seen).", + func(args []string) error { + return d.Show("seen") })) return d @@ -179,7 +185,7 @@ func (p ProtoPairList) Len() int { return len(p) } func (p ProtoPairList) Less(i, j int) bool { return p[i].Hits < p[j].Hits } func (p ProtoPairList) Swap(i, j int) { p[i], p[j] = p[j], p[i] } -func (d *Discovery) Show() error { +func (d *Discovery) Show(by string) error { d.Session.Targets.Lock() d.Session.Queue.Lock() defer d.Session.Targets.Unlock() @@ -210,7 +216,11 @@ func (d *Discovery) Show() error { targets = append(targets, t) } - sort.Sort(ByAddressSorter(targets)) + if by == "address" { + sort.Sort(ByAddressSorter(targets)) + } else if by == "seen" { + sort.Sort(BySeenSorter(targets)) + } data = make([][]string, nTargets) for i, t := range targets { diff --git a/modules/net_recon_sort.go b/modules/net_recon_sort.go index 5c6aa906..5f9e1c6e 100644 --- a/modules/net_recon_sort.go +++ b/modules/net_recon_sort.go @@ -9,3 +9,9 @@ type ByAddressSorter []*net.Endpoint func (a ByAddressSorter) Len() int { return len(a) } func (a ByAddressSorter) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (a ByAddressSorter) Less(i, j int) bool { return a[i].IpAddressUint32 < a[j].IpAddressUint32 } + +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.Before(a[j].LastSeen) }