java - 使随机 mac 地址生成器仅生成单播 mac

标签 java networking mac-address

这是我的简单 mac 地址生成器:

private String randomMACAddress(){
    Random rand = new Random();
    byte[] macAddr = new byte[6];
    rand.nextBytes(macAddr);

    StringBuilder sb = new StringBuilder(18);
    for(byte b : macAddr){
        if(sb.length() > 0){
            sb.append(":");
        }else{ //first byte, we need to set some options
            b = (byte)(b | (byte)(0x01 << 6)); //locally adminstrated
            b = (byte)(b | (byte)(0x00 << 7)); //unicast

        }
        sb.append(String.format("%02x", b));
    }


    return sb.toString();
}

请注意我是如何设置和取消设置位的,以便生成单播 mac。 但是它不起作用,我接受 mac 地址的自动程序返回错误,因为“这个 mac 地址是多播的”。

我做错了什么?

最佳答案

解决了...我刚刚做了

private String randomMACAddress(){
    Random rand = new Random();
    byte[] macAddr = new byte[6];
    rand.nextBytes(macAddr);

    macAddr[0] = (byte)(macAddr[0] & (byte)254);  //zeroing last 2 bytes to make it unicast and locally adminstrated

    StringBuilder sb = new StringBuilder(18);
    for(byte b : macAddr){

        if(sb.length() > 0)
            sb.append(":");

        sb.append(String.format("%02x", b));
    }


    return sb.toString();
}

关于java - 使随机 mac 地址生成器仅生成单播 mac,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24261027/

相关文章:

c# - C# 应用程序如何轻松地在网络上通信和传输文件?

node.js - 我可以使用 node.js 获取唯一的服务器机器标识符吗?

ruby - Vagrant:在 private_network 中设置 VM 的 MAC 地址(hostonly)

java - Android Horizo​​ntalScrollView 内容拉伸(stretch)

java - 使用 Jackson 解析 XML 时如何忽略特定节点

java - 侧滚云

bluetooth - Mac地址和蓝牙地址的区别

java - 尝试使用 drawString 方法打印名称

python - 用于允许断开连接的仅发送协议(protocol)的扭曲客户端

Android ICS 网络位置未更新