生成随机 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 负责给不同厂家分配,被称为 OUI(Organizationally Unique Identifier),中文译作组织唯一的标识符。后 3byte 由各厂家自行指派(本文为算法随机生成),称为扩展标识符。
从上面 Mac 地址的构成分析可得出,当 OUI 固定后,共有 224=16777216224=16777216 个不同的地址。
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", random.nextInt(0xff)),
String.format("%02x", random.nextInt(0xff)),
String.format("%02x", random.nextInt(0xff))
};
return String.join(SEPARATOR_OF_MAC, mac);
}
Github 源码下载:random-mac
---------------------
作者:kyyee
来源:CSDN
原文:https://blog.csdn.net/kyyee/article/details/72873148
版权声明:本文为博主原创文章,转载请附上博文链接!