MAC地址共48位,被分为由IEEE进行分配的部分和剩余的厂商自定义部分。但仔细一看却并没有那么简单。
背景研究
传统意义上的IEEE上分配的为前24位,被称为OUI(Organizationally Unique Identifier),但由于MAC地址也算是一种珍惜资源了,所以被IEEE拆成了3种大小来卖,MA-S(IAB)、MA-M、MA-L(OUI),价目表如下,不包括每年的年费,详见IEEE SA - Registration Authority。
MA-L: 即OUI
MA-S: 曾用名包括:[IAB](https://standards.ieee.org/faqs/regauth.html#20)(Individual Address Block)、[OUI-36](https://standards.ieee.org/faqs/regauth.html#21)
| 类型 | 注册价格 | 纸质合同(可选) | 名称保密费(年缴) |
|---|---|---|---|
| MA-S(12位自定义) | US $730 | US $200 | US $1185 |
| MA-M(20位自定义) | US $1745 | US $200 | US $2200 |
| MA-L(24位自定义) | US $2905 | US $200 | US $3360 |
| CID | US $730 | / | US $1185 |
你看,这样一算,维护这么一个表,光注册费都收了将将US $90,000,000,还有每年的年费,真是生财有道啊。
所以说,我们传统意义上说用MAC地址的前24位来确定对应的厂商现在来说其实已经是不完全准确了的,根据IEEE公布的清单,已经有数千家组织购买了MA-S或MA-M,这两种类型的前24位均为IEEE注册的OUI,所以如果使用旧有方法,这几千家组织都会被显示为IEEE Registration Authority。
此外还有一个异样的CID也被我列在了表中,它某种程度上与OUI很相似,IEEE分配了一个24位的CID(Company ID),且据IEEE称,它与OUI在同一个分配域中,其X-bit被置为1,并不会与其它的OUI相重复,但是不能被用作生成MAC地址(相当于是一个减配的OUI)。
以上种种,被IEEE统称为EUI(Extended Unique Identifier),更多详细信息可参见此PDF。
功能实现
这样一来,应该如何正确实现一个通过MAC地址查询厂商的接口而不是一个OUI查询接口?
数据收集
首先需要将IEEE按类型提供的列表预处理并归并至一处,IEEE提供的列表每24小时更新一次,如果以一个服务来提供,应当每日定期更新。
根据IEEE的分类,包含以下几个文件:
- MAC Address Block Large (MA-L)
- MAC Address Block Medium (MA-M)
- MAC Address Block Small (MA-S)
- Company ID
- IAB
这些CSV文件均包含这4个字段Registry, Assignment, Organization Name, Organization Address。
Registry为以下五种值中的一个:MA-L、MA-M、MA-S、CID、IABAssignment为一个6、7、9位的十六进制数Organization Name与Organization Address均为一个字符串
咕咕咕