简介

MAC 地址百度百科
MAC地址也叫物理地址、硬件地址,由网络设备制造商生产时烧录在网卡(Network lnterface Card)的EPROM(一种闪存芯片,通常可以通过程序擦写)。IP地址与MAC地址在计算机里都是以二进制表示的,IP地址是32位的,而MAC地址则是48位的 [3] 。
MAC地址的长度为48位(6个字节),通常表示为12个16进制数,如:00-16-EA-AE-3C-40就是一个MAC地址,其中前3个字节,16进制数00-16-EA代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后3个字节,16进制数AE-3C-40代表该制造商所制造的某个网络产品(如网卡)的系列号。只要不更改自己的MAC地址,MAC地址在世界是唯一的。形象地说,MAC地址就如同身份证上的身份证号码,具有唯一性 [3] 。

Linux Shell 命令生成随机 MAC 地址

  1. __create_mac() {
  2. for ((i = 0; i < $1; i++)); do
  3. openssl rand -hex 5 | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/88:\1:\2:\3:\4:\5/'
  4. done
  5. }
  6. __create_mac 10

示例

  1. [root@lwmacct ~]# __create_mac() {
  2. > for ((i = 0; i < $1; i++)); do
  3. > openssl rand -hex 5 | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/88:\1:\2:\3:\4:\5/'
  4. > done
  5. > }
  6. [root@lwmacct ~]# __create_mac 10
  7. 88:c4:85:e8:2e:f9
  8. 88:91:02:50:8e:a8
  9. 88:67:49:66:fb:30
  10. 88:dd:31:a1:00:6a
  11. 88:7f:ac:db:08:b8
  12. 88:3d:ef:38:19:f6
  13. 88:e0:e8:88:be:f0
  14. 88:d8:36:6f:e8:ce
  15. 88:b7:fe:05:33:b1
  16. 88:b3:ba:b8:ae:90
  17. [root@lwmacct ~]#

MAC 地址的前三个字节是 OUI(Organizationally Unique Identifier),用于标识硬件设备的生产厂商。在 OUI 中,第一个字节的最高位是0,其余7位是由 IEEE 分配给不同厂商的标识符。因此,第一个字节的取值范围是 00-7F。
在这个范围内,有少量的 OUI 被保留不分配,因为它们有特殊的含义。这些 OUI 的第二个字节是固定的,因此不能被用于生成随机的 MAC 地址。这些保留的 OUI 包括:

  • 01-80-C2: Spanning Tree Protocol
  • 01-00-5E: IPv4 multicast
  • 33-33: IPv6 multicast
  • 09-00-07: AppleTalk
  • 00-03-FF: Microsoft
  • 00-05-73: IBM
  • 00-50-F2: Cisco Systems
  • 00-0D-93: Hewlett-Packard
  • 00-16-36: Xensource, Inc.

因此,在生成随机的 MAC 地址时,需要避免使用这些 OUI。