AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi MAC-Adresse zu einer IP Adresse ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

MAC-Adresse zu einer IP Adresse ermitteln

Offene Frage von "CG2003"
Ein Thema von CG2003 · begonnen am 25. Okt 2009 · letzter Beitrag vom 26. Okt 2009
Antwort Antwort
Seite 2 von 2     12   
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#11

Re: MAC-Adresse zu einer IP Adresse ermitteln

  Alt 25. Okt 2009, 20:40
Das ist die Funktion:

Code:
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;
Weiterhin habe ich die Unit "IPHLPAPI.PAS" verwendet, die auch hier zu finden ist.
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#12

Re: MAC-Adresse zu einer IP Adresse ermitteln

  Alt 25. Okt 2009, 21:31
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

ShowMessage(IntToStr(AddrLen)); versucht mir den Wert von AddrLen anzeigen zu lassen und er gibt mir immer 0 aus. Aber wieso?
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#13

Re: MAC-Adresse zu einer IP Adresse ermitteln

  Alt 26. Okt 2009, 06:42
So, ich nutze jetzt folgende Funktion und hier bekomme ich den Fehler zurück, dass MacAddrLen 0 ist. Woran kann das liegen?

Delphi-Quellcode:
function SendARP(const DestIP, SrcIP: in_addr; pMacAddr: PULONG; var PhyAddrLen: ULONG): DWORD; stdcall; external 'IPHLPAPI.DLLname '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;
Im Programm lass ich mir die MAC-Adresse mit

LabelBlaBla.Caption := GetMacAddr(IPAdresse); Wobei IPAdresse vom Typ String ist und eine IP-Adresse eines Remote-Hosts beinhaltet.
Selbst ein LabelBlaBla.Caption := GetMacAddr(AnsiString(IPAdresse)); brachte nicht den gewünschten Erfolg.
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#14

Re: MAC-Adresse zu einer IP Adresse ermitteln

  Alt 26. Okt 2009, 07:19
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
Frederic Kerber
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#15

Re: MAC-Adresse zu einer IP Adresse ermitteln

  Alt 26. Okt 2009, 08:28
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!
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von mh166
mh166

Registriert seit: 14. Nov 2004
Ort: Chemnitz
443 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#16

Re: MAC-Adresse zu einer IP Adresse ermitteln

  Alt 26. Okt 2009, 13:47
Zitat von generic:
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!
Das ist so nicht ganz richtig. Wenn der entfernte Rechner im gleichen Subnet ist, dann wäre es möglich. Hier mach ichs meistens so, dass ich die Ziel-IP anpinge und anschließend den ARP-Cache auslese. Im selben Subnetz wird ja bekanntlich nichts geroutet und der Rechner kümmert sich daher selbst um die Auflösung der IP-Adresse via ARP.

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
Tiefgründige Sätze unserer Zeit:
Zitat von Luckie:
Und diesen Token zur Laufzeit zu modifizieren würde bedeuten, dass du zur laufzeit das Token ändern musst.
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#17

Re: MAC-Adresse zu einer IP Adresse ermitteln

  Alt 26. Okt 2009, 16:45
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.
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:34 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