mirror of
https://github.com/bettercap/bettercap
synced 2025-08-19 13:09:49 -07:00
new: net.show now accepts a comma separated list of ip, macs or aliases to filter for
This commit is contained in:
parent
09caa4dd37
commit
a2b3ee79fb
4 changed files with 52 additions and 32 deletions
|
@ -57,8 +57,8 @@ func NewDiscovery(s *session.Session) *Discovery {
|
||||||
return d.Show("rcvd", "")
|
return d.Show("rcvd", "")
|
||||||
}))
|
}))
|
||||||
|
|
||||||
d.AddHandler(session.NewModuleHandler("net.show ADDRESS", `net.show ([\d\.]+)`,
|
d.AddHandler(session.NewModuleHandler("net.show ADDRESS1, ADDRESS2", `net.show (.+)`,
|
||||||
"Show information about a specific address.",
|
"Show information about a specific list of addresses (by IP or MAC).",
|
||||||
func(args []string) error {
|
func(args []string) error {
|
||||||
return d.Show("address", args[0])
|
return d.Show("address", args[0])
|
||||||
}))
|
}))
|
||||||
|
|
|
@ -109,13 +109,16 @@ func (d *Discovery) getRow(e *network.Endpoint, withMeta bool) [][]string {
|
||||||
return rows
|
return rows
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Discovery) Show(by string, addr string) error {
|
func (d *Discovery) Show(by string, expr string) (err error) {
|
||||||
err, showMeta := d.BoolParam("net.show.meta")
|
var targets []*network.Endpoint
|
||||||
if err != nil {
|
if expr != "" {
|
||||||
return err
|
if targets, err = network.ParseEndpoints(expr, d.Session.Lan); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
targets = d.Session.Lan.List()
|
||||||
}
|
}
|
||||||
|
|
||||||
targets := d.Session.Lan.List()
|
|
||||||
if by == "seen" {
|
if by == "seen" {
|
||||||
sort.Sort(BySeenSorter(targets))
|
sort.Sort(BySeenSorter(targets))
|
||||||
} else if by == "sent" {
|
} else if by == "sent" {
|
||||||
|
@ -134,19 +137,10 @@ func (d *Discovery) Show(by string, addr string) error {
|
||||||
targets = append([]*network.Endpoint{d.Session.Interface, d.Session.Gateway}, targets...)
|
targets = append([]*network.Endpoint{d.Session.Interface, d.Session.Gateway}, targets...)
|
||||||
}
|
}
|
||||||
|
|
||||||
if addr != "" {
|
|
||||||
tmp := make([]*network.Endpoint, 0)
|
|
||||||
pad = 0
|
|
||||||
for _, t := range targets {
|
|
||||||
if t.IP.String() == addr {
|
|
||||||
tmp = append(tmp, t)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
targets = tmp
|
|
||||||
}
|
|
||||||
|
|
||||||
hasMeta := false
|
hasMeta := false
|
||||||
if showMeta {
|
if err, showMeta := d.BoolParam("net.show.meta"); err != nil {
|
||||||
|
return err
|
||||||
|
} else if showMeta {
|
||||||
for _, t := range targets {
|
for _, t := range targets {
|
||||||
if !t.Meta.Empty() {
|
if !t.Meta.Empty() {
|
||||||
hasMeta = true
|
hasMeta = true
|
||||||
|
|
|
@ -81,6 +81,19 @@ func (lan *LAN) Get(mac string) (*Endpoint, bool) {
|
||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (lan *LAN) GetByIp(ip string) *Endpoint {
|
||||||
|
lan.Lock()
|
||||||
|
defer lan.Unlock()
|
||||||
|
|
||||||
|
for _, e := range lan.hosts {
|
||||||
|
if e.IpAddress == ip {
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (lan *LAN) List() (list []*Endpoint) {
|
func (lan *LAN) List() (list []*Endpoint) {
|
||||||
lan.Lock()
|
lan.Lock()
|
||||||
defer lan.Unlock()
|
defer lan.Unlock()
|
||||||
|
@ -169,19 +182,6 @@ func (lan *LAN) EachHost(cb func(mac string, e *Endpoint)) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (lan *LAN) GetByIp(ip string) *Endpoint {
|
|
||||||
lan.Lock()
|
|
||||||
defer lan.Unlock()
|
|
||||||
|
|
||||||
for _, e := range lan.hosts {
|
|
||||||
if e.IpAddress == ip {
|
|
||||||
return e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (lan *LAN) AddIfNew(ip, mac string) *Endpoint {
|
func (lan *LAN) AddIfNew(ip, mac string) *Endpoint {
|
||||||
lan.Lock()
|
lan.Lock()
|
||||||
defer lan.Unlock()
|
defer lan.Unlock()
|
||||||
|
|
|
@ -118,6 +118,32 @@ func ParseTargets(targets string, aliasMap *Aliases) (ips []net.IP, macs []net.H
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ParseEndpoints(targets string, lan *LAN) ([]*Endpoint, error) {
|
||||||
|
ips, macs, err := ParseTargets(targets, lan.Aliases())
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp := make(map[string]*Endpoint)
|
||||||
|
for _, ip := range ips {
|
||||||
|
if e := lan.GetByIp(ip.String()); e != nil {
|
||||||
|
tmp[e.HW.String()] = e
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, mac := range macs {
|
||||||
|
if e, found := lan.Get(mac.String()); found {
|
||||||
|
tmp[e.HW.String()] = e
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ret := make([]*Endpoint, 0)
|
||||||
|
for _, e := range tmp {
|
||||||
|
ret = append(ret, e)
|
||||||
|
}
|
||||||
|
return ret, nil
|
||||||
|
}
|
||||||
|
|
||||||
func buildEndpointFromInterface(iface net.Interface) (*Endpoint, error) {
|
func buildEndpointFromInterface(iface net.Interface) (*Endpoint, error) {
|
||||||
addrs, err := iface.Addrs()
|
addrs, err := iface.Addrs()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue