package modules import ( "fmt" "net" "time" "github.com/bettercap/bettercap/log" "github.com/bettercap/bettercap/network" "github.com/bettercap/bettercap/packets" "github.com/bettercap/bettercap/session" ) func findMAC(s *session.Session, ip net.IP, probe bool) (net.HardwareAddr, error) { var mac string var hw net.HardwareAddr var err error // do we have this ip mac address? mac, err = network.ArpLookup(s.Interface.Name(), ip.String(), false) if err != nil && probe == true { from := s.Interface.IP from_hw := s.Interface.HW if err, probe := packets.NewUDPProbe(from, from_hw, ip, 139); err != nil { log.Error("Error while creating UDP probe packet for %s: %s", ip.String(), err) } else { s.Queue.Send(probe) } time.Sleep(500 * time.Millisecond) mac, _ = network.ArpLookup(s.Interface.Name(), ip.String(), false) } if mac == "" { return nil, fmt.Errorf("Could not find hardware address for %s.", ip.String()) } mac = network.NormalizeMac(mac) hw, err = net.ParseMAC(mac) if err != nil { return nil, fmt.Errorf("Error while parsing hardware address '%s' for %s: %s", mac, ip.String(), err) } return hw, nil }