Laden...

IP-Adresse der Netzwekkarte auslesen, die ins Internet geht

Erstellt von LittleTester vor 2 Jahren Letzter Beitrag vor 2 Jahren 245 Views
L
LittleTester Themenstarter:in
158 Beiträge seit 2019
vor 2 Jahren
IP-Adresse der Netzwekkarte auslesen, die ins Internet geht

Ich habe mir ein Programm geschrieben, womit ich die MAC-Adresse und die IP-Adresse anzeigen lassen kann. In meinem System sind mehrere (virtuelle) Netzwerkkarten. Ich suche nun die Netzwerkkarte, die mit dem Internet verbunden ist. Ich könnte die Abfrage jetzt für mein System konkretisieren, aber das Tool soll für die Arbeit sein. (Gemeinnützig, wenn das für wen einen Unterschied macht.)

Also muss es entsprechend dynamisch gehalten werden. Zur Abfrage benutze ich
Win32_NetworkAdapterConfiguration. Denkbar wäre abzufragen, ob DHCPEnabled ist, aber bei den Rechnern auf der Arbeit habe ich allen Rechnern eine feste IP zugewiesen, damit ich da ohne Probleme per Fernzugriff drauf komme. Domäne-Server gibt es nur an zwei von ~12 Standorten. Die anderen sind Arbeitsgruppen. Die Abfrage nach FullDNSRegistrationEnabled fällt also auch weg. Leider gibt es keine Abfrage, ob der Standardgateway einen Wert zurück liefert. Das wäre im Grunde das was ich brauche.

Momentan sieht die Abfrage so aus:


searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration where IPEnabled = 'TRUE'");

Jemand eine Idee?

IDE: Visual Studio 2022
Sofern nicht anders genannt basieren meine Projekte auf C# und .net 6

16.835 Beiträge seit 2008
vor 2 Jahren

Google doch wenigstens mal 10 Sekunden 🙂how-to-determine-which-network-adapter-is-connected-to-the-internet

Kann Dir aber gleich sagen: 100% sicher kannst Du das leider nicht erkennen; vor allem in Unternehmensnetzwerken nicht.

Willst Du sicher Deine externe IP ermitteln, dann musst Du einen externen Dienst anpingen, der Dir die IP zurück liefert.
Darüber hinaus kannst Du immer mehrere aktive Netzwerkkarten haben, die mit dem Internet verbunden sind.

Um sowohl das IP wie auch das NAT Problem zu lösen, verwenden Tools wie TeamViewer daher auch einen externen Server für den initialen Verbindungsaufbau der Parteien.

L
LittleTester Themenstarter:in
158 Beiträge seit 2019
vor 2 Jahren

Ich habe gegoogelt, aber eben nichts gefunden. Wie du schon sagtest. Da scheint es irgendwie nichts vernünftiges zu geben, zumindest nicht per einfacher Abfrage.

Ich nutze Teamviewer für den direkten Support bei den Anwendern, aber nicht für administratibv Zwecke. Dafür baue ich eine VPN-Verbindung in die jeweilige Dienststelle auf und dann geht es mittels RDP weiter, bzw. Remote Desktop Manager Free.

Aber mal anders gefragt: Gibt es eine Möglichkeit in einem ersten Schritt abzufragen, auf welcher Netzwerkkarte ein Gateway angegeben ist und in einem zweiten Schritt dann diese Netzwerkkarte für die Abfrage der Lan-IP auszuwählen? Wenn ich in der Eingabeaufforderung "ipconfig /all" eingebe sehe ich zwar von den VMware-Adaptern, dass sie eine IP haben und auch ein DNS-Server, aber nur die echte Netzwerkkarte hat auch ein Standardgateway angegeben. Bei den virtuellen Adaptern müsste also der Wert "null" zurückgegeben werden während die echte Netzwerkkarte einen Wert zurück liefert => Treffer.

Ich weis aber nicht, wie das codetechnisch zu realisieren ist.

IDE: Visual Studio 2022
Sofern nicht anders genannt basieren meine Projekte auf C# und .net 6

16.835 Beiträge seit 2008
vor 2 Jahren

Bei den virtuellen Adaptern müsste also der Wert "null" zurückgegeben werden während die echte Netzwerkkarte einen Wert zurück liefert => Treffer.

Nö, Du kannst auch virtuelle Adapter mit ner Bridge anlegen, die dann einen Gateway haben.
Genauso kannst Du mehrere Netzwerkkarten verkabeln, die gegen den gleichen Gateway gehen.
Am Ende entscheidet nur die Routing Tabelle, wohin eine Anfrage geht.

Eine "Default Netzwerkkarte" aka NIC gibts auch unter Windows nicht, sondern nur eine "preferred".
Und Windows entscheidet per default anhand der angebundenen Geschwindigkeit, welche Netzwerkkarte preferredist, was sich auch während dem Betrieb ändern kann.

Ansonsten hab ich Dir bereits ein Link gegeben, mit dem sich eine Basis-Abfrage umsetzen lässt.
Zur Not musst bisschen die Windows API durchstöbern, was es da so gibt - oder Consolen-Outputs parsen, wenn Dir das lieber ist.

L
LittleTester Themenstarter:in
158 Beiträge seit 2019
vor 2 Jahren

OK. Dann bleibt mir erstmal nichts anderes übrig als das zu schlucken und bedanke mich soweit.

IDE: Visual Studio 2022
Sofern nicht anders genannt basieren meine Projekte auf C# und .net 6