Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.07;
Скачать: CL | DM;

Вниз

MAC адрес сетевой платы   Найти похожие ветки 

 
O.O   (2005-04-22 11:56) [0]

Как узнать MAC адреса сетевых плат своего компьютера ?


 
dmitry501 ©   (2005-04-22 12:11) [1]

на
http://community.borland.com/article/0,1410,26040,00.html
описано 3 метода


 
Alex Konshin ©   (2005-04-22 12:27) [2]

Второй просто неверен начиная с не помню какой версии Windows.
CoCreateUUID уже нельзя использовать для определения MAC-address.
В дополнение появилась другая функция, которая выдает GUID с одними и теми же байтами на месте, где раньше был MAC, но это все равно не MAC.
MAC можно достать используя IPHelper API, если мне память не изменяет. Также можно достать через Winsock2 используя IPX/SPX (если они установлены).
Короче, способов много, но простых, в одну функцию, уже больше нет.


 
O.O   (2005-04-22 12:28) [3]

А примеры для Delphi имеются ?


 
Alex Konshin ©   (2005-04-22 12:33) [4]

Ну посмотрите GetAdaptersInfo, по-моему это то, что нужно.


 
dmitry501 ©   (2005-04-22 12:38) [5]

Есть еще Win32_NetworkAdapterConfiguration в WMI


 
O.O   (2005-04-22 12:55) [6]

Спасибо, попробую разобраться


 
volser   (2005-04-23 14:28) [7]

>dmitry501 ©

Второй способ тоже будет пахать, если вместо CoCreateGuid использовать функцию UuidCreateSequential.


 
Alex Konshin ©   (2005-04-23 17:05) [8]

А ты попробуй. Я именно ее и имел в виду. Там все равно не MAC.


 
O.O   (2005-04-25 07:26) [9]

Чёйто не нашёл ничего у себя в хелпе, у меня D6


 
dmitry501 ©   (2005-04-25 09:29) [10]

O.O   (25.04.05 7:26) [9]
Все просто- создай файлик mac.vbs с таким содержимым:
  set objLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
  set objService = objLocator.ConnectServer (server, "", username, password)
  strQuery = _
     "Select MACAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE"
  set objEnumerator = objService.ExecQuery(strQuery)
  for each obj in objEnumerator
       if Not IsNull(obj.MACAddress) then
               WScript.Echo obj.MACAddress(i)
       end if
  next

И запусти его.


 
O.O   (2005-04-25 10:38) [11]

Работает, у меня две сетевухи на компе вроде показал два разных адреса (правда по 2 раза). Но как это в Delphi использовать?


 
dmitry501 ©   (2005-04-25 11:12) [12]

O.O   (25.04.05 10:38) [11]
Вот нашел на форуме и переделал:

program Mac_address;

{$APPTYPE CONSOLE}

uses
Windows, SysUtils;

const
IPHelper = "iphlpapi.dll";
MAX_ADAPTER_NAME_LENGTH        = 256;
MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
MAX_ADAPTER_ADDRESS_LENGTH     = 8;

type
time_t = Longint;

// Структуры для выполнения GetAdaptersInfo
PIP_MASK_STRING = ^IP_MASK_STRING;
IP_ADDRESS_STRING = record
  S: array [0..15] of Char;
end;
IP_MASK_STRING = IP_ADDRESS_STRING;

PIP_ADDR_STRING = ^IP_ADDR_STRING;
IP_ADDR_STRING = record
  Next: PIP_ADDR_STRING;
  IpAddress: IP_ADDRESS_STRING;
  IpMask: IP_MASK_STRING;
  Context: DWORD;
end;

PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO;
IP_ADAPTER_INFO = record
  Next: PIP_ADAPTER_INFO;
  ComboIndex: DWORD;
  AdapterName: array [0..MAX_ADAPTER_NAME_LENGTH + 3] of Char;
  Description: array [0..MAX_ADAPTER_DESCRIPTION_LENGTH + 3] of Char;
  AddressLength: UINT;
  Address: array [0..MAX_ADAPTER_ADDRESS_LENGTH - 1] of BYTE;
  Index: DWORD;
  Type_: UINT;
  DhcpEnabled: UINT;
  CurrentIpAddress: PIP_ADDR_STRING;
  IpAddressList: IP_ADDR_STRING;
  GatewayList: IP_ADDR_STRING;
  DhcpServer: IP_ADDR_STRING;
  HaveWins: BOOL;
  PrimaryWinsServer: IP_ADDR_STRING;
  SecondaryWinsServer: IP_ADDR_STRING;
  LeaseObtained: time_t;
  LeaseExpires: time_t;
end;

// При помощи данной функции мы определим наличие сетевых интерфейсов
// на локальном компьютере и информацию о них
function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO; var pOutBufLen: ULONG): DWORD; stdcall; external IPHelper;

function Dim2Hex(what:array of byte;len:integer):string;
var i : integer;
   b : byte;
begin
    Result:="";
    for i:=0 to len-1 do begin
      b:=what[i];
      Result := Result+inttohex(b,2)+".";
    end;
    Delete(Result,Length(Result),1);
end;

var
InterfaceInfo,
TmpPointer: PIP_ADAPTER_INFO;
IP: PIP_ADDR_STRING;
Len: ULONG;
begin
 // Читаем все IP адреса со всех присутствующих
 // в системе сетевых интерфейсов
 // Смотрим сколько памяти нам требуется?
 if GetAdaptersInfo(nil, Len) = ERROR_BUFFER_OVERFLOW then
 begin
  // Берем нужное кол-во
  GetMem(InterfaceInfo, Len);
  try
    // выполнение функции
    if GetAdaptersInfo(InterfaceInfo, Len) = ERROR_SUCCESS then
    begin
      // Перечисляем все сетевые интерфейсы
      TmpPointer := InterfaceInfo;
      repeat
        // перечисляем все IP адреса каждого интерфейса
        IP := @TmpPointer.IpAddressList;
        repeat
          Writeln(Format("%s - %s - %s",
            [IP.IpAddress.S, Dim2Hex(TmpPointer.Address,TmpPointer.AddressLength),TmpPointer.Description]));
          IP := IP.Next;
        until IP = nil;
        TmpPointer := TmpPointer.Next;
      until TmpPointer = nil;
    end;
  finally
    // Освобождаем занятую память
    FreeMem(InterfaceInfo);
  end;
end;

end.

Этот код базируется на коде Rouse_ © http://delphimaster.net/view/6-1107518050/&&DI=293&IG=9270ab3cf77642df8a8ef22e5f3fe8b3&POS=2&CM=W PU&CE=2&CS=AWP&SR=2


 
O.O   (2005-04-25 12:17) [13]

Спасибо !!! Всё великолепно получилось.  Радует и то что результат сходится и в VB и в Delphi, значит он правильный


 
dmitry501 ©   (2005-04-25 12:21) [14]

O.O   (25.04.05 12:17) [13]
пожалуйста. А проверить очень просто в WinXP. В сетевых подключениях на иконке соединенгия правий кликни и выбери - "Состояние", потом "Поддержка" и "Подробности". Там отражается MAC в строке "Физический адрес"



Страницы: 1 вся ветка

Текущий архив: 2005.08.07;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.025 c
4-1118335938
Ertong
2005-06-09 20:52
2005.08.07
RC-файлы


4-1118381920
KarpUha
2005-06-10 09:38
2005.08.07
Опять модем и Delphi


3-1120106877
W
2005-06-30 08:47
2005.08.07
Перемещение по DBGrid средней кнопкой мыши


9-1113983835
lifo
2005-04-20 11:57
2005.08.07
Алгоритм сравневаия рисунков


4-1118400248
Андрей Жук
2005-06-10 14:44
2005.08.07
Я чего-то не понимаю?