Delphi: Holen MAC des Routers

8

Ich benutze Delphi und möchte die physikalische MAC-Adresse eines Netzwerkgeräts in meinem Netzwerk bestimmen, in diesem Fall den Router selbst.

Mein Code:

%Vor%

wo 10.0.0.1 mein Router ist.

Leider sendet QuickSend immer "Verbindung zurückgesetzt durch Peer # 10054". Ich versuchte, die MIB-OID zu ändern, und ich versuchte auch die IP 127.0.0.1, die Verbindung sollte nie ausfallen. Ich habe keine brauchbaren Tutorials über TIdSNMP bei Google gefunden. : - (

Grüße Daniel Marschall

    
Daniel Marschall 29.12.2010, 00:36
quelle

2 Antworten

14

Sie können die Funktion SendARP verwenden Holen Sie sich die Mac-Adresse.

überprüfen Sie dieses Beispiel

%Vor%     
RRUZ 29.12.2010, 01:38
quelle
5

Ich möchte den Donner von RRUZ nicht stehlen, sondern biete die folgende Variante, die ich meiner Codebasis entnommen habe, mit einigen Beobachtungen an. Ich habe dies als Antwort und nicht als Kommentar getan, um Code einzufügen.

%Vor%

Es gibt ein paar Punkte zu machen.

Sie müssen WSAStartup / WSACleanup nicht aufrufen.

BEARBEITEN Wie RRUZ in einem Kommentar darauf hinweist, macht die Winsock-Dokumentation inet_addr nicht explizit von WSAStartup / WSACleanup frei, sodass ich diesen Punkt zurückziehe. Unter Vista ist es einfacher, RtlIpv4StringToAddress aufzurufen. Nachdem das alles gesagt wurde, ist inet_addr so einfach zu implementieren, dass es vielleicht einfacher ist, es selbst zu erstellen.

Zweitens ist die Deklaration von inet_addr in WinSock.pas falsch. Es deklariert den Rückgabewert vom Typ u_long, der in WinSock.pas als Longint definiert ist. Dies ist eine vorzeichenbehaftete 4-Byte-Ganzzahl, aber es sollte eine vorzeichenlose 4-Byte-Ganzzahl, ULONG, sein. Ohne explizite Umwandlung können Bereichsfehler auftreten.

    
David Heffernan 29.12.2010 14:41
quelle

Tags und Links