c++ - una - qué es la dirección mac
C++: ¿Obtener la dirección MAC de los adaptadores de red en Vista? (5)
¿Podrías usar el servicio WMIS ? Sin embargo, lo usé para obtener la mac dirección de una máquina en días previos a la Vista.
Actualmente estamos usando el método NetBios , y funciona bien bajo XP. Las pruebas preliminares en Vista muestran que también funciona, pero hay advertencias: NetBIOS tiene que estar presente, por ejemplo, y por lo que he estado leyendo, el orden de los adaptadores está destinado a cambiar. Nuestro método alternativo - con SNMPExtensionQuery - parece estar roto en Vista.
La pregunta es: ¿conoces una forma confiable de obtener una lista de las direcciones MAC locales en una máquina Vista? La compatibilidad con XP es una ventaja (prefiero tener un solo método que muchos feos # ifdef). ¡Gracias!
Esto le dará una lista de todas las direcciones MAC en su computadora. Funcionará con todas las versiones de Windows también:
void getdMacAddresses(std::vector<std::string> &vMacAddresses;)
{
vMacAddresses.clear();
IP_ADAPTER_INFO AdapterInfo[32]; // Allocate information for up to 32 NICs
DWORD dwBufLen = sizeof(AdapterInfo); // Save memory size of buffer
DWORD dwStatus = GetAdaptersInfo( // Call GetAdapterInfo
AdapterInfo, // [out] buffer to receive data
&dwBufLen); // [in] size of receive data buffer
//No network card? Other error?
if(dwStatus != ERROR_SUCCESS)
return;
PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;
char szBuffer[512];
while(pAdapterInfo)
{
if(pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET)
{
sprintf_s(szBuffer, sizeof(szBuffer), "%.2x-%.2x-%.2x-%.2x-%.2x-%.2x"
, pAdapterInfo->Address[0]
, pAdapterInfo->Address[1]
, pAdapterInfo->Address[2]
, pAdapterInfo->Address[3]
, pAdapterInfo->Address[4]
, pAdapterInfo->Address[5]
);
vMacAddresses.push_back(szBuffer);
}
pAdapterInfo = pAdapterInfo->Next;
}
}
Puede usar WMI en XP y Vista, hay una serie de ejemplos en línea. Por ejemplo: Use Windows Management Instrumentation (WMI) para obtener una dirección MAC
GetAdaptersInfo () es el método oficial, enumera todos los adaptadores, incluso los que están desconectados.
Ver esta publicación por ejemplo código codeguru
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <vector>
#include <Windows.h>
#include <Iphlpapi.h>
#include <Assert.h>
#include <string>
#pragma comment(lib, "iphlpapi.lib")
char* getdMacAddresses()
{
IP_ADAPTER_INFO AdapterInfo[32]; // Allocate information for up to 32 NICs
DWORD dwBufLen = sizeof(AdapterInfo); // Save memory size of buffer
DWORD dwStatus = GetAdaptersInfo( // Call GetAdapterInfo
AdapterInfo, // [out] buffer to receive data
&dwBufLen); // [in] size of receive data buffer
//Exit When Error
if (dwStatus != ERROR_SUCCESS)
return "ERROR";
PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;
char szBuffer[512];
while (pAdapterInfo)
{
if (pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET)
{
sprintf_s(szBuffer, sizeof(szBuffer), "%.2x-%.2x-%.2x-%.2x-%.2x-%.2x"
, pAdapterInfo->Address[0]
, pAdapterInfo->Address[1]
, pAdapterInfo->Address[2]
, pAdapterInfo->Address[3]
, pAdapterInfo->Address[4]
, pAdapterInfo->Address[5]
);
return szBuffer;
}
pAdapterInfo = pAdapterInfo->Next;
}
return "ERROR";
}