//go:build !linux // +build !linux // ^ Linux isn't Unix anyway :P package arp import ( "net" "os/exec" "strings" ) func lookup() (map[string]net.HardwareAddr, error) { data, err := exec.Command("arp", "-an").Output() if err != nil { return nil, err } t := make(map[string]net.HardwareAddr) for _, line := range strings.Split(string(data), "\n") { fields := strings.Fields(line) if len(fields) < 3 { continue } // strip brackets around IP ip := strings.ReplaceAll(fields[1], "(", "") ip = strings.ReplaceAll(ip, ")", "") if mac, err := net.ParseMAC(fields[3]); err == nil { t[ip] = mac } } return t, nil }