使随机mac地址生成器生成只是单播mac

时间:2014-06-17 10:06:05

标签: 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地址是多播的。”

我做错了什么?

2 个答案:

答案 0 :(得分:5)

解决了......我刚刚做了

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();
}

答案 1 :(得分:0)

如果最高有效地址八位字节的最低有效位设置为1,则帧仍将仅发送一次;但是,NIC将根据MAC地址匹配以外的条件选择接受它:例如,基于可接受的多播MAC地址的可配置列表。这称为多播寻址。