有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

这是我的简单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地址是多播的”

我做错了什么


共 (3) 个答案

  1. # 1 楼答案

    解决了。。。我刚做了

    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();
    }
    
  2. # 2 楼答案

    public String generateRandomMacAddress() {
          Random r = new Random();
          return RandomStringUtils.randomAlphabetic(1) + r.nextInt(11)+ ":" +
                  r.nextInt(11) + r.nextInt(11) + ":" +
                  RandomStringUtils.randomAlphabetic(2)+":"+
                  r.nextInt(11)+RandomStringUtils.randomAlphabetic(1)+":"+
                  r.nextInt(11)+RandomStringUtils.randomAlphabetic(1);
       }
    

    ``

  3. # 3 楼答案

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