Ver Mensaje Individual
  #1  
Antiguo 28-09-2010
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Reputación: 20
movorack Va camino a la famamovorack Va camino a la fama
Obtener la dirección MAC (MAC ADDRESS)

Se que el tema se ha tratado muchas veces aqui en los foros pero quiero compartir con ustedes unas cuantas lineas de cosas que he podido encontrar aquí y allá y el resultado que he obtenido.

Estaba indagando la forma de obtener un identificador unico por equipo que no fuera aleatorio (como los GUID) y que se mantuviera a lo largo de los constantes formateos. esto no para asuntos de licenciamiento (aunque puede funcionar), mas bien para ser utilizado como identificador en una sesión de clases (educación)

Al final opté por armar una cadena (algo entreversada) con el serial de la bios, el serial del disco y la mac de la ethernet principal; sacar el MD5 de esto y almacenarla en la DB como identificador único por equipo.

Tuve algunos problemas para obtener el serial del disco hasta que encontré los componentes WMI de nuestro compañero *neftalí*. muy buen trabajo por cierto. ... gracias por compartirlo.

Con estos componentes obtuve el serial de la Bios y del Disco duro.

Ahora queria obtener la MAC de la ethernet principal y no lo habia conseguido. todas las indicaciones que encontraba aquí en el foro y fuera de el me llevaban o a crear un GUID o me arrojaban resultados inexactos.

pero luego de echar de aquí y de allá me encontré con una porción de código que hace uso de las Jedi API Header Library para obtener la MAC sin usar netbios.

y aquí les dejo el código para obtener la mac de tu equipo (despues de tanta lora )

Código Delphi [-]
interface

uses .. JwaIpHlpApi, JwaIpTypes .. ;

function get_adapters_info: TStrings;

implementation

..

function get_adapters_info: TStrings;
const
  WIRELESS_ADAPTER = 71;
  ETHERNET_ADAPTER = 6;

var
  NumInterfaces: Cardinal;
  AdapterInfo: array of TIpAdapterInfo;
  OutBufLen: ULONG;
  i: integer;
  mac, Tipo : string;
  AdaptersInfo : TStrings;
begin
  GetNumberOfInterfaces(NumInterfaces);
  SetLength(AdapterInfo, NumInterfaces);
  OutBufLen := NumInterfaces * SizeOf(TIpAdapterInfo);
  GetAdaptersInfo(@AdapterInfo[0], OutBufLen);

  AdaptersInfo := TStringList.Create;

  for i := 0 to NumInterfaces - 1 do begin

    mac := Format('%.2x:%.2x:%.2x:%.2x:%.2x:%.2x',
          [AdapterInfo[i].Address[0], AdapterInfo[i].Address[1],
           AdapterInfo[i].Address[2], AdapterInfo[i].Address[3],
           AdapterInfo[i].Address[4], AdapterInfo[i].Address[5]]);

    case AdapterInfo[i].Type_ of
      WIRELESS_ADAPTER : Tipo := 'WIF';
      ETHERNET_ADAPTER : Tipo := 'ETH';
    end;

    if AdapterInfo[i].Description <> EmptyStr then
      AdaptersInfo.Add(IntToStr(i)
               + ' - ' + Tipo
               + ' - ' + AdapterInfo[i].Description
               + ' - ' + mac);
  end;
  Result := AdaptersInfo;
end;
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita