![]() |
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 |
Re: Aktiven Netzwerkadapter bestimmen
Du könntest die Gateway Adresse auslesen und anhand dieser ein Zuordnung treffen.
|
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 |
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; |
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. |
Re: Aktiven Netzwerkadapter bestimmen
tolle Sache, aber das Programm zeigt mir jetzt ja den aktuell aktiven Netzwerkadapter doch auch wieder nicht an?
Zitat:
|
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) |
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:
|
Re: Aktiven Netzwerkadapter bestimmen
War das jetzt eine Zustimmung oder Frage? :gruebel:
|
Re: Aktiven Netzwerkadapter bestimmen
beides :))
Wünsche schöne Pfingsten! Zitat:
|
Re: Aktiven Netzwerkadapter bestimmen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich würde den Traffic/sec der Netzwerkadapter miteinander vergleichen. Der aktive Netzwerkadapter hat natürlich den höchsten Wert.
|
Re: Aktiven Netzwerkadapter bestimmen
letztendlich muss der Fragesteller wissen was für ihn "aktiv" im Zusammenhang mit dem Netzwerkadapter heißt. Das sicherste ist einfach die Routingtabelle auszulesen. Denn wenn er für das eigene Neztwerk den Netzwerkadapter will ist dieser durch die Maske identifizierbar.
Denn stelle man sich vor das es noch einen weiteren Netzwerkadapter gibt mit dem man sich ins Internet einwählt und große Daten heruntergeladen hat, so würde der falsche bestimmt wenn man nach dem Traffic geht. |
Re: Aktiven Netzwerkadapter bestimmen
Zitat:
was ist schon natürlich - ich hatte schon oft PCs in einer Domäne, die mit einem 2. Adapter mit einer Unix-Workstation per NFS verbunden waren. Da sie der Workstation zuarbeiten, ist der Traffic im Unix-Netz weit höher als im Windows-Netz. Nach der ursprünglichen Fragestellung ist der Adapter gefragt, über den der DC (der eigenen Domäne!) erreichbar ist, das kann ohne weiteres der mit dem geringsten Traffic sein. Gruss Reinhard |
Re: Aktiven Netzwerkadapter bestimmen
genau so sehe ich das auch. Also ist der sicherste Weg die Routingtabelle zu nehmen und da zu schauen wo die Packete hinn gehen. Denn genau so funktionieren ja auch anfragen. Es wird in der Routingtabelle der Eintrag gesucht der mit der Ziel-IP übereinstimmt und dann wird über diesen Adapter gesendet.
|
Re: Aktiven Netzwerkadapter bestimmen
Zitat:
is ja gut, geniesst jetzt erstmal euer pfingst weekend :) aber interessante infos, danke! |
Re: Aktiven Netzwerkadapter bestimmen
Ich hätte da auch noch einen Vorschlag. Schaue Dir doch mal
![]() |
Re: Aktiven Netzwerkadapter bestimmen
Nicht angeschlossene Netzwerkadapter tauchen gar nicht erst in der Routingtabelle auf weil über diese nicht geroutet werden kann ;-) (wenn ich nicht irre wird die Funktion auch in meinem Beispielprogramm verwendet)
|
Re: Aktiven Netzwerkadapter bestimmen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 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