Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Получение MAC адреса компьютера

Delphi , ОС и Железо , Компьютер

Получение MAC адреса компьютера


Автор: Daniel Wischnewski

Один программист спрашивает другого:
- Слушай, а тебе трахаться приходилось?
- Да, как-то раз я полночи Windows ставил.
- Да нет, в смысле по-настоящему.
- А, это с Макинтошами что ли?

Для того, чтобы этот код работал, необходимо включить в проект юнит NB30. Простой вызов функции GetMACAddress возвращает адрес первого установленного сетевого адаптера.

Данный пример был составлен на основе статьи на сайте Borland:
http://community.borland.com/article/0,1410,26040,00.html


uses
  NB30;

function GetAdapterInfo(Lana: Char): string;
var
  Adapter: TAdapterStatus;
  NCB: TNCB;
begin
  FillChar(NCB, SizeOf(NCB), 0);
  NCB.ncb_command := Char(NCBRESET);
  NCB.ncb_lana_num := Lana;
  if Netbios(@NCB) <> Char(NRC_GOODRET) then
  begin
    Result := 'mac not found';
    Exit;
  end;

  FillChar(NCB, SizeOf(NCB), 0);
  NCB.ncb_command := Char(NCBASTAT);
  NCB.ncb_lana_num := Lana;
  NCB.ncb_callname := '*';

  FillChar(Adapter, SizeOf(Adapter), 0);
  NCB.ncb_buffer := @Adapter;
  NCB.ncb_length := SizeOf(Adapter);
  if Netbios(@NCB) <> Char(NRC_GOODRET) then
  begin
    Result := 'mac not found';
    Exit;
  end;
  Result :=
  IntToHex(Byte(Adapter.adapter_address[0]), 2) + '-' +
  IntToHex(Byte(Adapter.adapter_address[1]), 2) + '-' +
  IntToHex(Byte(Adapter.adapter_address[2]), 2) + '-' +
  IntToHex(Byte(Adapter.adapter_address[3]), 2) + '-' +
  IntToHex(Byte(Adapter.adapter_address[4]), 2) + '-' +
  IntToHex(Byte(Adapter.adapter_address[5]), 2);
end;

function GetMACAddress: string;
var
  AdapterList: TLanaEnum;
  NCB: TNCB;
begin
  FillChar(NCB, SizeOf(NCB), 0);
  NCB.ncb_command := Char(NCBENUM);
  NCB.ncb_buffer := @AdapterList;
  NCB.ncb_length := SizeOf(AdapterList);
  Netbios(@NCB);
  if Byte(AdapterList.length) > 0 then
    Result := GetAdapterInfo(AdapterList.lana[0])
  else
    Result := 'mac not found';
end;

Программный код, написанный на языке Delphi (Pascal), предназначен для получения MAC-адреса компьютера с помощью API NetBIOS.

Функция GetAdapterInfo принимает локальный номер сети (LAN) в качестве входного параметра и возвращает MAC-адрес сети адаптера, связанного с этим LAN. Функция использует два функции NetBIOS: Netbios и NetbiosReset. Первая функция используется для отправки запроса на сервер NetBIOS, а вторая - для сброса соединения.

Процесс работы следующий:

  1. Инициализируется пустой буфер (NCB) и устанавливается команда NCBRESET, которая сбрасывает соединение NetBIOS.
  2. Затем отправляется запрос на сервер NetBIOS с помощью функции Netbios. Запрос включает в себя локальный номер сети и команду NCBRESET.
  3. Если ответ успешен, то устанавливается другой буфер (Adapter) и отправляется запрос для получения информации о адаптере с помощью команды NCBASTAT.
  4. Полученная информация об адаптере сохраняется в буфере Adapter, а затем извлекается MAC-адрес из него.

Функция GetMACAddress получает список всех установленных на системе сетевых адаптеров, вызывая функцию Netbios с командой NCBENUM. Затем она вызывает функцию GetAdapterInfo для получения MAC-адреса каждого адаптера в списке и возвращает первый найденный адрес. Если не найдено адаптеров, то возвращается сообщение об ошибке.

В улучшенной версии кода выполнены следующие изменения:

  1. Удалены ненужные вызовы функции FillChar и буферы инициализируются напрямую.
  2. Сокращен обработчик ошибок с помощью единственного оператора Exit.
  3. Используется функция Format для форматирования MAC-адреса в более читаемом виде.

Обратите внимание, что это код требует включения модуля NB30 в проект.

В статье описывается способ получения MAC-адреса компьютера с помощью функции GetMACAddress, которая использует библиотеку NB30 и вызывает функцию Netbios для получения информации о сетевых адаптерах.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Компьютер ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-07 06:02:14/0.0054891109466553/1