![]() |
MAC-Adresse zu einer IP Adresse ermitteln
Hallo,
die Suche hat leider nur Ergebnisse herausgegeben, anhand derer ich die EIGENE MAC-Adresse ermitteln kann. Ich suche jedoch eine Funktion, mit der ich mit Delphi 2009 durch Übergabe einer IP-Adresse die MAC-Adresse der Netzwerkkarte zu dieser IP-Adresse ermitteln kann. Gibt es sowas bereits in der Windows-API? |
Re: MAC-Adresse zu einer IP Adresse ermitteln
Nach kurzer Recherche bin ich auf
![]() |
Re: MAC-Adresse zu einer IP Adresse ermitteln
Danke.
Hmm, wie benutze ich die denn nun? Hätte jemand evtl. einen Beispiel-Code? |
Re: MAC-Adresse zu einer IP Adresse ermitteln
|
Re: MAC-Adresse zu einer IP Adresse ermitteln
Guck mal hier:
![]() |
Re: MAC-Adresse zu einer IP Adresse ermitteln
Schau mal hier:
![]() [edit] :lol:, wenn die Auswahl nicht reicht, weiß ich es nicht. [/edit] |
Re: MAC-Adresse zu einer IP Adresse ermitteln
Zitat:
bei mir sagt er an der Stelle:
Delphi-Quellcode:
"Inkompatible Typen: Char und AnsiChar"
DestIP := inet_addr(PChar(IP));
wenn ich das PChar auf PAnsiChar ändere compiliert er den Code zwar, aber ich erhalte als Rückgabewert einen leeren String. |
Re: MAC-Adresse zu einer IP Adresse ermitteln
Das ist aber nicht Delphi 2006, sondern 2009/2010, hab ich Recht?
|
Re: MAC-Adresse zu einer IP Adresse ermitteln
Zitat:
nö ist Delphi 2009, steht zumindest im ersten Beitrag! @CG2003: als erstes mal, musst du alle vorkommen von String,PChar und Char durch AnsiString, PAnsiChar und AnsiChar ersetzen. Willkommen im Unicodezeitalter... ich habe derzeit auch meine Wehwehchen damit... in der Hilfe von Delphi 2009 steht aber einiges dazu! Auch wie man die Projekte portieren kann. Das dein String leer ist, kann daran liegen, dass an irgendeiner stelle mit Move oder SetString gearbeitet wurde... in Unicode funktionieren die Funktionen nicht wie erwartet, wenn du alte Projekte compilieren möchtest... |
Re: MAC-Adresse zu einer IP Adresse ermitteln
Hilfreich wäre es auch den ganzen Code zu sehen. Und irgendwelche Fehlermeldungen von der IDE oder von der Fehlerbehandlung.
|
Re: MAC-Adresse zu einer IP Adresse ermitteln
Das ist die Funktion:
Code:
Weiterhin habe ich die Unit "IPHLPAPI.PAS" verwendet, die
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; ![]() |
Re: MAC-Adresse zu einer IP Adresse ermitteln
Sorry, für Doppelpost, aber kann es sein, dass AddrLen immer 0 ist und er deshalb nichts ausgibt?
Ich habe mir mal innerhalb der Funktion mittels
Delphi-Quellcode:
versucht mir den Wert von AddrLen anzeigen zu lassen und er gibt mir immer 0 aus. Aber wieso?
ShowMessage(IntToStr(AddrLen));
|
Re: MAC-Adresse zu einer IP Adresse ermitteln
So, ich nutze jetzt folgende Funktion und hier bekomme ich den Fehler zurück, dass MacAddrLen 0 ist. Woran kann das liegen?
Delphi-Quellcode:
Im Programm lass ich mir die MAC-Adresse mit
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); // msdn.microsoft.com/e...aa366358(VS.85).aspx 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 := 'ERROR_GEN_FAILURE'; ERROR_INVALID_PARAMETER: Result := 'ERROR_INVALID_PARAMETER'; ERROR_INVALID_USER_BUFFER: Result := 'ERROR_INVALID_USER_BUFFER'; ERROR_BAD_NET_NAME: Result := 'ERROR_BAD_NET_NAME'; ERROR_BUFFER_OVERFLOW: Result := 'ERROR_BUFFER_OVERFLOW'; else Result := 'Error: RC='+IntToStr(RC); end; end;
Delphi-Quellcode:
Wobei IPAdresse vom Typ String ist und eine IP-Adresse eines Remote-Hosts beinhaltet.
LabelBlaBla.Caption := GetMacAddr(IPAdresse);
Selbst ein LabelBlaBla.Caption := GetMacAddr(AnsiString(IPAdresse)); brachte nicht den gewünschten Erfolg. |
Re: MAC-Adresse zu einer IP Adresse ermitteln
Hi!
Bitte vermeide für die Zukunft Doppel- oder gar Triple-Postings innerhalb von 24 Stunden. Während diesr Zeit kannst du immer noch Informationen an deinen bestehenden Beitrag anhängen (durch Editieren). Es wäre auch schön, wenn du in deinem obigen Beitrag die Code-Tags durch Delphi-Tags ersetzen würdest, damit der Code besser lesbar wird. Zum Thema: Wo kommt dieser "Fehler" denn? Ich kann bei dir jetzt keine Fehlerausgabe finden, die diesen Text enthält. Grüße, Frederic |
Re: MAC-Adresse zu einer IP Adresse ermitteln
Die Mac Adresse kannst du nur ermitteln, wenn du lokale IP Adressen verwendest. Die Mac z.B. von einem entfernten Server kannst du nicht ermitteln!
|
Re: MAC-Adresse zu einer IP Adresse ermitteln
Zitat:
Sollte der entfernte Rechner allerdings in einem anderen Subnet stehen, dann läuft die ganze Geschichte natürlich über einen Router. Der löst dann für dich die IP (soweit bekannt) auf und du bekommst daher nix davon mit. mfg, mh166 |
Re: MAC-Adresse zu einer IP Adresse ermitteln
Jupp, über die VPN-Verbindung hatte das bisher in Delphi 2007 und Windows Vista einwandfrei funktioniert. Nur in Delphi 2009 und Windows 7 nicht mehr. Warum weiß ich noch nicht.
Mache ich es allerdings in der Firma direkt im Netz geht's, über VPN nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz