package scans import ( "encoding/hex" "fmt" "strconv" "strings" ) // NormalizeMAC приводит ввод пользователя к виду aa:bb:cc:dd:ee:ff (как в FDB/ARP). func NormalizeMAC(s string) string { s = strings.ToLower(strings.TrimSpace(s)) if s == "" { return "" } s = strings.ReplaceAll(s, "-", ":") if strings.Count(s, ":") == 5 { parts := strings.Split(s, ":") if len(parts) != 6 { return "" } var b [6]byte for i, p := range parts { n, err := strconv.ParseUint(strings.TrimSpace(p), 16, 8) if err != nil { return "" } b[i] = byte(n) } return fmt.Sprintf("%02x:%02x:%02x:%02x:%02x:%02x", b[0], b[1], b[2], b[3], b[4], b[5]) } if strings.HasPrefix(s, "0x") { h := strings.TrimPrefix(s, "0x") h = strings.ReplaceAll(h, ":", "") if len(h) != 12 { return "" } raw, err := hex.DecodeString(h) if err != nil || len(raw) != 6 { return "" } return fmt.Sprintf("%02x:%02x:%02x:%02x:%02x:%02x", raw[0], raw[1], raw[2], raw[3], raw[4], raw[5]) } if len(s) == 12 { raw, err := hex.DecodeString(s) if err != nil || len(raw) != 6 { return "" } return fmt.Sprintf("%02x:%02x:%02x:%02x:%02x:%02x", raw[0], raw[1], raw[2], raw[3], raw[4], raw[5]) } return "" }