每个人都知道这是六个字节(通常以十六进制格式显示),它们在出厂时已分配给网卡,乍一看,它们是随机的。 有人知道地址的前三个字节是制造商的标识符,其余的三个字节分配给它们。 还众所周知,您可以为自己设置一个任意地址。 许多人听说过Wi-Fi中的“随机地址”。
让我们弄清楚它是什么。
MAC地址(媒体访问控制地址)-分配给网络适配器的唯一标识符;它用于IEEE 802标准网络,主要是以太网,Wi-Fi和蓝牙。 正式地,它被称为“ EUI-48类型标识符”。 从名称可以明显看出,该地址的长度为48位,即 6个字节。 没有一个普遍接受的写地址标准(与IPv4地址相反,在IPv4地址中八位字节总是用点分隔),通常写为六个十六进制数字,并用冒号分隔:00:AB:CD:EF:11:22,尽管某些设备制造商更喜欢写为00 -AB-CD-EF-11-22甚至00ab.cdef.1122。
从历史上看,地址是在网卡芯片组的ROM中缝合的,没有闪存编程器就无法修改它们的地址,但是目前,可以从操作系统中以编程方式更改地址。 您可以在Linux和MacOS(始终),Windows(在驱动程序允许的情况下,几乎总是这样),Android(仅根)中手动设置网卡的MAC地址。 使用iOS(无root用户)时,类似的技巧是不可能的。
地址结构
该地址由制造商标识符OUI和制造商分配的标识符的一部分组成。 OUI(组织唯一标识符)由IEEE分配。 实际上,它的长度不仅可以是3个字节(24位),而且可以是28或36位,从而形成大(MA-L),中(MA-M)和小(Small)类型的MAC地址块(MA)块(MA-S)。 在这种情况下,已发布块的大小将是24、20、12位或1600万,100万,4000个地址。 目前,已分发了约38 000个块,可以使用许多在线工具(例如IEEE或Wireshark)查看它们。
谁拥有地址
公开可用的IEEE 上传数据库的简单处理提供了很多信息。 例如,一些组织采取了许多OUI阻止措施。 这是我们的英雄:
Google只有40台,这不足为奇:它们自己生产的网络设备并不多。
并非免费提供MA块,可以用合理的钱(没有月租费)购买它们,价格分别为$ 3000,$ 1800或$ 755。 有趣的是,您可以(每年)多花钱购买有关所分配区块的公共信息“隐藏”。 如上所示,现在有232个。
MAC地址什么时候用完?
我们都对已有十年历史的“ IPv4地址即将用完”的故事感到厌倦。 是的,不再容易获得新的IPv4块。 还知道IP地址的分布极为不均匀 ; 大型公司和美国政府拥有巨大且很少使用的区块,但是他们没有太多希望将它们重新分配给有需要的人。 NAT,CG-NAT和IPv6的激增使缺乏公共地址的问题变得不太严重。
MAC地址具有48位,其中46位是有用的(为什么要读),它提供2 46或10 14个地址,这是IPv4地址空间的2 14倍。
目前,大约有五万亿个地址被分配,或仅占总数的0.73%。 MAC地址的耗尽仍然非常非常远。
随机位
可以假定OUI是随机分布的,然后供应商也将地址随机分配给各个网络设备。 是这样吗 让我们看看WNAM无线网络中有效的授权系统收集的我可支配的802.11设备地址的MAC基数中的位分布。 这些地址属于在三个国家/地区已连接Wi-Fi数年的真实设备。 此外,还有少量的802.3有线LAN设备。
我们将每个样本的每个MAC地址(六个字节)按字节分解,并查看48个位置中每个位置“ 1”位的出现频率。 如果以完全任意的方式设置该位,则获得“ 1”的可能性应为50%。
第7和8位中的这种不公正来自何处? 几乎总是零。
实际上,该标准将这些位定义为特殊位( Wikipedia ):

