Java随机⽣成Mac地址(GitHub源码下载)
⽣成随机 Mac 地址
这段时间做项⽬,涉及到虚拟机 Mac 地址⽣成,⽹上了⼀些 Java 随机⽣成 Mac 地址的代码,⼤多都是从 {‘0’, ‘1’, ‘2’,
‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘a’, ‘b’, ‘c’, ‘e’, ‘d’, ‘f’} 随机取⼀位拼成 Mac 地址字符串,实际上这种⽅式不符合 Mac 地址定义,下⾯将给出我随机⽣成 Mac 地址的⽅法,该⽅法参考相关 python
什么是 Mac 地址
MAC(Media Access Control)地址,称为物理地址、硬件地址。每块⽹卡有唯⼀的 Mac 地址。
通常 Mac 地址是固定的。
Mac 地址采⽤ 16 进制数表⽰,⼀个 2 位 16 进制数为 1byte,共 6byte(48bit)。
Mac 地址的前 3byte 由 IEEE 的注册管理机构 RA 负责给不同⼚家分配,被称为 (Organizationally Unique Identifier),中⽂译作组织唯⼀的标识符。后 3byte 由各⼚家⾃⾏指派(本⽂为算法随机⽣成),称为扩展标识符。
从上⾯ Mac 地址的构成分析可得出,当 OUI 固定后,共有 个不同的地址。
Mac 地址⽣成原理
前⾯分析了 Mac 地址由 6 个 2 位 16 进制数组成,如 52:54:00:a3:07:18。该地址的前 3 位 52:54:00 由 OUI 分配给 qemu/kvm,我们只需随机⽣成后 3 位。
我们知道的是⼀个 2 位 16 进制数铁定是 0x00-0xff 中的⼀位,那么问题就简单了,我们使⽤ Java 中的随机数类 Random 的⽅法nextInt(int bound) 在 0x00-0xff 范围内随机取⼀个整数就⾏了。
0x00-0xff 如果⽤ 10 进制数表⽰则是 0-255 ,因此 在 0-255 范围内随机取⼀个整数和 0x00-0xff 效果是⼀样的。
随机⽣成Mac 地址代码⽚段
根据上⾯ Mac 地址⽣成原理得出下⾯的 Java 代码⽚段。源代码下载开源社区
private static String SEPARATOR_OF_MAC = ":";
/**
* Generate a random MAC address for qemu/kvm
* 52-54-00 used by qemu/kvm
* The remaining 3 fields are random,  range from 0 to 255
*
* @return MAC address string
*/
public String randomMac4Qemu() {
Random random = new Random();
String[] mac = {
String.format("%02x", 0x52),
String.format("%02x", 0x54),
String.format("%02x", 0x00),
String.format("%02x", Int(0xff)),
String.format("%02x", Int(0xff)),
String.format("%02x", Int(0xff))
};
return String.join(SEPARATOR_OF_MAC, mac);
}
Github 源码下载:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。