C/Visual C - Como leer el MAC Address

 
Vista:

Como leer el MAC Address

Publicado por Diego G. Ruiz (41 intervenciones) el 16/08/2002 17:21:18
¿Alguien sabe de que manera puedo leer el MAC address de una placa de red en C/C++ bajo plataformas Windows?

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Lectura de la dirección MAC de una placa de red en Windows

Publicado por Alejandro (980 intervenciones) el 14/03/2025 18:07:08
Para leer la dirección MAC de una placa de red en C/C++ bajo plataformas Windows, puedes utilizar la API de Windows, específicamente la función `GetAdaptersAddresses`. A continuación, te muestro un ejemplo de cómo hacerlo:

Ejemplo de código en C++



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <iphlpapi.h>
#include <windows.h>
#include <vector>
 
#pragma comment(lib, "iphlpapi.lib")
 
void printMACAddresses() {
    ULONG outBufLen = 15000;
    std::vector<BYTE> buffer(outBufLen);
    ULONG flags = GAA_FLAG_INCLUDE_PREFIX;
    ULONG family = AF_UNSPEC; // IPv4 o IPv6
 
    // Llamada a GetAdaptersAddresses
    DWORD dwRetVal = GetAdaptersAddresses(family, flags, NULL, (IP_ADAPTER_ADDRESSES*)buffer.data(), &outBufLen);
    if (dwRetVal == NO_ERROR) {
        IP_ADAPTER_ADDRESSES* pAdapterAddresses = (IP_ADAPTER_ADDRESSES*)buffer.data();
        for (IP_ADAPTER_ADDRESSES* pCurrAdapter = pAdapterAddresses; pCurrAdapter != NULL; pCurrAdapter = pCurrAdapter->Next) {
            std::cout << "Nombre del adaptador: " << pCurrAdapter->AdapterName << std::endl;
            std::cout << "Dirección MAC: ";
            for (int i = 0; i < pCurrAdapter->PhysicalAddressLength; i++) {
                printf("%02X", pCurrAdapter->PhysicalAddress[i]);
                if (i < pCurrAdapter->PhysicalAddressLength - 1) {
                    std::cout << "-";
                }
            }
            std::cout << std::endl << std::endl;
        }
    } else {
        std::cerr << "Error al obtener las direcciones de los adaptadores: " << dwRetVal << std::endl;
    }
}
 
int main() {
    printMACAddresses();
    return 0;
}

Explicación del código:


1. Incluir las bibliotecas necesarias: Se incluyen las bibliotecas `iphlpapi.h` y `windows.h` para acceder a las funciones de la API de Windows.
2. Definir el tamaño del buffer: Se define un buffer para almacenar la información de los adaptadores.
3. Llamar a `GetAdaptersAddresses`: Esta función se utiliza para obtener la lista de adaptadores de red y sus direcciones MAC.
4. Recorrer los adaptadores: Se recorre la lista de adaptadores y se imprime el nombre del adaptador y su dirección MAC en formato hexadecimal.

Consideraciones:


- Asegúrate de tener los permisos necesarios para ejecutar el programa, ya que puede requerir privilegios de administrador.
- Este código es un punto de partida y puede ser adaptado según tus necesidades específicas.

¡Buena suerte, Diego!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar