gomanuf
gomanuf copied to clipboard
OUI conversion is unstable, such as: 8C:1C:DA:45:E7:B6
现象:某些带有指定前缀长度(非24)匹配的MAC地址会有匹配不稳定的情况;
解决方法如下: Search函数在搜索时需要先对d的key做排序,然后按序检索
func Search(mac string) (result string) {
defer func() {
if r := recover(); r != nil {
result = ""
}
}()
s := strings.Split(strings.ToUpper(mac), ":")
bint := b2uint64(s)
var keyFirstFloor []int
for b := range d {
keyFirstFloor = append(keyFirstFloor, b)
}
sort.Sort(sort.Reverse(sort.IntSlice(keyFirstFloor)))
for _, b := range keyFirstFloor {
k := 48 - b
bint = (bint >> uint8(k)) << uint8(k)
if _, ok := d[b].(map[uint64]string)[bint]; ok {
return d[b].(map[uint64]string)[bint]
}
}
return ""
}
👍🏻