![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить 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