AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Mac Adresse mit IP herausfinden... Habe code, wie anpassen?
Thema durchsuchen
Ansicht
Themen-Optionen

Mac Adresse mit IP herausfinden... Habe code, wie anpassen?

Ein Thema von hedie · begonnen am 31. Jul 2011 · letzter Beitrag vom 14. Aug 2013
Antwort Antwort
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#1

Mac Adresse mit IP herausfinden... Habe code, wie anpassen?

  Alt 31. Jul 2011, 16:24
Hallo zusammen...

Es ist schon ein weilchen her, seit ich wirklich aktiv Delphi Programmiert habe...

Deshalb hier diese "anfänger" fragen..

Ich habe diesen Code gefunden http://www.delphi3000.com/articles/article_3867.asp?SK=

Delphi-Quellcode:
Function to return the MAC address of a remote or local machine in the format 'XX-XX-XX-XX-XX-XX'

The returned MAC address is a Unique ID that can be used in various ways. One way is as a parameter to my Wake On Lan function.(See article "http://www.delphi3000.com/articles/article_3847.asp")

Example :

ShowMessage(GetMacAddress('\\MHEYDON');

Output = '00-02-08-E7-99-6B'
Answer:



// ======================================================================
// Return the MAC address of Machine identified by AServerName
// Format of AServerName is '\\ServerName' or 'ServerName'
// If AServerName is a Null String then local machine MAC address
// is returned.
// Return string is in format 'XX-XX-XX-XX-XX-XX'
// ======================================================================

function GetMacAddress(const AServerName : string) : string;
type
     TNetTransportEnum = function(pszServer : PWideChar;
                                  Level : DWORD;
                                  var pbBuffer : pointer;
                                  PrefMaxLen : LongInt;
                                  var EntriesRead : DWORD;
                                  var TotalEntries : DWORD;
                                  var ResumeHandle : DWORD) : DWORD; stdcall;

     TNetApiBufferFree = function(Buffer : pointer) : DWORD; stdcall;

     PTransportInfo = ^TTransportInfo;
     TTransportInfo = record
                       quality_of_service : DWORD;
                       number_of_vcs : DWORD;
                       transport_name : PWChar;
                       transport_address : PWChar;
                       wan_ish : boolean;
                     end;

var E,ResumeHandle,
    EntriesRead,
    TotalEntries : DWORD;
    FLibHandle : THandle;
    sMachineName,
    sMacAddr,
    Retvar : string;
    pBuffer : pointer;
    pInfo : PTransportInfo;
    FNetTransportEnum : TNetTransportEnum;
    FNetApiBufferFree : TNetApiBufferFree;
    pszServer : array[0..128] of WideChar;
    i,ii,iIdx : integer;
begin
  sMachineName := trim(AServerName);
  Retvar := '00-00-00-00-00-00';

  // Add leading \\ if missing
  if (sMachineName <> '') and (length(sMachineName) >= 2) then begin
    if copy(sMachineName,1,2) <> '\\then
      sMachineName := '\\' + sMachineName
  end;

  // Setup and load from DLL
  pBuffer := nil;
  ResumeHandle := 0;
  FLibHandle := LoadLibrary('NETAPI32.DLL');

  // Execute the external function
  if FLibHandle <> 0 then begin
    @FNetTransportEnum := GetProcAddress(FLibHandle,'NetWkstaTransportEnum');
    @FNetApiBufferFree := GetProcAddress(FLibHandle,'NetApiBufferFree');
    E := FNetTransportEnum(StringToWideChar(sMachineName,pszServer,129),0,
                           pBuffer,-1,EntriesRead,TotalEntries,Resumehandle);

    if E = 0 then begin
      pInfo := pBuffer;

      // Enumerate all protocols - look for TCPIP
      for i := 1 to EntriesRead do begin
        if pos('TCPIP',UpperCase(pInfo^.transport_name)) <> 0 then begin
          // Got It - now format result 'xx-xx-xx-xx-xx-xx'
          iIdx := 1;
          sMacAddr := pInfo^.transport_address;

          for ii := 1 to 12 do begin
            Retvar[iIdx] := sMacAddr[ii];
            inc(iIdx);
            if iIdx in [3,6,9,12,15] then inc(iIdx);
          end;
        end;

        inc(pInfo);
      end;
      if pBuffer <> nil then FNetApiBufferFree(pBuffer);
    end;

    try
      FreeLibrary(FLibHandle);
    except
      // Silent Error
    end;
  end;

  Result := Retvar;
end;
Mit diesem ist es möglich von einem Computernamen auf eine MAC zu kommen... das funktioniert soweit einwandfrei...

doch ich möchte gerne von einer IP zur Mac kommen... Gibt es eine möglichkeit den code anzupassen?

Danke schonmal
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: Mac Adresse mit IP herausfinden... Habe code, wie anpassen?

  Alt 31. Jul 2011, 16:35
Schon mal versucht ShowMessage('\\192.168.x.x'); aufzurufen? Windows müsste damit eigentlich schon entsprechend umgehen können. (natürlich die x durch passende Werte der IP-Adresse ersetzen)
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.874 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Mac Adresse mit IP herausfinden... Habe code, wie anpassen?

  Alt 31. Jul 2011, 17:05
Aber was bringt dir das? wenn der Zielrechner sich nicht im gleichen Netzwerksegment befindet, kannst du ihn nicht per MAC (Netzwerkebene/Level 2) erreichen.
Markus Kinzler
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#4

AW: Mac Adresse mit IP herausfinden... Habe code, wie anpassen?

  Alt 31. Jul 2011, 17:33
ich möchte nicht damit kommunizieren... ich brauche einfach nur die mac

Doch leider funktioniert dieser Code nicht wirklich... Nur mit dem eigenen Computer namen gehts... mit einem anderen welcher sich im netz befindet gehts nicht...

Doch der ARP wird korrekt abgearbeitet (sehe ich in wireshark...) also das iphone antwortet korrekt...
aber es kommt nur 00-00-00-00-00-00 zurück...

kennt jemand vielleicht noch einen code?
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Mac Adresse mit IP herausfinden... Habe code, wie anpassen?

  Alt 31. Jul 2011, 17:45
Hallo,

wenn die Zieladresse nicht in Deinem Netzwerksegment liegt,
ist die MAC-Adresse die Du im Wireshark siehst die Deines nächsten Hops.
In der Regel Dein Defaulrouter.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.874 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Mac Adresse mit IP herausfinden... Habe code, wie anpassen?

  Alt 31. Jul 2011, 17:57
Du solltest dich wirklich mal mit den Grundlagen von Netzwerken beschäftigen.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


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:48 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