シン・TWSNMP開発日誌:MACアドレスからベンダーを調べる処理を改善しています
今朝は4時から開発開始です。
昨日発見したARP監視のページの問題を修正しています。
まず、MACアドレスからベンダーコードを調べる処理ですが、2年前に
のような記事を書きました。これを読むと今は亡き助手の猫が2時に起こしてくれていたようです。
この方法に間違いがあることに気づきました。
データをダウンロードする
の解説をよむと、
という記載があります。2年前にもあったのだと思いますが見逃していたようです。
MACアドレスの上位3バイトがベンダーコードだと思って処理を作っていましたが、 MA-M:3.5バイト、MA-S:4.5バイトもあることに気づきました。
検索する処理を書き換えました。
// FindVendor : Find Vendor Name from MAC Address
func FindVendor(mac string) string {
if mac == "" {
return ""
}
mac = strings.TrimSpace(mac)
mac = strings.ReplaceAll(mac, ":", "")
mac = strings.ReplaceAll(mac, "-", "")
if len(mac) > 6 {
mac = strings.ToUpper(mac)
if n, ok := ouiMap[mac[:6]]; ok {
return n
}
if n, ok := ouiMap[mac[:7]]; ok {
return n
}
if n, ok := ouiMap[mac[:9]]; ok {
return n
}
if h, err := hex.DecodeString(mac); err == nil {
if (h[0] & 0x02) == 0x02 {
h[0] = h[0] & 0xfd
mac = strings.ToUpper(hex.EncodeToString(h))
if n, ok := ouiMap[mac[:6]]; ok {
return n + "(Local)"
}
if n, ok := ouiMap[mac[:7]]; ok {
return n + "(Local)"
}
if n, ok := ouiMap[mac[:9]]; ok {
return n + "(Local)"
}
return "Local"
}
}
}
return "Unknown"
}
新しいデータベースファイルをダウンロードして入れ替えると、昨日、UnknownになっていたプリンターがEPSONと表示されました。
ARP監視の画面は、ARPログとアドレス管理の画面に分割しました。
もう少し調整が必要ですが、DHCPのアドレス割りてが少なくてIPアドレスが重複する問題を検知しやすくなったと思います。
明日に続く
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。