【发布时间】:2012-04-15 10:42:34
【问题描述】:
我正在寻找一种在 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)");
}
}
【问题讨论】:
-
.NET 框架中没有这样的方法...你试过什么?什么不工作?你的目标到底是什么?
-
好吧,我认为可能有一种现有的方法可以生成格式为 MAC 字符串的数字。如果不是我必须自己写...
-
您只需要在最左边的字节上旋转那个位,而不是全部。而且您不需要编写方法来设置和清除位:使用 |和 & 运算符。
-
我很困惑。为什么要设置第一个字节的高位?我认为单播\多播位是第一个字节的最低位,全局唯一\本地管理的是第一个字节的第二个最低位。 en.wikipedia.org/wiki/MAC_address
-
这个方法好像还是生成无效的mac地址
标签: c# networking