生成随机mac地址

MUG*_*G4N 5 c# networking

我在C#中寻找一种生成随机MAC号的方法.谷歌在这方面相当薄弱.

多谢

解:

在Yahia的帮助下,我能够编写以下解决方案.再次!

public static string GenerateMACAddress()
    {
        var sBuilder = new StringBuilder();
        var r = new Random();
        int number;
        byte b;
        for (int i = 0; i < 6; i++)
        {
            number = r.Next(0, 255);
            b = Convert.ToByte(number);
            if (i == 0)
            {
                b = setBit(b, 6); //--> set locally administered
                b = unsetBit(b, 7); // --> set unicast 
            }
            sBuilder.Append(number.ToString("X2"));
        }
        return sBuilder.ToString().ToUpper();
    }

    private static byte setBit(byte b, int BitNumber)
    {
        if (BitNumber < 8 && BitNumber > -1)
        {
            return (byte)(b | (byte)(0x01 << BitNumber));
        }
        else
        {
            throw new InvalidOperationException(
            "Der Wert für BitNumber " + BitNumber.ToString() + " war nicht im zulässigen Bereich! (BitNumber = (min)0 - (max)7)");
        }
    }

    private static byte unsetBit(byte b, int BitNumber)
    {
        if (BitNumber < 8 && BitNumber > -1)
        {
            return (byte)(b | (byte)(0x00 << BitNumber));
        }
        else
        {
            throw new InvalidOperationException(
            "Der Wert für BitNumber " + BitNumber.ToString() + " war nicht im zulässigen Bereich! (BitNumber = (min)0 - (max)7)");
        }
    }
Run Code Online (Sandbox Code Playgroud)

toc*_*han 11

一个稍微冗长的解决方案(我认为仍然可以达到相同的结果):

public static string GetRandomMacAddress()
{
    var random = new Random();
    var buffer = new byte[6];
    random.NextBytes(buffer);
    var result = String.Concat(buffer.Select(x => string.Format("{0}:", x.ToString("X2"))).ToArray());
    return result.TrimEnd(':');
}
Run Code Online (Sandbox Code Playgroud)

这给出了格式化的MAC,如果需要未格式化,则删除string.Format和Trim


Yah*_*hia 4

.NET框架中没有这样的方法......

您需要自己编写一个 - 阅读格式说明,使用随机生成器获取 0 到 255 之间的 6 个随机数,根据需要设置 2 个相关位(用于全局唯一/本地管理),然后将数字转换为十六进制(即X2每个数字 2 位数字,左侧用 0 填充)并将它们连接在一起:作为分隔符...