Smallweb - домашний сайт
Главная
Автора !
Программирование
Музыка
Фотографии
Гостевая
 
Популярный форум программистов


Храм во имя св. Архистратига Михаила с. Девица


 Программирование> Delphi-инфо> T-004

Определение MAC-адреса сетевой карты - IP Helper

Определение mac-адреса сетевой карты с помощью функции GetAdaptersInfo из библиотеки Iphlpapi.dll.

Этот метод работает под 95/98/Me/NT/2000/XP, а также работает (в отличие от распространенного метода получения mac-адреса через NetBIOS), если компьютер реально не подключен к сети.

Исправлена неточность в описании структуры IP_ADAPTER_INFO.
Спасибо Alekos Sotiropulos
Дата исправления: 28.05.2003

Исправлена ошибка, связанная с перечислением всех сетевых адаптеров.
Спасибо Anatoly Biriuk
Дата исправления: 26.03.2004

program mac;

{$APPTYPE CONSOLE}

uses
  Windows, SysUtils;

const
  MAX_ADAPTER_NAME_LENGTH = 256;
  MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
  MAX_ADAPTER_ADDRESS_LENGTH = 8;

type
//------IP address structures---------------------------------------------------
  PIP_ADDRESS_STRING = ^IP_ADDRESS_STRING;
  IP_ADDRESS_STRING = array[0..15] of char; // IP as string

  PIP_ADDR_STRING = ^IP_ADDR_STRING;
  IP_ADDR_STRING = record
    Next: PIP_ADDR_STRING;
    IpAddress: IP_ADDRESS_STRING;
    IpMask: IP_ADDRESS_STRING;
    Context: DWORD;
  end;
//------ADAPTER INFO STRUCTURES-------------------------------------------------
  PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO;
  IP_ADAPTER_INFO = record
    Next: PIP_ADAPTER_INFO;
    ComboIndex: DWORD;
    AdapterName: array[1..MAX_ADAPTER_NAME_LENGTH + 4] of  char;
    Description: array[1..MAX_ADAPTER_DESCRIPTION_LENGTH + 4] of char;
    AddressLength: UINT;
    Address: array[1..MAX_ADAPTER_ADDRESS_LENGTH] of byte;
    Index: DWORD;
    aType: 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: LongInt;
    LeaseExpires: LongInt;
    SpareStuff: array [1..200] of char;
  end;
						
function  GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO;
  pOutBufLen: PULONG): DWORD; stdcall;
  external 'Iphlpapi.dll' name 'GetAdaptersInfo';

const
  OutBufLen: ULONG = 2000;
  AddrLen = 6;

var
  AdapterInfo: IP_ADAPTER_INFO;
  Result: DWORD;
  i: integer;
  Next: PIP_ADAPTER_INFO;

begin
  writeln;
  writeln('-----------------------------');
  writeln('Network adapter Info');
  writeln('-----------------------------');
  Result:= GetAdaptersInfo(@AdapterInfo, @OutBufLen);
  if Result = 0 then
  begin
    Next:= @AdapterInfo;
    repeat
      writeln('Description: ', Next^.Description);
      write('MAC address: ');
      for i := 0 to AddrLen do
      begin
        write(IntToHex(Next^.Address[i], 2));
        if i <> AddrLen then write('-');
      end;
      Next:= Next^.Next; // переходим к следующему адаптеру
      writeln; writeln;
    until Next = nil;
  end
  else writeln('Error. Result code: ', Result);
  write('Press <Enter>  to continue...');
  readln;
end.
 Реклама

Здесь должна быть
Ваша

реклама

Copyright ©2003 by SmaLL
Пишите письма: smallweb@narod.ru
ICQ #177228299



Сайт управляется системой uCoz