Welche Netzwerkverbindung wird benutzt ?
-
Ich habe mir für Win11 ein kleines Programm mit C# geschrieben, das in etwa die Funktion des bis win10 benutzbaren NetSpeedMononitor hat, d.h. es werden ständig in der Taskleiste die Upload- und Download-Aktivitäten angezeigt. Auf meinem neuen PC mit einer Ryzen 9 5900X CPU und einem Mainboard GIGABYTE X570S AURUS ELITE AX gibt es ein neues Problem, dieses Mainboard hat bisher unüblich für Desktop-PCs sowohl LAN als auch WLAN on Board und beide Schnittstellen werden angezeigt. Ich benutze LAN (kein WLAN), wie kann ich das aber im Programm erkennen, ob LAN oder WLAN verwendet wird.
Bei meinem etwas betagten Lenovo-G560-Laptop gibt es auch LAN und WLAN (ich nutze dort WLAN), da wird aber nur bei dem aktiven Netzwerk-Adapter (WLAN) die FritzBox angezeigt. Auch dort benutze ich Win11 und mein NetSpeed-Programm.Ich habe für die Identifizierung des zu benutzenden Netzwerk-Adapters ein kleines Testprogramm geschrieben, das die wesentlichen Informationen anzeigt.
Wie kann ich auf dem Ryzen 9 PC mit neuen GIGABYTE-Mainboart erkennen, ob LAN oder WLAN tatsächlich benutzt wird.
Ich habe auch den VMWare Workstation 16 Player installiert, deshalb gibt es die virtuellen Netzwerke.Hier die Ergebnisse des Test-Programmes:
Ryzen9-PC** Index 0 ~ Realtek Gaming 2.5GbE Family Controller #2 DNS suffix .............................. : fritz.box adapter.Description ..................... : Realtek Gaming 2.5GbE Family Controller #2 adapter.Name ............................ : Ethernet 4 adapter.NetworkInterfaceType ............ : Ethernet Index 1 ~ RZ608 Wi-Fi 6E 80MHz DNS suffix .............................. : fritz.box adapter.Description ..................... : RZ608 Wi-Fi 6E 80MHz adapter.Name ............................ : WLAN adapter.NetworkInterfaceType ............ : Wireless80211 Index 2 ~ Microsoft Wi-Fi Direct Virtual Adapter DNS suffix .............................. : adapter.Description ..................... : Microsoft Wi-Fi Direct Virtual Adapter adapter.Name ............................ : LAN-Verbindung* 9 adapter.NetworkInterfaceType ............ : Wireless80211 Index 3 ~ Microsoft Wi-Fi Direct Virtual Adapter #2 DNS suffix .............................. : adapter.Description ..................... : Microsoft Wi-Fi Direct Virtual Adapter #2 adapter.Name ............................ : LAN-Verbindung* 10 adapter.NetworkInterfaceType ............ : Wireless80211 Index 4 ~ VMware Virtual Ethernet Adapter for VMnet1 DNS suffix .............................. : adapter.Description ..................... : VMware Virtual Ethernet Adapter for VMnet1 adapter.Name ............................ : VMware Network Adapter VMnet1 adapter.NetworkInterfaceType ............ : Ethernet Index 5 ~ VMware Virtual Ethernet Adapter for VMnet8 DNS suffix .............................. : adapter.Description ..................... : VMware Virtual Ethernet Adapter for VMnet8 adapter.Name ............................ : VMware Network Adapter VMnet8 adapter.NetworkInterfaceType ............ : Ethernet Index 6 ~ Bluetooth Device (Personal Area Network) #4 DNS suffix .............................. : adapter.Description ..................... : Bluetooth Device (Personal Area Network) #4 adapter.Name ............................ : Bluetooth-Netzwerkverbindung 4 adapter.NetworkInterfaceType ............ : Ethernet Index 7 ~ Software Loopback Interface 1 DNS suffix .............................. : adapter.Description ..................... : Software Loopback Interface 1 adapter.Name ............................ : Loopback Pseudo-Interface 1 adapter.NetworkInterfaceType ............ : Loopback fritz.box im Index: 0 und 1 **
Beim Lenovo-G560-Notebook, wo es auch LAN und WLAN gibt, sieht es so aus:
** Index 0 ~ Realtek PCIe FE Family Controller DNS suffix .............................. : adapter.Description ..................... : Realtek PCIe FE Family Controller adapter.Name ............................ : Ethernet adapter.NetworkInterfaceType ............ : Ethernet Index 1 ~ Microsoft Wi-Fi Direct Virtual Adapter DNS suffix .............................. : adapter.Description ..................... : Microsoft Wi-Fi Direct Virtual Adapter adapter.Name ............................ : LAN-Verbindung* 1 adapter.NetworkInterfaceType ............ : Wireless80211 Index 2 ~ Microsoft Wi-Fi Direct Virtual Adapter #2 DNS suffix .............................. : adapter.Description ..................... : Microsoft Wi-Fi Direct Virtual Adapter #2 adapter.Name ............................ : LAN-Verbindung* 2 adapter.NetworkInterfaceType ............ : Wireless80211 Index 3 ~ Broadcom 802.11n Network Adapter DNS suffix .............................. : fritz.box adapter.Description ..................... : Broadcom 802.11n Network Adapter adapter.Name ............................ : WLAN adapter.NetworkInterfaceType ............ : Wireless80211 Index 4 ~ Bluetooth Device (Personal Area Network) #2 DNS suffix .............................. : adapter.Description ..................... : Bluetooth Device (Personal Area Network) #2 adapter.Name ............................ : Bluetooth-Netzwerkverbindung 2 adapter.NetworkInterfaceType ............ : Ethernet Index 5 ~ Software Loopback Interface 1 DNS suffix .............................. : adapter.Description ..................... : Software Loopback Interface 1 adapter.Name ............................ : Loopback Pseudo-Interface 1 adapter.NetworkInterfaceType ............ : Loopback fritz.box im Index: 3 **
Hier der C#-Code des kleinen Test-Programmes
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net.NetworkInformation; namespace NetConsole { class Program { static void Main(string[] args) { DisplayDnsConfiguration(); } public static void DisplayDnsConfiguration() { int idx = 99; string FritzIDX = ""; int i = 0; NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface adapter in adapters) { IPInterfaceProperties properties = adapter.GetIPProperties(); Console.WriteLine("Index {0} ~ {1}", i, adapter.Description); Console.WriteLine(" DNS suffix .............................. : {0}", properties.DnsSuffix); Console.WriteLine(" adapter.Description ..................... : {0}", adapter.Description); Console.WriteLine(" adapter.Name ............................ : {0}", adapter.Name); Console.WriteLine(" adapter.NetworkInterfaceType ............ : {0}", adapter.NetworkInterfaceType); string dns = properties.DnsSuffix; if (dns == "fritz.box") { idx = i; if (FritzIDX.Length > 0) { FritzIDX = FritzIDX + " und "; } FritzIDX = FritzIDX + idx.ToString(); } i++; } Console.WriteLine(); Console.WriteLine("fritz.box im Index: {0}", FritzIDX); Console.ReadKey(); } } }
-
Ich bin mir nicht sicher, ob ich dein Problem richtig verstanden habe.
Du hast eine Art Traffic Monitor, der Up- und Downloadaktivitäten anzeigt, kannst die Aktivitäten aber keinem Adapter zuordnen (LAN oder WLAN)?
Wie stellst du denn Aktivität fest? Hast du Zugriff auf die einzelnen TCP/IP Pakete und kannst dir da die MAC Adressen oder TCP/IP Adressen angucken?Der Code, den du gepostet hast, identifiziert ja nur den fritz.box Adapter, Traffic wertest du da nicht aus.
-
@DocShoe
ich habe es inzwischen so gelöst, dass ich den LAN-Adapter benutze - klappt für mich.
Als universell nutzbares Programm ist das keine Lösung.Hier der Auszug aus meinem Programm => ich benutze den ersten Treffer, bei dem die fritzbox angegeben ist - bei mir klappt das, ist aber nicht ganz sauber.
string[] CommandLineArgs = Environment.GetCommandLineArgs(); string PgmName = CommandLineArgs[0]; iniFileName = PgmName.Substring(0, PgmName.Length - 3) + "ini"; // ini statt exe idx = 99; int i = 0; NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface adapter in adapters) { IPInterfaceProperties properties = adapter.GetIPProperties(); string dns = properties.DnsSuffix; if (dns == "fritz.box") { idx = i; goto Gefunden; } i++; } Gefunden: if (idx == 99) { const string message = "Es wurde keine Verbindung zur fritz.box gefunden - Abbruch"; const string caption = "NetSpeedHK - keine fritz.box"; var result = MessageBox.Show(message, caption, MessageBoxButtons.YesNo); Application.Exit(); }
Und hier der Auszug aus der Timer-Routine, die pro Sekunde aufgerufen wird, wo die Werte für Upload (U) und Download (D) ermittelt werden.
interfaceStats = NetworkInterface.GetAllNetworkInterfaces()[idx].GetIPv4Statistics(); decimal previousbytessendZW = previousbytessend; decimal previousbytesreceivedZW = previousbytesreceived; previousbytessend = interfaceStats.BytesSent; previousbytesreceived = interfaceStats.BytesReceived; decimal uploadspeed = ((previousbytessend - previousbytessendZW) * 8 / 1024); decimal downloadspeed = ((previousbytesreceived - previousbytesreceivedZW) * 8 / 1024); string txD = (Math.Round(downloadspeed, 2)).ToString("#,###,##0.00"); while (txD.Length < 12) { txD = " " + txD; } string txU = (Math.Round(uploadspeed, 2)).ToString("#,###,##0.00"); while (txU.Length < 12) { txU = " " + txU; }
-
Ich verstehe dein Problem immer noch nicht...
Was spricht denn dagegen, den gesamten Traffic für alle Adapter auszuwerten? Und dann gibt dein Tool halt die Statistiken für alle Adapter aus. Du kannst ja noch die Option einbauen, dass dein Tool nur die Statistik für einen bestimmten Adapter ausgibt. Wenn das Tool universell einsetzbar sein soll darf es natürlich auch nicht auf den DNS-Suffix gucken, eine Unterscheidung nach
NetworkInterfaceType
.Weitere Überlegungen, wenn das Tool universell einsetzbar sein soll:
- IPv6 Unterstützung
- WLAN und LAN können parallel betrieben werden
- es gibt möglicherweise mehrere physikalische LAN/WLAN Adapter
PS:
Wenn sich im laufenden Betrieb die Konfiguration der Adapter ändert (zB durch Aktivierung/Deaktivierung eines Adapters) kann sich der Index verschieben. Sinnvoller ist da möglicherweise, sich die ID zu merken und den Adapter über diese ID zu suchen.
-
Definitiver Tipp: Vermeide GoTos. Verwende englische Variablen-Namen. Damit tust du dir nachher leichter, das Programm und den Fluss zu verstehen.
Gerade in C# gibt es keinen Grund, GoTos einzusetzen - nutze statt dessen Abbruch-Bedinungen:
[...] foreach (NetworkInterface adapter in adapters) { IPInterfaceProperties properties = adapter.GetIPProperties(); string dns = properties.DnsSuffix; if (dns == "fritz.box") { idx = i; break; //jumps out of the foreach loop! } i++; } if (idx == 99) { const string message = "Es wurde keine Verbindung zur fritz.box gefunden - Abbruch"; const string caption = "NetSpeedHK - keine fritz.box"; var result = MessageBox.Show(message, caption) [...]
-
Ich denke, ein anderer Ansatz würde hier besser funktionieren. Anstatt nach einem bestimmten Adapter zu suchen und dann für den die Statistik zu berechnen ist zu speziell. Andersherum die Statistik für alle Adapter zu bestimmen, und dann nur die Statistik für einen Adapter anzuzeigen, ist IMHO sinnvoller.
@hkdd ,@tbird
Ich würde das komplett in eine Funktion auslagern, die das NetworkInterface mit bestimmten Eigenschaften zurückgibt. Über Generics als Prädikat geht da bestimmt was. Wie gesagt, auf den Index würde ich nicht vertrauen.
-
Danke für Euere Hinweise.
Ich habe über die Methode nachgedacht und einen anderen Ansatz gefunden.
Nun wird bei allen Adaptern geprüft, ob es bereits Datenbewegungen gab.
Es müssen die virtuellen Adapter von VMware ausgeschlossen werden, da bei denen ebenfalls Datenbewegungen angezeigt werden.
Nach dem Namen FritzBox wird nicht mehr gefragt.Das Testprogramm sieht nun so aus
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.IO; using System.Threading.Tasks; using System.Net.NetworkInformation; using System.Runtime.InteropServices; namespace NetConsole { class Program { static void Main(string[] args) { DisplayDnsConfiguration(); } public static void DisplayDnsConfiguration() { int idx = 99; string NetIDX = ""; int i = 0; NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface adapter in adapters) { IPInterfaceProperties properties = adapter.GetIPProperties(); IPv4InterfaceStatistics interfaceStats = NetworkInterface.GetAllNetworkInterfaces()[i].GetIPv4Statistics(); decimal BySendReceived = interfaceStats.BytesSent + interfaceStats.BytesReceived; Console.WriteLine("Index {0} ~ {1}", i, adapter.Description); Console.WriteLine(" DNS suffix .............................. : {0}", properties.DnsSuffix); Console.WriteLine(" adapter.Description ..................... : {0}", adapter.Description); Console.WriteLine(" adapter.Name ............................ : {0}", adapter.Name); Console.WriteLine(" adapter.NetworkInterfaceType ............ : {0}", adapter.NetworkInterfaceType); string aName = adapter.Name; if (aName.Length > 6) { aName = adapter.Name.Substring(0, 6); } if ((BySendReceived > 0) & (aName != "VMware")) { idx = i; if (NetIDX.Length > 0) { NetIDX = NetIDX + " und "; } NetIDX = NetIDX + idx.ToString(); } i++; } Console.WriteLine(); Console.WriteLine("Netzwerk im Index: {0}", NetIDX); Console.ReadKey(); } } }
Das Ergebnis ist OK:
Index 0 ~ Realtek Gaming 2.5GbE Family Controller #2 DNS suffix .............................. : fritz.box adapter.Description ..................... : Realtek Gaming 2.5GbE Family Controller #2 adapter.Name ............................ : Ethernet 4 adapter.NetworkInterfaceType ............ : Ethernet Index 1 ~ RZ608 Wi-Fi 6E 80MHz DNS suffix .............................. : fritz.box adapter.Description ..................... : RZ608 Wi-Fi 6E 80MHz adapter.Name ............................ : WLAN adapter.NetworkInterfaceType ............ : Wireless80211 Index 2 ~ Microsoft Wi-Fi Direct Virtual Adapter DNS suffix .............................. : adapter.Description ..................... : Microsoft Wi-Fi Direct Virtual Adapter adapter.Name ............................ : LAN-Verbindung* 9 adapter.NetworkInterfaceType ............ : Wireless80211 Index 3 ~ Microsoft Wi-Fi Direct Virtual Adapter #2 DNS suffix .............................. : adapter.Description ..................... : Microsoft Wi-Fi Direct Virtual Adapter #2 adapter.Name ............................ : LAN-Verbindung* 10 adapter.NetworkInterfaceType ............ : Wireless80211 Index 4 ~ VMware Virtual Ethernet Adapter for VMnet1 DNS suffix .............................. : adapter.Description ..................... : VMware Virtual Ethernet Adapter for VMnet1 adapter.Name ............................ : VMware Network Adapter VMnet1 adapter.NetworkInterfaceType ............ : Ethernet Index 5 ~ VMware Virtual Ethernet Adapter for VMnet8 DNS suffix .............................. : adapter.Description ..................... : VMware Virtual Ethernet Adapter for VMnet8 adapter.Name ............................ : VMware Network Adapter VMnet8 adapter.NetworkInterfaceType ............ : Ethernet Index 6 ~ Bluetooth Device (Personal Area Network) #4 DNS suffix .............................. : adapter.Description ..................... : Bluetooth Device (Personal Area Network) #4 adapter.Name ............................ : Bluetooth-Netzwerkverbindung 4 adapter.NetworkInterfaceType ............ : Ethernet Index 7 ~ Software Loopback Interface 1 DNS suffix .............................. : adapter.Description ..................... : Software Loopback Interface 1 adapter.Name ............................ : Loopback Pseudo-Interface 1 adapter.NetworkInterfaceType ............ : Loopback Netzwerk im Index: 0
Und im Programm NetSpeedHK gibt jetzt es folgende Netzwerk-Erkennung-Routine:
idx = 99; int i = 0; int FoundCount = 0; NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface adapter in adapters) { IPInterfaceProperties properties = adapter.GetIPProperties(); IPv4InterfaceStatistics interfaceStats = NetworkInterface.GetAllNetworkInterfaces()[i].GetIPv4Statistics(); decimal BySendReceived = interfaceStats.BytesSent + interfaceStats.BytesReceived; string aName = adapter.Name; if (aName.Length > 6) { aName = adapter.Name.Substring(0, 6); } if ((BySendReceived > 0) & (aName != "VMware")) { FoundCount++; // Anzahl gefunden idx = i; } i++; } if ((idx == 99) || (FoundCount > 1)) { string Message = ""; if (idx == 99) { Message = "Es wurde keine Netzwerk-Verbindung gefunden - Abbruch"; } if (FoundCount > 1) { Message = "Es gibt mehrere Netzwerk-Verbindungen - Abbruch"; } const string Caption = "NetSpeedHK - keine Netzwerk-Verbindung"; MessageBox.Show(Message, Caption, MessageBoxButtons.OK); Application.Exit(); } }