Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.034 c
1-1121511757
Kreyl
2005-07-16 15:02
2005.08.07
Access Violation при использовании DATA MODULE


6-1114747447
Valera
2005-04-29 08:04
2005.08.07
IdIcmpClient и многопоточность


4-1118064267
Андрей Жук
2005-06-06 17:24
2005.08.07
Добавление строк в COMBOBOEX


14-1121747972
БарЛог
2005-07-19 08:39
2005.08.07
Не про Украину, а про природу =)


6-1114407484
GooGoo
2005-04-25 09:38
2005.08.07
Автозаполнение в FireFox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский