MAC-адрес C#


MAC-адрес - это двенадцатизначное шестнадцатеричное число, которое однозначно идентифицирует сетевой интерфейс, такой как сетевая карта в компьютере или принтере. Используя .NET framework, можно найти MAC-адреса сетевых интерфейсов на компьютере.

MAC-адреса

Все устройства, соединенные вместе с помощью сети, должны иметь уникальный идентификатор, чтобы сообщения могли правильно передаваться между ними. Многие сетевые технологии используют для этой цели адрес управления доступом к мультимедиа, известный как MAC-адрес.

MAC-адрес - это шестибайтовый код, который присваивается каждому сетевому интерфейсу устройства. Многие устройства имеют только один MAC-адрес, так как у них есть только одно соединение. Например, принтеру, подключенному к небольшой локальной сети (LAN), обычно требуется только один сетевой интерфейс и, следовательно, один MAC-адрес. Другие устройства имеют несколько MAC-адресов. К ним относятся компьютеры с несколькими сетевыми картами. Например, многие ноутбуки имеют два MAC-адреса: один для порта проводной сети и один для беспроводного адаптера.

Шесть байтов MAC-адреса обеспечивают более 280 триллионов возможных значений, которые могут быть отформатированы различными способами. Обычно можно увидеть шесть пар шестнадцатеричных цифр, разделенных дефисами или двоеточиями, таких как 01-23-45-67-89-AB или 01:23:45:67:89: АБ. Иногда цифры группируются в три набора по четыре, например 0123.4567.89AB. Наконец, в этой статье мы увидим MAC-адреса без знаков препинания, такие как 0123456789AB.

В некоторых ситуациях может оказаться полезным получить MAC-адреса, используемые на локальном компьютере. Одним из распространенных способов использования является ограничение выполнения программного обеспечения в соответствии со схемой лицензирования. MAC-адреса в сочетании с другой идентифицирующей информацией могут быть использованы для предотвращения незаконного копирования вашего программного обеспечения с одного компьютера на другой. В этой статье мы увидим, как получить MAC-адреса для каждой операционной сетевой карты на локальном компьютере с помощью стандартных классов .NET framework.

Класс NetworkInterface

Для получения информации о сетевых интерфейсах на компьютере, включая MAC-адреса, мы можем использовать класс NetworkInterface. Мы начинаем с получения массива сетевых интерфейсов, по одному для каждой физической и логической сетевой карты, вызывая статический метод GetAllNetworkInterfaces. Это показано ниже:

NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
Как только у нас будет массив, мы сможем просмотреть его, чтобы найти интересующие нас сетевые интерфейсы, их MAC-адреса и другие детали. Есть еще три других свойства, которые нас интересуют. Двумя простыми строковыми свойствами являются Name и Description, которые предоставляют полезную текстовую информацию для идентификации каждого сетевого интерфейса. Мы будем использовать третье свойство для фильтрации сетевых интерфейсов. Свойство OperationalStatus описывает текущее состояние сетевой карты. Оно возвращает значение из перечисляемого типа OperationalStatus со следующими возможными значениями:

  • Dormant. Сетевой интерфейс ожидает внешнего события, прежде чем он станет доступным.
  • Down. Сетевая карта в настоящее время недоступна.
  • LowerLayerDown. Сетевой интерфейс зависит от одного или нескольких других интерфейсов, и по крайней мере одна из этих зависимостей недоступна.
  • NotPresent. Сетевого интерфейса нет. Это может быть связано с отсутствием аппаратного компонента.
  • Testing. Сетевой интерфейс недоступен, так как он выполняет тесты.
  • Unknown. Состояние сетевого интерфейса не может быть определено.
  • Up. Сетевой интерфейс доступен для использования.
Наконец, для получения MAC-адреса сетевого интерфейса мы будем использовать метод GetPhysicalAddress. Он возвращает объект PhysicalAddress, представляющий адрес сетевой карты. MAC-адрес может быть извлечен из этого объекта в строковой форме с помощью метода toString или в виде массива байтов с помощью метода GetAddressBytes.

Приведенный ниже код показывает классы, методы и свойства в действии. Цикл foreach обрабатывает каждый объект NetworkInterface по очереди. Однако отображаются только доступные в данный момент сетевые карты с MAC-адресом. В комментариях показан пример вывода для одного сетевого интерфейса.

foreach (NetworkInterface ni in interfaces)
{
    if (ni.OperationalStatus ==
        OperationalStatus.Up && ni.GetPhysicalAddress().GetAddressBytes().Length != 0)
    {
        Console.WriteLine("Название        : {0}", ni.Name);
        Console.WriteLine("Описание        : {0}", ni.Description);
        Console.WriteLine("MAC-адрес       : {0}", ni.GetPhysicalAddress().ToString());
        Console.WriteLine();
    }
}
 
/* ВЫВОД
 
Название : Беспроводное сетевое подключение
Описание : Realtek RTL8187B Wireless 802.11b/g 54Mbps USB 2.0 Network Adapter
MAC - адрес : 022222222AB
 
*/
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, си шарп, сеть




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Магия закончилась: часть 2
Поля и методы в Java: сцепление экземпляров методов цепочкой
Урок 19. Оператор if...else JavaScript