Hi,
also ich mache das Ganze mit der folgenden Funktion:
Delphi-Quellcode:
function SendARP(const DestIP, SrcIP: in_addr; pMacAddr: PULONG;
var PhyAddrLen: ULONG): DWORD; stdcall;
external 'IPHLPAPI.DLL' name 'SendARP';
function GetMacAddr(const IPv4: String): String;
const
SrcIP: in_addr = (S_addr: 0);
var
DestIP: in_addr;
MacAddr: array[0..5] of Byte;
MacAddrLen, RC: DWORD;
i: Integer;
begin
Result := '';
DestIP.S_addr := inet_addr(PAnsiChar(AnsiString(IPv4)));
MacAddrLen := Length(MacAddr);
RC := SendARP(DestIP,SrcIP,@MacAddr,MacAddrLen);
case RC of
NO_ERROR:
begin
if (MacAddrLen = 6) then
for i := 0 to 5 do begin
if (i > 0) then
Result := Result + ':';
Result := Result + IntToHex(MacAddr[i],2);
end
else
Result := 'Error: MacAddrLen='+IntToStr(MacAddrLen);
end;
ERROR_GEN_FAILURE:
Result := 'MAC-Adresse konnte nicht ermittelt werden. Fehler:' + #13#10 + 'ERROR_GEN_FAILURE';
ERROR_INVALID_PARAMETER:
Result := 'MAC-Adresse konnte nicht ermittelt werden. Fehler:' + #13#10 + 'ERROR_INVALID_PARAMETER';
ERROR_INVALID_USER_BUFFER:
Result := 'MAC-Adresse konnte nicht ermittelt werden. Fehler:' + #13#10 + 'ERROR_INVALID_USER_BUFFER';
ERROR_BAD_NET_NAME:
Result := 'MAC-Adresse konnte nicht ermittelt werden. Fehler:' + #13#10 + 'ERROR_BAD_NET_NAME';
ERROR_BUFFER_OVERFLOW:
Result := 'MAC-Adresse konnte nicht ermittelt werden. Fehler:' + #13#10 + 'ERROR_BUFFER_OVERFLOW';
else
Result := 'Error: RC='+IntToStr(RC);
end;
end;
Klappt bei mir hervorragend.