6

ランダムな MAC 番号を生成する C# のメソッドを探しています。Googleはその点でかなり薄いです。

ありがとう

解決:

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)");
        }
    }
4

7 に答える 7

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

これにより、フォーマットされた MAC が得られ、文字列が削除されます。フォーマットされていない場合は、フォーマットおよびトリムが必要です。

于 2013-10-31T00:01:36.213 に答える
4

.NETFrameworkにはそのようなメソッドはありません...

自分で1つ書く必要があります-フォーマットの説明を読み、ランダムジェネレーターを使用して0〜255の6つの乱数を取得し、必要に応じて2つの関連するビット(グローバルに一意/ローカルで管理される)を設定してから、数値を16進数に変換します(つまりX2、数値ごとに2桁、左に0が埋め込まれます)、これらを区切り文字として結合し:ます...

于 2012-04-15T10:49:00.740 に答える
1

これは、ランダムな mac を生成するヘルパー クラスです。

public static class MacAddress
{
    private static readonly Random Random = new Random();

    public static string GetSignatureRandomMac(string generic = "AA")
    {
        string[] macBytes = new[]
        {
            generic,
            generic,
            generic,
            Random.Next(1, 256).ToString("X"),
            Random.Next(1, 256).ToString("X"),
            Random.Next(1, 256).ToString("X")
        };

        return string.Join("-", macBytes);
    }

    public static string GetRandomMac()
    {
        string[] macBytes = new[]
        {
            Random.Next(1, 256).ToString("X"),
            Random.Next(1, 256).ToString("X"),
            Random.Next(1, 256).ToString("X"),
            Random.Next(1, 256).ToString("X"),
            Random.Next(1, 256).ToString("X"),
            Random.Next(1, 256).ToString("X")
        };

        return string.Join("-", macBytes);
    }
}

使用法:

Console.WriteLine(MacAddress.GetRandomMac());
Console.WriteLine(MacAddress.GetSignatureRandomMac());
Console.WriteLine(MacAddress.GetSignatureRandomMac("BB"));
于 2016-12-14T08:49:08.940 に答える
-1

.NETにはMACアドレスを生成する機能はありません。それは書かれなければならないでしょう。

MACアドレスは通常、NICのOEMによって一意で設定されることを目的としています。異なる製造には、特定の割り当てられたプレフィックスがあります。サンプルリストはここにあります。https://code.wireshark.org/review/gitweb?p=wireshark.git;a=blob_plain;f=manuf

頭から離れて、MACアドレスを生成するために存在するライブラリを知りません(一般的な要件ではないため)が、アドレスは単純に6つの16進値であるため、ライブラリを作成するのはそれほど難しくありません。 00からFFはコロンで区切られます。

于 2012-04-15T10:49:01.600 に答える