見出し画像

TWSNMP FC:偏差値にマイナスがあって驚いた、MACアドレスからベンダーコードを調べる方法を変更

今朝、猫は調子が悪いのか夜中の2時から大騒ぎしてました。2時にご飯をあげて寝ようとするとまた起こしにきました。私が寝ようとすると怒るので仕方なく今朝は2時から開発をすることにしました。「昨日の続きを早く仕上げろ」と言っているのかもしれません。
おかげで、レポート設定の改善は完了しました。

レポートの設定を改善して試しているとデバイスの信用スコアがマイナスになっているものがありました。

画像1

信用スコアは偏差値で計算しているのでマイナスはないと思っていました。これは単なる思い込みでした。

ということのようで極端におかしな通信をしているデバイスは、信用スコアはマイナスになっています。ただ、アイコンが不明になるので修正が必要です。これは考える必要あります。

次に、最近気になっていたMACアドレスからベンダー(メーカー)を調べた時に不明になるケースが増えていることの対策です。

画像2

のような部分です。原因として2つ思い当たることがありました。

・ベンダーコードのデータベースが古い
・プラーベートなMACアドレスが使われている

ベンダーコードのデータベースは、

ですが、最新のものをダウンロードしても、不明のままでした。Googleで調べて、

を見つけました。このデータベースだと不明のもの検索できるようになりました。このデータベースを使うことにしました。
プライベートなMACアドレスは、

といいう話です。
プライベートなMACアドレスといっていますが、MACアドレスには、グローバルとローカルというものが昔からあります。

このローカルを使っているようです。そこで、MACアドレスからベンダーを検索する処理を

// FindVendor : Find Vendor Name from MAC Address
func FindVendor(mac string) string {
	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 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)"
				}
				return "Local"
			}
		}
	}
	return "Unknown"
}

のように改善してローカルのアドレスが区別できるようにしました。
どうもMACアドレスのローカルビットを0にすればベンダーコードも戻るようです。
この修正は、

ここまで対応したものは、Dockerで試せます。

です。明日に続く。


開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。