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 负责给不同厂家分配,被称为 OUI(Organizationally Unique Identifier),中文译作组织唯一的标识符。后 3byte 由各厂家自行指派(本文为算法随机生成),称为扩展标识符。

从上面 Mac 地址的构成分析可得出,当 OUI 固定后,共有 224=16777216 2 24 = 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);
    }

图1

Github 源码下载:random-mac

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值