Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #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
Poder: 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
  #2  
Antiguo 13-06-2011
henystronic henystronic is offline
Registrado
 
Registrado: nov 2008
Posts: 1
Poder: 0
henystronic Va por buen camino
para delphi 2010

estuve usando la funcion, y corre perfectamente en delphi 7 el problema es que para delphi 2010 no funciona ya que me da error al compilar y es con respecto a que son incompatibles pchar y ansichar; finalmente modifique una variable y funciono perfecto aqui les dejo la funcion;
uses NB30;
Código Delphi [-]
 
function GetMACAdress: string;
var
  NCB: PNCB;
  Adapter: PAdapterStatus;
  URetCode: PChar;
  RetCode: ansichar;
  I: integer;
  Lenum: PlanaEnum;
  _SystemID: string;
  TMPSTR: string;
begin
  Result    := '';
  _SystemID := '';
  Getmem(NCB, SizeOf(TNCB));
  Fillchar(NCB^, SizeOf(TNCB), 0);
  Getmem(Lenum, SizeOf(TLanaEnum));
  Fillchar(Lenum^, SizeOf(TLanaEnum), 0);
  Getmem(Adapter, SizeOf(TAdapterStatus));
  Fillchar(Adapter^, SizeOf(TAdapterStatus), 0);
  Lenum.Length    := chr(0);
  NCB.ncb_command := chr(NCBENUM);
  NCB.ncb_buffer  := Pointer(Lenum);
  NCB.ncb_length  := SizeOf(Lenum);
  RetCode         := Netbios(NCB);
  i := 0;
  repeat
    Fillchar(NCB^, SizeOf(TNCB), 0);
    Ncb.ncb_command  := chr(NCBRESET);
    Ncb.ncb_lana_num := lenum.lana[i];
   RetCode          := Netbios(Ncb);
    Fillchar(NCB^, SizeOf(TNCB), 0);
    Ncb.ncb_command  := chr(NCBASTAT);
    Ncb.ncb_lana_num := lenum.lana[i];
    // Must be 16
    Ncb.ncb_callname := '*               ';
    Ncb.ncb_buffer := Pointer(Adapter);
    Ncb.ncb_length := SizeOf(TAdapterStatus);
    RetCode        := Netbios(Ncb);
    //---- calc _systemId from mac-address[2-5] XOR mac-address[1]...
    if (RetCode = chr(0)) or (RetCode = chr(6)) then
    begin
      _SystemId := IntToHex(Ord(Adapter.adapter_address[0]), 2) + '-' +
        IntToHex(Ord(Adapter.adapter_address[1]), 2) + '-' +
        IntToHex(Ord(Adapter.adapter_address[2]), 2) + '-' +
        IntToHex(Ord(Adapter.adapter_address[3]), 2) + '-' +
        IntToHex(Ord(Adapter.adapter_address[4]), 2) + '-' +
        IntToHex(Ord(Adapter.adapter_address[5]), 2);
    end;
    Inc(i);
  until (I >= Ord(Lenum.Length)) or (_SystemID <> '00-00-00-00-00-00');
  FreeMem(NCB);
  FreeMem(Adapter);
  FreeMem(Lenum);
  GetMacAdress := _SystemID;
end;

Última edición por ecfisa fecha: 13-06-2011 a las 18:12:14. Razón: Etiquetas [DELPHI] [/DELPHI]
Responder Con Cita
  #3  
Antiguo 13-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola henystronic y bienvenido a los foros de Club Delphi.

Primero que nada gracias por acercarnos la solución que encontraste.

Y en segundo término te ruego que encierres entre etiquetas el código incluido en tus mensajes. (en ese caso: [delphi] [/delphi]).
En este enlace tenés el listado de códigos vB con las etiquetas de uso para los diferentes códigos.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 23-03-2012
marcial marcial is offline
Miembro
 
Registrado: may 2003
Posts: 147
Poder: 21
marcial Va por buen camino
Hola a todos:
El problema que tiene el GetMacAdress para identificar un equipo por su tarjeta de red es que si no está el cable conectado no la reconoce (al menos en W7)
¿Conoce alguno la solución?
Muchas Gracias
Marcial
Responder Con Cita
  #5  
Antiguo 23-03-2012
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 20
rretamar Va camino a la famarretamar Va camino a la fama
Un código que usé una vez:

Código Delphi [-]
Function GetPrimaryNicMacAddress: String;
Type
  TGUID = Record
    A, B: word;
    D, M, S: word;
    MAC: Array[ 1..6 ] Of byte;
  End;
Var
  UuidCreateFunc: Function(Var guid: TGUID): HResult; stdcall;
  handle: THandle;
  g: TGUID;
  WinVer: _OSVersionInfoA;
  i: integer;
  //  ErrCode : HResult;
Begin
  Try
    WinVer.dwOSVersionInfoSize := sizeof(WinVer); // Tamaño
    getversionex(WinVer);  // Obtiene info del Windows en uso
    handle := LoadLibrary('RPCRT4.DLL'); // Obtiene el handle de la DLL
    If WinVer.dwMajorVersion >= 5 Then {Windows 2000 ó superior}
      @UuidCreateFunc := GetProcAddress(Handle, 'UuidCreateSequential')
    Else // (Win98 o menor)
      @UuidCreateFunc := GetProcAddress(Handle, 'UuidCreate');
    UuidCreateFunc(g); // Obtiene la info
    Result := '';
    For i := 1 To 6 Do Result := Result + IntToHex(g.MAC[ i ], 2); // Concatena la MAC Address
  Except
    Result := ''; // Resultado nulo
  End;
End;
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.
Responder Con Cita
  #6  
Antiguo 23-03-2012
marcial marcial is offline
Miembro
 
Registrado: may 2003
Posts: 147
Poder: 21
marcial Va por buen camino
Gracias Rretamar, con esta rutina no hace falta tener el cable de red enchufado ni el NB30 en el uses
Responder Con Cita
  #7  
Antiguo 24-03-2012
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 20
rretamar Va camino a la famarretamar Va camino a la fama
Cita:
Empezado por marcial Ver Mensaje
Gracias Rretamar, con esta rutina no hace falta tener el cable de red enchufado ni el NB30 en el uses
¿ Es una pregunta ?

No, no se necesita que la placa de red esté funcionando. Basta con que esté instalada para obtener su dirección MAC.
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.
Responder Con Cita
  #8  
Antiguo 21-03-2013
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 203
Poder: 17
alquimista Va por buen camino
He probado esta rutina y no muestra la mac de la tarjeta de red instalada..

En mi caso tengo instalada una maquina virtual y obtiene la mac de la tarjeta virtual...


Alguien conoce una solución que obtenga la mac de la tarjeta real???
gracias
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Obtener direccion MAC de mi PC artemisa Varios 11 07-10-2010 19:31:28
obtener ip address de un host name PablorD API de Windows 3 20-10-2008 18:34:42
obtener una direccion url rls Varios 1 12-11-2006 16:41:50
Obtener DirecciÓn De Memoria Juan Carlos API de Windows 3 20-04-2005 15:38:42
obtener direccion de la pagina web mary123 Internet 1 03-02-2005 23:08:32


La franja horaria es GMT +2. Ahora son las 00:15:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi