Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi MAC-Adresse im LAN anhand der IP / des Namens erhalten (https://www.delphipraxis.net/64292-mac-adresse-im-lan-anhand-der-ip-des-namens-erhalten.html)

ManuMF 1. Mär 2006 19:35


MAC-Adresse im LAN anhand der IP / des Namens erhalten
 
Hallo,

ich schreibe mir gearde ein WakeOnLAN-Tool. Es soll auch die MAC-Adresse anhand einer IP oder eines Rechnernamens ermitteln können. Ich habe hier im Forum gesucht, und als "passendstes" Thema dieses gefunden. Dort sind 2 Lösungen beschrieben: Über arp und NetBIOS. Letzteres funktioniert, aber nur bei meinem PC, nicht bei anderen, z.B. unserem Netzwerkdrucker. Wenn ich ihn anpinge, wird die Adresse bei "arp -a" angezeigt.

Wie kann ich nun auch bei anderen Geräten mit Delphi die Adresse herausfinden? Mit der Lösung über arp im o.g. Thema komme ich leider nicht klar :-(

Danke,
ManuMF

[edit]Neue Erkenntnisse: liegt nicht nur am Netzwerkdrucker[/edit]

Klaus01 1. Mär 2006 20:29

Re: MAC-Adresse im LAN anhand der IP / des Namens erhalten
 
Liste der Anhänge anzeigen (Anzahl: 1)
habe da etwas im Netz gefunden was Dir helfen könnte.

Delphi-Quellcode:
procedure TMain.btnArpClick(Sender: TObject);
var
  DestIP, SrcIP: IPAddr;
  pMacAddr: PULong;
  AddrLen: ULong;
  MacAddr: array[0..5] of byte;
  p: PByte;
  s: string;
  i: integer;
begin
  SrcIp := 0;
  s := '';
  InputQuery('Find Mac Address by Arp Request','Input Destination IPAddress',s);
  DestIP := inet_addr(PChar(s));
  pMacAddr := @MacAddr[0];
  AddrLen := SizeOf(MacAddr);
  SendARP(DestIP, SrcIP, pMacAddr, AddrLen);
  s := ' MacAddress : ';
  p := PByte(pMacAddr);
  if Assigned(p) and (AddrLen>0) then
    for i := 0 to AddrLen-1 do
    begin
      s := s + IntToHex(p^,2) + '-';
      Inc(p);
    end;
  SetLength(s, length(s)-1);
  sbMain.Panels[2].Text:=s;
end;
wobei SendArp eine Funktion aus iphlpapi.dll ist:

function SendARP; external 'iphlpapi.dll' name 'SendARP';

Die dll habe ich angefügt.

Grüße
Klaus

ManuMF 2. Mär 2006 16:08

Re: MAC-Adresse im LAN anhand der IP / des Namens erhalten
 
Hallo,

danke erst mal. Nachdem ich SendArp als Procedure deklariert habe (sonst hätte ich einen Rückgabetyp gebraucht), hängt der Compiler nun an
Delphi-Quellcode:
var
  DestIP, SrcIP: IPAddr;
"inet_addr" kennt er ebenfalls nicht. Wo sind die Deklarationen zu finden?

Danke,
ManuMF

ManuMF 2. Mär 2006 17:20

Re: MAC-Adresse im LAN anhand der IP / des Namens erhalten
 
OK, ich habe es jetzt gelöst. :-D
Die Funktion "inet_addr" kommt aus Winsock. Den Rest ("IPAddr" bzw. die SendARP Funktion) nehme ich jetzt aus den Units aus dem o.g. Thema.

Gruß,
ManuMF

felix_schmidt 17. Mär 2006 12:53

Re: MAC-Adresse im LAN anhand der IP / des Namens erhalten
 
kannst du mir sagen wie du das gelöst hast???
ich steig da gerade gar net durch!!!

ManuMF 17. Mär 2006 14:56

Re: MAC-Adresse im LAN anhand der IP / des Namens erhalten
 
Diese Funkton wandelt mir eine IP in eine MAC-Adresse um:

Delphi-Quellcode:
uses IPHlpAPI, WinSock;


function IPToMAC(IP: String) : String;
var
  DestIP, SrcIP: Cardinal;
  pMacAddr: PULong;
  AddrLen: ULong;
  MacAddr: array[0..5] of byte;
  p: PByte;
  i: integer;
begin
  result := '';
  SrcIp := 0;
  DestIP := inet_addr(PChar(IP));
  pMacAddr := @MacAddr[0];
  AddrLen := SizeOf(MacAddr);
  SendARP(DestIP, SrcIP, pMacAddr, AddrLen);
  p := PByte(pMacAddr);
  if Assigned(p) and (AddrLen>0) then
  for i := 0 to AddrLen-1 do
  begin
    result := result + IntToHex(p^,2) + '-';
    Inc(p);
  end;
  SetLength(result, Length(result) - 1);
end;
Die Unit IPHlpAPI.pas findest du angehängt im Beitrag, auf den ich oben verwiesen habe.

Gruß,
ManuMF

felix_schmidt 21. Mär 2006 13:53

Re: MAC-Adresse im LAN anhand der IP / des Namens erhalten
 
der compiler findet bei mir die IPHlpAPI nicht
was soll ich tun bin absoluter neuling

danke

felix_schmidt 21. Mär 2006 14:05

Re: MAC-Adresse im LAN anhand der IP / des Namens erhalten
 
sorry habs doch geschaft :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz