feat: MAC lookup in scan FDB (API mac-locations, UI table, index)

Made-with: Cursor
This commit is contained in:
PTah
2026-04-13 12:41:48 +10:00
parent 886300b6c0
commit d85ec9ff61
9 changed files with 332 additions and 41 deletions
+1 -41
View File
@@ -364,48 +364,8 @@ func snmpNumericString(v any) string {
}
}
// normalizeMACKey приводит MAC к виду aa:bb:cc:dd:ee:ff для сопоставления FDB и ARP.
func normalizeMACKey(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 ""
return NormalizeMAC(s)
}
func dottedDecimalToMACTail(s string) string {