MAC地址第一个字节的第8位(从头开始)称为单播/多播位,并确定使用该地址(普通(0)或广播(1)(多播或广播))传输哪种类型的帧(帧)。 对于正常的单播网络适配器交互,在发送给它的所有数据包中,此位都设置为“ 0”。
MAC地址第一个字节的第七个(从头开始)位称为U / L(通用/本地)位,它确定该地址是全局唯一(0)还是本地唯一(1)。 默认情况下,所有“由制造商缝制”的地址都是全局唯一的,因此,收集到的大量MAC地址包含设置为“ 0”的第七位。 在分配的OUI标识符表中,只有大约130个条目的U / L位为“ 1”,并且很可能是特殊需要的MAC地址块。
从第一个字节的第六个到第一位,OUI标识符中的第二个和第三个字节的位,或什至更多,是由制造商分配的地址的4-6个字节中的位,或多或少均匀地分布。
因此,在网络适配器的实际MAC地址中,这些位实际上是等效的,并且不具有技术含义,除了高字节的两个服务位之外。
患病率
我想知道哪个无线设备制造商最受欢迎? 将OUI搜索与1号样本数据结合起来。
实践表明,在这个地方,无线用户的数量越多,Apple设备的比例就越大。
独特性
MAC地址是否唯一? 从理论上讲,是的,因为要求每个设备制造商(MA单元的所有者)为其每个网络适配器提供唯一的地址。 但是,一些芯片制造商,即:
- 00:0A:F5 Airgo Networks,Inc. (现在是高通)
- 00:08:22 InPro Comm(现为联发科)
将MAC地址的最后三个字节设置为一个随机数,显然是在每次设备重新启动之后。 我的1号样本中有82,000个这样的地址。
当然,您可以通过有目的地像“邻居”那样设置陌生人而不是唯一地址,将其定义为嗅探器,或随意选择。 例如,还可以通过执行诸如Mikrotik或OpenWrt之类的路由器的备份配置恢复,意外地为自己设置一个非唯一地址。
如果网络上存在两个具有相同MAC地址的设备,该怎么办? 这完全取决于网络设备(有线路由器,无线网络控制器)的逻辑。 这两种设备很可能要么不工作,要么间歇工作。 从IEEE标准的角度来看,提出了使用例如MACsec或802.1X来解决针对MAC地址的伪造的保护。
如果您将自己的MAC地址设置为第七或第八位为“ 1”,该怎么办? 本地还是多播地址? 您的网络很可能不会对此加以注意,但是从形式上讲,这样的地址将不符合标准,最好不要这样做。
随机如何工作
我们知道,为了防止通过扫描空气和收集智能手机的MAC操作系统来跟踪人员的移动,使用随机化技术已有几年了。 从理论上讲,当扫描空中搜索已知网络时,智能手机会发送以MAC地址为源的802.11探测请求类型的数据包(数据包组):

所包含的随机化允许您指定不是“闪存”,而是指定数据包的某些其他源地址,随每个扫描周期,时间或以某种方式更改。 这样行吗? 让我们看一下通过所谓的“ Wi-Fi Radar”从空中收集的MAC地址的统计信息:
情况完全不同。
MAC地址第一个字节的第8位仍与探测请求数据包中SRC地址的单播性质匹配。
在92.2%的情况下,第7位设置为本地,即 可以肯定地说,我们可以假设收集到的这么多地址是随机的,只有不到8%是真实的。 此外,OUI中此类实际地址的位分布与上表中的数据大致重合。
根据OUI,随机地址属于哪个制造商(即“ 1”中的第7位)?
此外,所有分配给Google的随机地址都属于一个前缀为DA:A1:19的 OUI。 这个前缀是什么? 让我们看一下Android的源代码 。
private static final MacAddress BASE_GOOGLE_MAC = MacAddress.fromString("da:a1:19:0:0:0");
原始android在搜索无线网络时使用了特殊的注册OUI,这是设置了第七位的少数OUI之一。
从随机计算真实MAC
让我们看看那里:
private static final long VALID_LONG_MASK = (1L << 48) - 1; private static final long LOCALLY_ASSIGNED_MASK = MacAddress.fromString("2:0:0:0:0:0").mAddr; private static final long MULTICAST_MASK = MacAddress.fromString("1:0:0:0:0:0").mAddr; public static @NonNull MacAddress createRandomUnicastAddress(MacAddress base, Random r) { long addr; if (base == null) { addr = r.nextLong() & VALID_LONG_MASK; } else { addr = (base.mAddr & OUI_MASK) | (NIC_MASK & r.nextLong()); } addr |= LOCALLY_ASSIGNED_MASK; addr &= ~MULTICAST_MASK; MacAddress mac = new MacAddress(addr); if (mac.equals(DEFAULT_MAC_ADDRESS)) { return createRandomUnicastAddress(base, r); } return mac; }
整个地址或其至少三个字节是纯Random.nextLong() 。 “真实MAS的专利恢复”-欺诈。 可以肯定的是,可以预期Android手机的制造商会使用其他未注册的OUI。 我们没有任何iOS来源,但是很可能在那里使用了类似的算法。
基于对探测请求帧的其他字段的分析或由设备发送的请求的相对频率的相关性,以上内容并未取消Wi-Fi用户取消匿名化的其他机制的操作。 但是,通过外部手段可靠地跟踪用户是非常成问题的。 所收集的数据更适合根据位置和时间来分析平均/峰值负载,基于大量数据,而无需参考特定的设备和人员。 准确的数据仅适用于“内部”(移动操作系统制造商自己)已安装应用程序的人员。
如果其他人找到了您设备的MAC地址,会有什么危险呢? 对于有线和无线网络,可以组织拒绝服务攻击。 另外,对于无线设备,有可能将出现的瞬间固定在安装传感器的位置。 通过欺骗地址,您可以尝试“假装”为设备,只有在不使用其他安全功能(授权和/或加密)的情况下,该设备才能工作。 这里有99.9%的人无后顾之忧。
MAC地址比听起来复杂,但比可能简单。