Добрый день!
Есть задача. Надо узнать какой у машины MAC-адрес сетевой платы. Надо получить чтото типа например 0008a118896a.
Так вот вопрос! Как узнать это програмно.. те прога запускаеться на машине и должна в итоге выдать ShowMessage(/////собственно адрес)
всем спасибо!
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
можно получить список адресов собственной машины или список адресов в подсети. Конкретная машина может иметь несколько сетевых карт (Windows - до 5шт.)
Если нужны мак адреса собственной машины, то перепиши след. функцию:
// получить мои IP адреса (return ErrorCode)
function GetMyIPAddress(ListIP: TStringList): DWORD;
var
//ErrorCode: DWORD;
pAdapterInfo, pAI : PIpAdapterInfo;
AdapterInfo : TIpAdapterInfo;
OutBufLen: ULONG;
s: string;
IpAddrString: TIpAddrString;
begin
try
ListIP.Clear;
// GetAdaptersInfo
// Windows Server 2003 and Windows XP:
// Use the GetAdaptersAddresses function instead of GetAdaptersInfo
//ErrorCode := GetAdaptersAddresses(AF_INET,0,nil, @AdapterAddresses , @OutBufLen);
OutBufLen := 0;
GetMem(pAdapterInfo,sizeof(TIpAdapterInfo));
result := GetAdaptersInfo(pAdapterInfo, OutBufLen);
// если выделили мало памяти - выделить больше
if result = ERROR_BUFFER_OVERFLOW then
begin
FreeMem(pAdapterInfo);
GetMem(pAdapterInfo,OutBufLen);
result := GetAdaptersInfo(pAdapterInfo, OutBufLen);
end;
if result <> NO_ERROR then
begin
FreeMem(pAdapterInfo);
exit;
//Memo1.Lines.Add(GetTextError(result));
end;
// теперь пора выводить информацию
pAI := pAdapterInfo;
WHILE TRUE DO
BEGIN
//Memo1.Lines.Add('-- -- adapter -- --');
//s := pAdapterInfo^.AdapterName;
//Memo1.Lines.Add('AdapterName: '+ pAI^.AdapterName);
//Memo1.Lines.Add('description: '+ pAI^.Description);
//Memo1.Lines.Add('type: '+ IntToStr(pAI^.Type_));
While True Do
Begin
//Memo1.Lines.Add(' -- -- IP -- --');
IpAddrString := pAI^.IpAddressList;
ListIP.Add(IpAddrString.IpAddress.S);
//Memo1.Lines.Add(' IpAddress:'+IpAddrString.IpAddress.S);
if IpAddrString.Next = nil then break;
IpAddrString := IpAddrString.Next^;
End;
if pAI^.Next = nil then break;
pAI := pAI^.Next;
END;
FreeMem(pAdapterInfo);
except
end;
end; // function GetMyIPAddress(ListIP: TGGStringList): DWORD;
а если нужны MAC адреса чужой машины, то это можно сделать не всегда. Я предлагаю в этом случае запросить DHCP server (или несколько серверов).
Код длинный, приводить не стану (я его уже по-моему приводил; ищи ключевое слово 'DHCP').
1. Для всех DHCP получить список подсетей
2. Для подсети получить список клиентов
3. Для клиента смотрим ClientHardwareAddress
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.