Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как определить MAC адрес НУЖНОГО адаптера


Погроммист ©   (2016-04-06 19:58:00) 


function GetAdapterInfo(Lana: Ansichar): 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;


использую эти функции для определения мак адреса. Но возникла проблема, помимо основного адаптера у меня еще есть 2 от виртуальных машин. И проблема заключается в том, что эта функция возвращает то мак адрес одного адаптера то другого(после перезагрузки компа меняется адаптер в 0 элементе). Как получить мак адрес реального моего адаптера? В принципе меня бы и любой устроил, но только чтобы всегда был один и тот же. Я так понял что AdapterList это вроде как список адаптеров, но понять в этом "списке" я ничего не смог, т.к. там какая то билиберда.


Signal   (2016-04-09 02:23:00) [1]

добавь имя сетевого адаптера,  вот и все включение мозга


Rouse_   (2016-04-08 19:00:00) [2]


> Погроммист   (07.04.16 07:01) [2]
> на win7 64x не работает. Она показывает 8 строчек с иероглифами
> и ни одного мак адреса и вообще ни одного параметра ни у
> одного интерфейса  не определяет.

Так бывает - на то он и пример.
Включи мозг - и эх как все заработает


NoUser   (2016-04-08 16:47:00) [3]

>[1], [2]
IP_ADDRESS_STRING = record
   S: array [0..15] of Char;                                           // <- AnsiChar
 end;

   AdapterName: array [0..MAX_ADAPTER_NAME_LENGTH + 3] of Char;        // <- AnsiChar
   Description: array [0..MAX_ADAPTER_DESCRIPTION_LENGTH + 3] of Char; // <- AnsiChar


Погроммист   (2016-04-07 07:01:00) [4]

на win7 64x не работает. Она показывает 8 строчек с иероглифами и ни одного мак адреса и вообще ни одного параметра ни у одного интерфейса  не определяет.


Rouse_   (2016-04-06 22:22:00) [5]

http://rouse.drkb.ru/network.php#netifenum


Наверх

Титульная страница Поиск, карта сайта Написать письмо