这是我的简单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地址是多播的。”
我做错了什么?
答案 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地址的可配置列表。这称为多播寻址。