Получение MAC-адреса C # - PullRequest
3 голосов
/ 01 июля 2010

Я нашел этот код, чтобы получить MAC-адрес, но он возвращает длинную строку и не содержит ':'.

Можно ли добавить в ':' или разделить строкуи добавить это сам?

вот код:

private object GetMACAddress()
{
    string macAddresses = "";

    foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
    {
        if (nic.OperationalStatus == OperationalStatus.Up)
        {
            macAddresses += nic.GetPhysicalAddress().ToString();
            break;
        }
    }

    return macAddresses;
 }

Возвращает значение 00E0EE00EE00, тогда как я хочу, чтобы оно отображало что-то вроде 00: E0: EE: 00: EE:00.

Есть идеи?

Спасибо.

Ответы [ 7 ]

10 голосов
/ 01 июля 2010

Я использую следующий код для доступа к MAC-адресу в нужном формате:

public string GetSystemMACID()
        {
            string systemName = System.Windows.Forms.SystemInformation.ComputerName;
            try
            {
                ManagementScope theScope = new ManagementScope("\\\\" + Environment.MachineName + "\\root\\cimv2");
                ObjectQuery theQuery = new ObjectQuery("SELECT * FROM Win32_NetworkAdapter");
                ManagementObjectSearcher theSearcher = new ManagementObjectSearcher(theScope, theQuery);
                ManagementObjectCollection theCollectionOfResults = theSearcher.Get();

                foreach (ManagementObject theCurrentObject in theCollectionOfResults)
                {
                    if (theCurrentObject["MACAddress"] != null)
                    {
                        string macAdd = theCurrentObject["MACAddress"].ToString();
                        return macAdd.Replace(':', '-');
                    }
                }
            }
            catch (ManagementException e)
            {
                           }
            catch (System.UnauthorizedAccessException e)
            {

            }
            return string.Empty;
        }
8 голосов
/ 01 июля 2010

Вы можете использовать метод BitConverter.ToString () :

var hex = BitConverter.ToString( nic.GetPhysicalAddress().GetAddressBytes() );
hex.Replace( "-", ":" );
3 голосов
/ 01 июля 2010

Используя LINQ, просто замените

macAddresses += nic.GetPhysicalAddress().ToString();
// Produces "00E0EE00EE00"

с

macAddresses += String.Join(":", nic.GetPhysicalAddress()
                                    .GetAddressBytes()
                                    .Select(b => b.ToString("X2"))
                                    .ToArray());
// Produces "00:E0:EE:00:EE:00"

Вы также можете играть с параметром ToString, например, если вам нравится 00:e0:ee:00:ee:00 больше, чем 00:E0:EE:00:EE:00, тогда вы можете просто передать "x2" вместо "X2".

2 голосов
/ 01 июля 2010

Вы можете использовать этот код (использует LINQ):

using System.Linq;
using System.Net;
using System.Net.NetworkInformation;

// ....

private static string GetMACAddress()
{
    foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
    {
        if (nic.OperationalStatus == OperationalStatus.Up)
            return AddressBytesToString(nic.GetPhysicalAddress().GetAddressBytes());
    }

    return string.Empty;
}

private static string AddressBytesToString(byte[] addressBytes)
{
    return string.Join(":", (from b in addressBytes
                             select b.ToString("X2")).ToArray());
}
0 голосов
/ 14 декабря 2018

// MAC-адрес

var macAddress = NetworkInterface.GetAllNetworkInterfaces();
var getTarget = macAddress[0].GetPhysicalAddress();
0 голосов
/ 01 июля 2010
function string GetSplitedMacAddress(string macAddresses)
{
    for (int Idx = 2; Idx <= 15; Idx += 3)
    {
        macAddresses = macAddresses.Insert(Idx, ":");
    }

    return macAddresses;
}
0 голосов
/ 01 июля 2010

Используйте метод GetAddressBytes:

    byte[] bytes = address.GetAddressBytes();
    for(int i = 0; i< bytes.Length; i++)
    {
        // Display the physical address in hexadecimal.
        Console.Write("{0}", bytes[i].ToString("X2"));
        // Insert a hyphen after each byte, unless we are at the end of the 
        // address.
        if (i != bytes.Length -1)
        {
             Console.Write("-");
        }
    }
...