Главная страница
    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.008 c
15-1150465092
AlexanderMS
2006-06-16 17:38
2006.07.16
Можно ли оптимизировать данный код?


8-1138709076
RBi
2006-01-31 15:04
2006.07.16
Где найти платные/бесплатные библиотеки для работы с PSD?


1-1148994038
TSa
2006-05-30 17:00
2006.07.16
запись в ini файл с правами пользоваля


15-1149789877
kaif
2006-06-08 22:04
2006.07.16
ODBC драйвер для FoxPro2.6


2-1151522230
resuS
2006-06-28 23:17
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский