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

Вниз

MAC-адрес   Найти похожие ветки 

 
apic ©   (2006-08-15 17:30) [0]

Как узнать MAC-адрес сетевухи, программно разумеется...
Заранее СПАСИБО!!!


 
Отец Кондратий   (2006-08-16 06:14) [1]

Без проблем. Есть несколько возможных реализаций. Вот одна, может не самая лучшая, но позволяет узнать всё про все адаптеры:


uses Windows, IpHlpAPI, WinSock2, IpRtrMib, Iptypes, IpIfConst;
...
type
// Структуры для выполнения GetAdaptersInfo
 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;             // Pointer to the next IP_ADDR_STRING structure in the list.
   IpAddress: IP_ADDRESS_STRING;      // Specifies a structure type with a single member, String.
                                      // The String member is a char array of size 16. This array holds the IP address.
   IpMask: IP_MASK_STRING;            // Specifies a structure type with a single member, String.
                                      //The String member is a char array of size 16. This array holds
                                      //the IP address mask.
   Context: DWORD;                    // Network table entry (NTE). This value corresponds to the NTEContext
                                      //parameters in the AddIPAddress and DeleteIPAddress functions.
end;
...
type
PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO;
 IP_ADAPTER_INFO = record
   Next: PIP_ADAPTER_INFO;                //Pointer to the next adapter in the list of adapters.
   ComboIndex: DWORD;                     //Reserved.
   AdapterName: array [0..MAX_ADAPTER_NAME_LENGTH + 3] of Char;        //Name of the adapter.
   Description: array [0..MAX_ADAPTER_DESCRIPTION_LENGTH + 3] of Char; //Description for the adapter.
   AddressLength: UINT;                   //Length of the hardware address for the adapter.
   Address: array [0..MAX_ADAPTER_ADDRESS_LENGTH - 1] of BYTE;         //Hardware address for the adapter.
   Index: DWORD;                          // Adapter index. The adapter index may change when an adapter is
                                          //disabled and then enabled, or under other circumstances,
                                          //and should not be considered persistent.

   Type_: UINT;                           // Adapter type. The type must be of the following values:
                                          // MIB_IF_TYPE_OTHER
                                          // MIB_IF_TYPE_ETHERNET
                                          // MIB_IF_TYPE_TOKENRING
                                          // MIB_IF_TYPE_FDDI
                                          // MIB_IF_TYPE_PPP
                                          // MIB_IF_TYPE_LOOPBACK
                                          // MIB_IF_TYPE_SLIP
                                          // These values are defined in the header file IPIfCons.h.

   DhcpEnabled: UINT;                     // Specifies whether dynamic host configuration protocol
                                          //(DHCP) is enabled for this adapter.
   CurrentIpAddress: PIP_ADDR_STRING;     // Reserved.
   IpAddressList: IP_ADDR_STRING;         // List of IP addresses associated with this adapter.
   GatewayList: IP_ADDR_STRING;           // IP address of the default gateway for this adapter.
   DhcpServer: IP_ADDR_STRING;            // IP address of the DHCP server for this adapter. A value of
                                          //255.255.255.255 indicates the DHCP server could not be reached,
                                          // or is in the process of being reached.
   HaveWins: BOOL;                        // Specifies whether this adapter uses Windows Internet Name Service (WINS).
   PrimaryWinsServer: IP_ADDR_STRING;     // IP address of the primary WINS server.
   SecondaryWinsServer: IP_ADDR_STRING;   // IP address of the secondary WINS server.
   LeaseObtained: time_t;                 // Time when the current DHCP lease was obtained.
   LeaseExpires: time_t;                  // Time when the current DHCP lease expires.
end;

function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO; var pOutBufLen: ULONG): DWORD;stdcall; external "iphlpapi.dll";
...
...
function PhysAddrToString(Length: DWORD; PhysAddr: TPhysAddrByteArray): string;
var
 I: Integer;
begin
 Result := "";
 if Length = 0
 then Exit;
 for I := 0 to Length - 1 do
   if I = Integer(Length - 1)
   then Result := Result + Format("%.2x", [PhysAddr[I]])
   else Result := Result + (Format("%.2x-", [PhysAddr[I]]));
end;

function EnumAdapters:Integer;
var Size:ULONG;
   Adapter,Adapters:PIP_ADAPTER_INFO;
   IP:PIP_ADDR_STRING;
   IPAddress:String;
begin
 Result := 0;
 Size := 0;
 MForm.AdapterBox.Items.Clear;
 MForm.IPAddressBox.Items.Clear;
 MForm.NICindex.Items.Clear;
 if GetAdaptersInfo(nil,Size) <> ERROR_BUFFER_OVERFLOW
 then Exit;
 Adapters := AllocMem(Size);
 TRY
   if GetAdaptersInfo(Adapters,Size) = NO_ERROR
   then begin
          Adapter := Adapters;
          while Adapter <> nil do
          begin
            if Adapter.Type_ = MIB_IF_TYPE_ETHERNET // Ну или какую там тебе надо...
            then begin
                   IP := @Adapter.IpAddressList;
                   MForm.NICindex.Items.Add(IntToStr(Adapter.Index));
                   IPAddress := "";
                   repeat
                     IPAddress := IPAddress + (Format("%s  ",[IP^.IpAddress.S]));
                     IP := IP.Next;
                   until IP = nil;
                   MForm.AdapterBox.Items.Add(Adapter.AdapterName);
                   MForm.DescAdapterBox.Items.Add(Adapter.Description);
                   MForm.IPAddressBox.Items.Add(IPAddress);
                   MForm.MACbox.Items.Add(PhysAddrToString(6, TPhysAddrByteArray(Adapter.Address)));
                   Inc(Result);
                 end;
            Adapter := Adapter^.Next;
          end;
        end;
 FINALLY
   FreeMem(Adapters);
 END;
end;

А вообще тут много раз уже проскакивали подобные запросы... Всех отправляли RTFM.


 
apic ©   (2006-08-17 18:01) [2]

Отец Кондратий, ты "красавчик"!


 
Микс   (2006-10-22 22:43) [3]

А вы не могли бы написать как в С++ Builder это выглядит?


 
piople ©   (2006-10-24 09:21) [4]

есть гараздо удобнее функции...


 
Микс   (2006-10-24 18:02) [5]

piople ты помочь можешь с С++ Builder ?


 
Falcao   (2006-10-24 21:53) [6]

"есть гараздо удобнее функции..." - точнее, наверное, СПОСОБЫ=)
Например, через getsockopt, Netbios(NCB *).
Микс, а на МСДН зайти лень? =)))
Вот рабочий пример :Р
http://www.sysman.ru/index.php?showtopic=7350


 
Микс   (2006-10-24 23:57) [7]

Очень много ошибок в этом коде
[C++ Error] Unit1.cpp(58): E2451 Undefined symbol "Memo1"
[C++ Error] Unit1.cpp(59): E2316 "Desc_ription" is not a member of "_IP_ADAPTER_INFO"
[C++ Warning] Unit1.cpp(61): W8012 Comparing signed and unsigned values
[C++ Error] Unit1.cpp(70): E2134 Compound statement missing }
[C++ Warning] Unit1.cpp(70): W8070 Function should return a value


 
Falcao   (2006-10-25 10:03) [8]

Микс, если ты не знаешь что такое Мемо1 и как исправить "Desc_ription"(читай внимательнее весь тот топик!).... то ... тебе очень трудно будет помочь. Начни с азов программирования/проектирования в RAD-системе Borland C++ Builder (VCL Win32) :D .
Микс, обсуждение того кода должно вестись там, где он собссно есть.
___
Уважаемые учаснеги ДельфиМастер, прошу прощения...


 
Микс   (2006-10-26 11:31) [9]

Falcao всё в норме, не надо меня поссылать в такую дать, бывает торможу. Праздники всякие мешаю работе =))



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

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

Наверх




Память: 0.5 MB
Время: 0.048 c
15-1174666572
Andy BitOff
2007-03-23 19:16
2007.04.15
Тут проскакивала ссылка...


2-1174605776
dreamse
2007-03-23 02:22
2007.04.15
Преобразовать руские буквы для поиска в google


2-1174759416
kominet
2007-03-24 21:03
2007.04.15
связь с файлом *mdb через интернет


2-1174954591
Wood
2007-03-27 04:16
2007.04.15
TRichEdit, свойства текста..


2-1174879808
sergeyxxx
2007-03-26 07:30
2007.04.15
Работа с принтером