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

Вниз

Как получить 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 вся ветка

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

Наверх




Память: 0.5 MB
Время: 0.027 c
1-1149586836
Dyakon_Frost
2006-06-06 13:40
2006.07.16
Потоки - Загрузка процессора


15-1150263922
Ega23
2006-06-14 09:45
2006.07.16
С Днём рождения! 14 июня


3-1147620877
nopox
2006-05-14 19:34
2006.07.16
Error creating cursor handle-Уважаемые, подскажите,


6-1141205877
Krolevetsky_Dmitry
2006-03-01 12:37
2006.07.16
Перехват потока


6-1141748735
AllBrain
2006-03-07 19:25
2006.07.16
Пиринговые сети -> P2P Help !!!