mrVerus, Заниматься засылом АРП пакетов и раскорячивать ответ мне лениво так что просто шлем запрос и получаем из структуры ответа МАК, после чего превращаем в удобоваримую форму
| Код | uses Winsock;
function SendARP(const DestIP, SrcIP: ULONG; pMacAddr: PULONG; var PhyAddrLen: ULONG): DWORD; stdcall; external 'IPHLPAPI.DLL';
type TMacAddress = array [1..6] of byte;
function GetMAC(Value: TMacAddress; Length: DWORD): String; var I: Integer; begin if Length = 0 then Result := '00-00-00-00-00-00' else begin Result := ''; for i:= 0 to Length - 2 do Result := Result + IntToHex(Value[i], 2) + '-'; Result := Result + IntToHex(Value[Length-1], 2); end; end;
procedure TForm1.Button1Click(Sender: TObject); var DestIP, SrcIP: ULONG; pMacAddr: TMacAddress; PhyAddrLen: ULONG; begin DestIP := inet_addr('192.168.0.254'); PhyAddrLen := 6; SendArp(DestIP, 0, @pMacAddr, PhyAddrLen); Form1.Caption := GetMAC(pMacAddr, PhyAddrLen); end;
|
Естественно, что ты можешь определить MAC только внутри своей подсети... И естественно что записи 127.0.0.1 в АРП таблице нету, т.е. определить собственный МАК по 127.0.0.1 не получиться, придется указывать истинный ИП |