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

Вниз

Как получить MAC-адреса сетевых плат или другой способ   Найти похожие ветки 

 
Untermensch   (2006-04-03 16:35) [0]

отличить два компьютра в сети, независимо от ОС.


 
Fay ©   (2006-04-03 18:01) [1]

2 Untermensch   (03.04.06 16:35)
А в сети нет компьютеров. Так что отличать придётся адреса - этого обычно достаточно.


 
Untermensch   (2006-04-03 19:05) [2]

Хорошо, тогда как их получить ?


 
Rouse_ ©   (2006-04-03 21:01) [3]

Поставь вопрос нормально, тебе хто нужен то? МАС адрес? Кого мас адрес?
Ты же не можешь в программе написать - хочу знать МАС вооон того компа...
Какие входные данные имеешь?


 
Untermensch   (2006-04-04 12:07) [4]

Нужен MAC адрес основной сетевой платы текущего компа (на котором прога работает), или список всех мак-адресов установленных сетевых контроллеров (чтоб не определять через кого куда пакеты ходят) я так понимаю в этот список попадут ещё и 1394 и ещё какие нить сетевые контроллеры ? Я могу найди индексы их классов по реестру, но там в параметрах есть тока IP маски и таймауты и идентификаторы слотов PCI, а мак адресов нет, там правда есть два странных поля T1 и T2 с непонятными данными. Кроме того этих веток в Win98 нет.


 
Rouse_ ©   (2006-04-04 12:26) [5]

так бы сразу и сказал:

////////////////////////////////////////////////////////////////////////////////
//
//  ****************************************************************************
//  * Project   : NetIfEnum
//  * Unit Name : uMain
//  * Purpose   : Получение информации о установленных сетевых интерфейсах.
//  * Author    : Александр (Rouse_) Багель
//  * Version   : 1.00
//  ****************************************************************************
//

unit uMain;

interface

uses
 Windows, SysUtils, Classes, Controls, Forms, ComCtrls;

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

 // Типы адаптеров
 MIB_IF_TYPE_OTHER     = 1;
 MIB_IF_TYPE_ETHERNET  = 6;
 MIB_IF_TYPE_TOKENRING = 9;
 MIB_IF_TYPE_FDDI      = 15;
 MIB_IF_TYPE_PPP       = 23;
 MIB_IF_TYPE_LOOPBACK  = 24;
 MIB_IF_TYPE_SLIP      = 28;

type
 // Структуры для выполнения GetAdaptersInfo
 time_t = Longint;

 IP_ADDRESS_STRING = record
   S: array [0..15] of Char;
 end;
 IP_MASK_STRING = IP_ADDRESS_STRING;
 PIP_MASK_STRING = ^IP_MASK_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;

 TfrmEnumNetInterfaces = class(TForm)
   tvInterfaces: TTreeView;
   procedure FormCreate(Sender: TObject);
 private
   procedure ReadLanInterfaces;
 end;

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

var
 frmEnumNetInterfaces: TfrmEnumNetInterfaces;

implementation

{$R *.dfm}

// Читаем все IP адреса со всех присутствующих
// в системе сетевых интерфейсов
procedure TfrmEnumNetInterfaces.ReadLanInterfaces;

 function MACToStr(Addr: array of Byte; Len: Integer): String;
 var
   I: Integer;
 begin
   if Len = 0 then Result := "00-00-00-00-00-00" else
   begin
     Result := "";
     for I := 0 to Len - 2 do
       Result := Result + IntToHex(Addr[I], 2) + "-";
     Result := Result + IntToHex(Addr[Len - 1], 2);
   end;
 end;

 function TimeToDateTimeStr(Value: Integer): String;
 const
   UnixDateDelta = 25569; // количество дней между 12.31.1899 и 1.1.1970
   MinPerDay = 24 * 60;
   SecPerDay = 24 * 60 * 60;
 var
   Data: TDateTime;
   TimeZoneInformation: TTimeZoneInformation;
   AResult: DWORD;
 begin
   Result := "";
   if Value = 0 then Exit;

   // Формат Unix-ового TIME_T кол-во секунд от 1.1.1970
   Data := UnixDateDelta + (Value / SecPerDay);
   AResult := GetTimeZoneInformation(TimeZoneInformation);
   case AResult of
     TIME_ZONE_ID_INVALID: RaiseLastOSError;
     TIME_ZONE_ID_STANDARD:
     begin
       Data := Data - ((TimeZoneInformation.Bias +
         TimeZoneInformation.StandardBias) / MinPerDay);
       Result := DateTimeToStr(Data) + " " +
         WideCharToString(TimeZoneInformation.StandardName);
     end;
   else
     Data := Data - ((TimeZoneInformation.Bias +
       TimeZoneInformation.DaylightBias) / MinPerDay);
     Result := DateTimeToStr(Data) + " " +
       WideCharToString(TimeZoneInformation.DaylightName);
   end;
 end;


 
Rouse_ ©   (2006-04-04 12:27) [6]

var
 InterfaceInfo,
 TmpPointer: PIP_ADAPTER_INFO;
 IP: PIP_ADDR_STRING;
 Len: ULONG;
 AdapterTree, IPAddrTree, DHCPTree, WinsTree: TTreeNode;
 AdapterType: String;
begin
 // Смотрим сколько памяти нам требуется?
 if GetAdaptersInfo(nil, Len) = ERROR_BUFFER_OVERFLOW then
 begin
   // Берем нужное кол-во
   GetMem(InterfaceInfo, Len);
   try
     // выполнение функции
     if GetAdaptersInfo(InterfaceInfo, Len) = ERROR_SUCCESS then
     begin
       // Перечисляем все сетевые интерфейсы
       TmpPointer := InterfaceInfo;
       repeat
         // Имя сетевого интерфейса
         AdapterTree := tvInterfaces.Items.Add(nil, "Adapted: " + TmpPointer^.AdapterName);
         // Описание сетевого интерфейса
         tvInterfaces.Items.AddChild(AdapterTree, "Description: " + TmpPointer^.Description);
         // МАС Адрес
         tvInterfaces.Items.AddChild(AdapterTree, "МАС: " +
           MACToStr(TmpPointer^.Address, TmpPointer^.AddressLength));
         // Индекс адаптера в списке
         tvInterfaces.Items.AddChild(AdapterTree, "Index: " +
           IntToStr(TmpPointer^.Index));
         // Тип адаптера
         case TmpPointer^.Type_ of
           MIB_IF_TYPE_OTHER:      AdapterType := "MIB_IF_TYPE_OTHER";
           MIB_IF_TYPE_ETHERNET:   AdapterType := "MIB_IF_TYPE_ETHERNET";
           MIB_IF_TYPE_TOKENRING:  AdapterType := "MIB_IF_TYPE_TOKENRING";
           MIB_IF_TYPE_FDDI:       AdapterType := "MIB_IF_TYPE_FDDI";
           MIB_IF_TYPE_PPP:        AdapterType := "MIB_IF_TYPE_PPP";
           MIB_IF_TYPE_LOOPBACK :  AdapterType := "MIB_IF_TYPE_LOOPBACK";
           MIB_IF_TYPE_SLIP :      AdapterType := "MIB_IF_TYPE_SLIP";
         else
           AdapterType := "Unknown";
         end;
         tvInterfaces.Items.AddChild(AdapterTree, "Type: " + AdapterType);
         // определение активности DHCP
         if Boolean(TmpPointer^.DhcpEnabled) then
         begin
           DHCPTree := tvInterfaces.Items.AddChild(AdapterTree, "DHCP: Enabled");
           // Адрес DHCP сервера
           tvInterfaces.Items.AddChild(DHCPTree, "DHCP IP Addr: " +
             String(TmpPointer^.DhcpServer.IpAddress.S));
           // Время получения данных от сервера
           tvInterfaces.Items.AddChild(DHCPTree, "LeaseObtained: " +
             TimeToDateTimeStr(TmpPointer^.LeaseObtained));
           // Время устаревания данных от сервера
           tvInterfaces.Items.AddChild(DHCPTree, "LeaseExpires: " +
             TimeToDateTimeStr(TmpPointer^.LeaseExpires));
         end
         else
           tvInterfaces.Items.AddChild(AdapterTree, "DHCP: Disabled");

         // перечисляем все IP адреса интерфейса
         IP := @TmpPointer.IpAddressList;
         IPAddrTree := tvInterfaces.Items.AddChild(AdapterTree, "IP Addreses:");
         repeat
           tvInterfaces.Items.AddChild(IPAddrTree, Format("IP: %s, SubNetMask: %s",
             [String(IP^.IpAddress.S), String(IP^.IpMask.S)]));
           IP := IP.Next;
         until IP = nil;

         // основной шлюз:
         tvInterfaces.Items.AddChild(AdapterTree, "Default getaway: " +
           TmpPointer^.GatewayList.IpAddress.S);

         // Windows Internet Name Service
         if TmpPointer^.HaveWins then
         begin
           WinsTree := tvInterfaces.Items.AddChild(AdapterTree, "WINS: Enabled");
           // основной WINS
           tvInterfaces.Items.AddChild(WinsTree, "PrimaryWinsServer: " +
             String(TmpPointer^.PrimaryWinsServer.IpAddress.S));
           // запасной WINS
           tvInterfaces.Items.AddChild(WinsTree, "SecondaryWinsServer: " +
             String(TmpPointer^.SecondaryWinsServer.IpAddress.S));
         end
         else
           tvInterfaces.Items.AddChild(AdapterTree, "WINS: Disabled");

         TmpPointer := TmpPointer.Next;
       until TmpPointer = nil;
     end;
   finally
     // Освобождаем занятую память
     FreeMem(InterfaceInfo);
   end;
 end;
end;

procedure TfrmEnumNetInterfaces.FormCreate(Sender: TObject);
begin
 ReadLanInterfaces;
end;

end.


Целиком можешь забрать отсюда: http://rouse.front.ru/netifenum.zip


 
Untermensch   (2006-04-04 12:32) [7]

Пасибо огромное!



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

Форум: "WinAPI";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.009 c
2-1151650837
Вьюга
2006-06-30 11:00
2006.07.16
Формы в Delphi


15-1150388813
Nobody_1988
2006-06-15 20:26
2006.07.16
Стоит ли разбираться в .NET?


15-1150564169
TUser
2006-06-17 21:09
2006.07.16
Это сделали взрослые


15-1150533422
grisme
2006-06-17 12:37
2006.07.16
Вопрос по WinSock


3-1147781026
p_evghenii
2006-05-16 16:03
2006.07.16
Помогите составить запрос





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский