Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Aktiven Netzwerkadapter bestimmen (https://www.delphipraxis.net/67160-aktiven-netzwerkadapter-bestimmen.html)

dbdeath74 10. Apr 2006 14:28


Aktiven Netzwerkadapter bestimmen
 
Hallo,

zur Erfassung unserer Hardware schreibe ich gerade ein kleines Tool.
Nun bin ich bei den Netzwerkadaptern auf ein kleines Problem gestossen.

Die Macadressen aller aktiven Adapter bekomme ich mit GetMAcAddress aus der JCL.
Mit GetAdapterInfo bekommme ich auch noch weitere Informationen wie Namen usw.

Kann ich irgendwie bestimmen welcher Netzwerkadapter der wirklich aktive ist?

Beispiel:
Auf einem Notebook gibt es eine LAN Verbindung, eine WLAN Verbindung und von mir aus noch 2 Netzwerkadapter von VMWare ....
Mich interessiert eigentlich nur die aktive LAN Verbindung, die in der Domäne drin hängt, und über die der momentane Netzwerkverkehr läuft.

Kennt jemand eine Möglichkeit den primären Netzwerkadapter herauszufinden?
Ich dachte eigentlich bisher es ist der erste aktive den ich finde, nun musste ich leider feststellen das sich zum Beispiel die VMWare Adapter als erstes in die Liste hängen .. :(

Bin über jeden Rat dankbar.

gruß dbdeath74

Heffalump 10. Apr 2006 14:51

Re: Aktiven Netzwerkadapter bestimmen
 
Du könntest die Gateway Adresse auslesen und anhand dieser ein Zuordnung treffen.

dbdeath74 12. Apr 2006 13:24

Re: Aktiven Netzwerkadapter bestimmen
 
hmmm die Gateway adresse hilft mir hier nicht weiter.

über die IP kann ich vielleicht noch die VMWare Adapter rauskicken weil die eine lokale IP haben.

Aber LAN und WLAN können dieselbe Gateway haben.

Man muss doch irgendwie testen können welches der primäre Adapter ist :(

Gruß dbdeath74

toyoman 9. Mai 2008 13:30

Re: Aktiven Netzwerkadapter bestimmen
 
Ok ist zwar schon Jahre her aber die Frage kommt ja immer mal wieder auf. Wie kann ich den aktiven Netzwerkadapter finden?

Hab da mal (auch vor Jahren) was gemacht um den ersten Adapter auszulesen (der aktive):
-firstadapter ist eine String Variable

Delphi-Quellcode:
    {---**--LOG----SCHREIBEN---------------------**----------}
     logfileschreiben('search for network adapters...');
    {---**--LOG----SCHREIBEN---------------------**----------}
 {------Windows 2000/XP ersten Adapter finden und speichern)--------------------------------}
        reg := TRegistry.Create;
        reg.Access :=KEY_READ;
        reg.rootkey:=HKEY_LOCAL_MACHINE;
        reg.OpenKey('SYSTEM\Setup\AnswerFileMap', false);
        if reg.ValueExists('Adapter1') then
        begin
             firstadapter:=reg.ReadString('Adapter1');
        end else
        begin
             firstadapter:='unknown';
        end;
                  reg := TRegistry.Create;
                  reg.Access :=KEY_READ;
                  reg.rootkey:=HKEY_LOCAL_MACHINE;
                  reg.OpenKey('SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\'+firstadapter, false);
                  if reg.ValueExists('DHCPServer') then
                  begin
                      dhcpserver:=reg.ReadString('DHCPServer');
                  end;
                  if reg.ValueExists('EnableDHCP') then
                  begin
                      enabledhcp:=inttostr(reg.ReadInteger('EnableDHCP'));
                  end;
                  if reg.ValueExists('DHCPDefaultGateway') then
                  begin
                      ReadREG_MULTI_SZ(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\'+firstadapter, 'DHCPDefaultGateway', Memo1.Lines);
                      dhcpdefaultgateway:='DHCP: '+memo1.lines.Strings[0];
                  end;
        reg.closekey;
        reg.free;

SirThornberry 9. Mai 2008 14:00

Re: Aktiven Netzwerkadapter bestimmen
 
Liste der Anhänge anzeigen (Anzahl: 1)
uj, nicht über die Registry. Dafür gibt es Api Funktionen. Zudem funktioniert deine Funktion nicht. Bei mir gibt es den Schlüssel zum Beispiel gar nicht in der Registry. Zudem wird bei dir nicht geprüft ob OpenKey fehl schlegt. Dadurch wird auf den Value im falschen Zweig geprüft wenn OpenKey bereits fehl schlägt

Der "aktive" Adapter wird durch die Metric bestimmt.
Es gibt eine Routingtabelle welche festlegt über welche Leitung welche Anfragen gehen. Gibt es mehrere mögliche Leitungen wird über die Metric die Priorität festgelegt.

im Windows kannst du mit "route print" die dir aktuellen Ruten anzeigen lassen.
Für die Apifunktionen hab ich mal was in den Anhang gepackt.

toyoman 9. Mai 2008 14:08

Re: Aktiven Netzwerkadapter bestimmen
 
tolle Sache, aber das Programm zeigt mir jetzt ja den aktuell aktiven Netzwerkadapter doch auch wieder nicht an?

Zitat:

Zitat von SirThornberry
uj, nicht über die Registry. Dafür gibt es Api Funktionen. Zudem funktioniert deine Funktion nicht. Bei mir gibt es den Schlüssel zum Beispiel gar nicht in der Registry. Zudem wird bei dir nicht geprüft ob OpenKey fehl schlegt. Dadurch wird auf den Value im falschen Zweig geprüft wenn OpenKey bereits fehl schlägt

Der "aktive" Adapter wird durch die Metric bestimmt.
Es gibt eine Routingtabelle welche festlegt über welche Leitung welche Anfragen gehen. Gibt es mehrere mögliche Leitungen wird über die Metric die Priorität festgelegt.

im Windows kannst du mit "route print" die dir aktuellen Ruten anzeigen lassen.
Für die Apifunktionen hab ich mal was in den Anhang gepackt.


SirThornberry 9. Mai 2008 14:12

Re: Aktiven Netzwerkadapter bestimmen
 
richtig. Wie ich bereits schieb wird die "aktive" Verbindung über die Metric bestimmt.
Zudem gibt es ja keine wirkliche aktive Verbindung. Denn welche Verbindung verwendet wird hängt ja auch vom Ziel ab. Wenn ich zwei Netzwerkkarten habe welche beide in verschiedene Netze gehen wird je nach Ziel die eine ander andere verwendet. Und nur wenn beide das gleiche Netz haben wird durch die Metric bestimmt welche bevorzugt wird. (Metric ist die letzte Spalte bei Routingtabelle in meinem Beispielprogramm)

toyoman 9. Mai 2008 14:15

Re: Aktiven Netzwerkadapter bestimmen
 
ok für diesen Fall macht das Sinn. Aber wenn du in einem Laptop einen LAN Adapter und einen WLAN Adapter hast ist meist nur einer aktiv und dementsprechend mit einer IP etc. versorgt.
Da muss man nun wissen welcher ist es um den richtigen Adapter auszulesen und evtl. die dazugehörigen Parameter.

Zitat:

Zitat von SirThornberry
richtig. Wie ich bereits schieb wird die "aktive" Verbindung über die Metric bestimmt.
Zudem gibt es ja keine wirkliche aktive Verbindung. Denn welche Verbindung verwendet wird hängt ja auch vom Ziel ab. Wenn ich zwei Netzwerkkarten habe welche beide in verschiedene Netze gehen wird je nach Ziel die eine ander andere verwendet. Und nur wenn beide das gleiche Netz haben wird durch die Metric bestimmt welche bevorzugt wird. (Metric ist die letzte Spalte bei Routingtabelle in meinem Beispielprogramm)


SirThornberry 9. Mai 2008 14:18

Re: Aktiven Netzwerkadapter bestimmen
 
War das jetzt eine Zustimmung oder Frage? :gruebel:

toyoman 9. Mai 2008 14:31

Re: Aktiven Netzwerkadapter bestimmen
 
beides :))
Wünsche schöne Pfingsten!

Zitat:

Zitat von SirThornberry
War das jetzt eine Zustimmung oder Frage? :gruebel:



Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 Uhr.
Seite 1 von 2  1 2      

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