Ver Mensaje Individual
  #1  
Antiguo 05-07-2012
barakuda barakuda is offline
Miembro
 
Registrado: mar 2010
Posts: 79
Reputación: 15
barakuda Va por buen camino
Averiguar MAC por una IP

Hola buenas tardes;

Estoy desarroyando un programa y para ello me pasaron un codigo delcuan estoy aprendiendo pero me ocurre una cosa y la verdad no lo entiendo por ello recurro a ustedes por si me pueden echar una mano, el codigo es el siguiente:

Código Delphi [-]
    uses winsock;
    type
    PULONG = ^ULONG;
    function SendARP(DestIP,SrcIP: in_addr; pMacAddr,PhyAddrLen: PULONG): DWORD;
    stdcall; external 'iphlpapi.dll' name 'SendARP';
    function ObtenerMAC(IP: String): String;
    var
    i: Integer;
    dwRetVal: DWORD;
    DestIp, SrcIp: in_addr;
    MacAddr: array[0..1] of ULONG;
    PhysAddrLen: ULONG;
    PhysAddr: PByte;
    begin
    DestIp.S_addr:= 0;
    SrcIp.S_addr:= 0;
    PhysAddrLen:= 6;
    DestIp.S_addr:= inet_addr(PChar(IP));
    dwRetVal:= SendARP(DestIp, SrcIp, @MacAddr, @PhysAddrLen);
    Result:= EmptyStr;
    if dwRetVal = NO_ERROR then
    begin
    PhysAddr:= PByte(@MacAddr);
    for i := 1 to Sizeof(MacAddr)-2 do
    begin
    if Result= EmptyStr then
    Result:= IntToHex(PhysAddr^,2)
    else
    Result:= Result + '-' + IntToHex(PhysAddr^,2);
    inc(PhysAddr);
    end;
    end;
    end;
    // Por ejemplo
    ShowMessage(ObtenerMAC('143.1.14.202'));

La linea 22 la modifique por -> DestIp.S_addr:= inet_addr(PAnsiChar(IP));
El caso es que si sustituyo inet_addr(PAnsiChar(IP)) por inet_addr(PAnsiChar('143.1.14.202')) al ejecutar el programa me da la MAC correcta, sin embargo si en su lugar lo
sustituyo por inet_addr(PAnsiChar(edit1.text)) ejecuto el programa, introduzco en el campo edit la misma ip pero al clicar en el botón que llama a la función el programa me muestra en blanco el campo MAC.

y es aquí don de me pierdo, necesito que el programa me permita introducir cualquier IP y que este me diga su MAC ¿que estoy haciendo mal?

gracias por adelantado

Última edición por Casimiro Notevi fecha: 05-07-2012 a las 18:27:18.
Responder Con Cita