La Web del Programador: Comunidad de Programadores
 
    Pregunta:  38017 - COMO OBTENER LA DIRECCION MAC DE MI TARJETA DE RED
Autor:  sergio spampinato
hola a todos, quisiera saber de que forma puedo obtener la direccion MAC de mi tarjeta de red, les agradeceria si tienen algun codigo en c para sacarla y si no cualquier lenguaje me viene bien o mejor si tienen alguna forma mas estandar asi la puedo sacar con cualquier lenguaje de programacion, es que estoy haciendo un programa en c y necesito alguna forma de obtener esa direccion, saludos y gracias totales

  Respuesta:  Germán Chávez Reátegui
#include "nb30.h"

// enlazar con netapi32.lib

typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff[30];
} ASTAT, * PASTAT;

CString GetMacAddress()
{
ASTAT ast;

NCB ncb;
UCHAR uRetCode;

memset(&ncb, 0, sizeof(ncb));
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = 0;

uRetCode = Netbios(&ncb);
if (uRetCode != 0) {
return "";
}

memset(&ncb, 0, sizeof(ncb));
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = 0;

CString strHost;
TCHAR szComputer[128];
DWORD dwSize = sizeof(szComputer);
if (!GetComputerName(szComputer, &dwSize)) {
return "";
}
strHost = szComputer;
strHost.MakeUpper();

FillMemory(ncb.ncb_callname, NCBNAMSZ - 1, 0x20);

strcpy((char *)ncb.ncb_callname, (LPCTSTR)strHost);

ncb.ncb_callname[strHost.GetLength()] = 0x20;
ncb.ncb_callname[NCBNAMSZ] = 0x0;

ncb.ncb_buffer = (unsigned char *) *
ncb.ncb_length = sizeof(ast);

uRetCode = Netbios(&ncb);
if (uRetCode != 0) {
return "";
}

CString strMacAddress;

strMacAddress.Format(_T("%02X%02X%02X%02X%02X%02X"),
ast.adapt.adapter_address[0],
ast.adapt.adapter_address[1],
ast.adapt.adapter_address[2],
ast.adapt.adapter_address[3],
ast.adapt.adapter_address[4],
ast.adapt.adapter_address[5]
);

return strMacAddress;
}