![]() |
MAC Adresse erkennen
Nein, ich möchte nicht meine eigene MAC Adresse auslesen. (Das ist kein Problem)
Ich such eine Möglichkeit die MAC Adresse eines Rechners im LAN zu erkennen. Viele Router bieten die Möglichkeit MAC Adressen zu filtern, also muss ich doch die MAC Adresse abfragen können, oder? Gruss Jörg |
Re: MAC Adresse erkennen
In einer Console würde ich das so machen
Code:
Wie man das in Delphi über einen eventuellen API Befehl einbindet weiss ich allerdings nicht.
arp -a
|
Re: MAC Adresse erkennen
Vielen Dank für Deine schnelle Antwort, jedoch benötige ich eine Lösung in Delphi.
|
Re: MAC Adresse erkennen
|
Re: MAC Adresse erkennen
vielen Dank für Deinen Link. Ich bekomme jedoch eine Zugriffsverletzung bei Adresse 00451F03 in Modul Project1.exe.
Leider muss ich jetzt erst mal zu einem Kunden, aber später werde ich mir das nochmal ansehen. |
Re: MAC Adresse erkennen
probier mal "ipconfig /all"
dort sind die jeweiligen macaddressen für alle vorhandenen netzwerkinterfaces verfügbar |
Re: MAC Adresse erkennen
Hallo,
für Rechner im lokalen Netz kannst du dir den Arp-Cache ausgeben lassen mittels dem arp Befehl auf der Kommando-Zeile. Vorher mußte natürlich den anderen Rechner mal anpingen oder irgendwie Packete austauschen damit er dort drinne auftaucht. Ne reine Delphi-Lösung hab ich leider auch nicht... |
Re: MAC Adresse erkennen
Hi,
vielen Dank für eure Antworten. Ich versuch mich nochmal an der Lösung von ![]() |
Re: MAC Adresse erkennen
Lesen muss man können! Die Funktion von Swiss Delphi Center arbeitet nur mit NetBIOS, das ist bei uns ausgeschaltet. Also werde ich mich jetzt an ARP machen...
|
Re: MAC Adresse erkennen!!! ANTWORT!!! LÖSUNG?!
Liste der Anhänge anzeigen (Anzahl: 1)
Das müsste funktionieren:
Code:
Das habe ich irgendwo mal ausgegraben... ;-)[...] uses [...] Winsock, IpExport, IpHlpApi, IpTypes, IpIfConst, IpRtrMib [...]; [...] type TPhysAddrByteArray = array [0..MAXLEN_PHYSADDR - 1] of BYTE; function IPMAC(const Filter: string): String; [...] implementation [...] function IPMAC(const Filter: string): String; function GetIpAddrTableWithAlloc: PMibIpAddrTable; var Size: ULONG; begin Size := 0; GetIpAddrTable(nil, Size, True); Result := AllocMem(Size); if GetIpAddrTable(Result, Size, True) <> NO_ERROR then begin FreeMem(Result); Result := nil; end; end; function IpAddrToString(Addr: DWORD): string; var inad: in_addr; begin inad.s_addr := Addr; Result := inet_ntoa(inad); end; function PhysAddrToString(Length: DWORD; PhysAddr: TPhysAddrByteArray): string; var I: Integer; begin Result := ''; if Length = 0 then Exit; for I := 0 to Length - 1 do if I = Integer(Length - 1) then Result := Result + Format('%.2x', [PhysAddr[I]]) else Result := Result + (Format('%.2x-', [PhysAddr[I]])); end; var Size: ULONG; I: Integer; NetTable: PMibIpNetTable; // ARP table NetRow: TMibIpNetRow; // ARP entry from ARP table CurrentIndex: DWORD; // Used for displaying a header in case of multiple interfaces IpAddrTable: PMibIpAddrTable; // Address table used for interface index to IP address mapping begin Result:=''; Size := 0; GetIpNetTable(nil, Size, True); NetTable := AllocMem(Size); try if GetIpNetTable(NetTable, Size, True) = NO_ERROR then begin // Get the IP address table IpAddrTable := GetIpAddrTableWithAlloc; try // Remember the first interface index and display header CurrentIndex := NetTable^.table[0].dwIndex; // For each ARP entry for I := 0 to NetTable^.dwNumEntries - 1 do begin {$R-}NetRow := NetTable^.table[I];{$R+} if CurrentIndex <> NetRow.dwIndex then begin // We're changing interfaces, display a new header CurrentIndex := NetRow.dwIndex; end; // Only display the entry if it matches the filter if (Filter = '') or (Filter = IpAddrToString(NetRow.dwAddr)) then Result:=PhysAddrToString(NetRow.dwPhysAddrLen, TPhysAddrByteArray(NetRow.bPhysAddr)); end; finally FreeMem(IpAddrTable); end; end else begin // Assume failure of GetIpNetTable means there are no ARP entries. This is // usually the case but it could fail for other reasons. end; finally FreeMem(NetTable); end; end; [...] Ich glaube das Units-Installieren brauche ich nicht weiter zu erklären... Bitte postet evtl. Fehler (ich habe es aber eingentlich getestet)! [EDIT] Beispiel gibt's auf Anfrage :coder: UND: Befor man die MAC auslesen kann, muss man den Zielhost VORHER PINGEN!!! [/EDIT] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 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 by Thomas Breitkreuz