Как получить MA C адрес выбранного интерфейса и адаптера? - PullRequest
0 голосов
/ 16 июня 2020

как получить MA C адрес выбранного интерфейса и адаптера? Я знаю, как получить все адреса MA C из интерфейса Ethe rnet, но моя цель - получить адрес MA C из специального адаптера c. Например, у меня есть 3 адаптера Ethe rnet (названия адаптеров: Ethe rnet, Ethe rnet 2, VMware), и моя цель - получить адрес MA C адаптера Ethe rnet. Я пробовал: искать в C# документах, искать в других потоках стека и искать на других сайтах. Мой код:

        List<string> macs = new List<string>()
        { "000569","000C29","001C14","005056","080027","00155D","080027"};
        foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
        {
            // Only consider Ethernet network interfaces
            if (nic.NetworkInterfaceType == NetworkInterfaceType.Ethernet &&
                nic.OperationalStatus == OperationalStatus.Up)
            {
                string cllc = nic.GetPhysicalAddress().ToString();
                char[] array = cllc.Substring(0, 6).ToCharArray();

                foreach (char mac in array)
                {
                    if (macs.Contains(mac.ToString()))
                        return true;
                }
            }
        }

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Если вы хотите получить MA C адрес указанного c адаптера по имени адаптера, этот код ниже работает. В этом примере выполняется попытка найти адаптер с именем «Ethe rnet».

string macAddress=NetworkInterface.GetAllNetworkInterfaces()
                 .Where(x => x.Name =="Ethernet")
                 .Select(x => x.GetPhysicalAddress().ToString())
                 .FirstOrDefault();
0 голосов
/ 17 июня 2020

Я изменил код, и теперь он работает.

List<string> macs = new List<string>()
{ "000569","000C29","001C14","005056","080027","00155D","080027"};
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
        // Only consider Ethernet network interfaces
    if (nic.NetworkInterfaceType == NetworkInterfaceType.Ethernet && 
        nic.OperationalStatus == OperationalStatus.Up)
    {
        string cllc = nic.GetPhysicalAddress().ToString();
        if (macs.Contains( cllc.Substring(0, 6)))
            return true;
    }
}

Я действительно не понимаю, почему вы использовали только первые 6 символов адреса MA C, но приведенный выше код работает правильно если первые 6 символов MA C адреса вашего "Up" Ethe rnet существуют в данном списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...