2017-06-07 2 views
0

In einem C# Programm, das ich für alle Adapter die Informationen bin immer mit: NetworkInterface.GetAllNetworkInterfaces()Wie kann ich den primären Adapter ermitteln, wenn Sie NetworkInterface.GetAllNetworkInterfaces() verwenden?

Doch wie kann ich feststellen, welche der primäre Adapter ist? Ich dachte ursprünglich, dass es der Adapter mit der niedrigsten Indexnummer ist, aber das scheint nicht der Fall zu sein.

+0

Was ist der "primäre Adapter", Sie nach? Jeder Adapter, der für IP aktiviert ist, nimmt möglicherweise am Datenverkehr teil. Was Sie wahrscheinlich suchen, ist die Schnittstellenverbindungsmetrik (wie sie von der WMI-Klasse ['Win32_NetworkAdapterConfiguration'] (https://msdn.microsoft.com/library/aa394217) in' IPConnectionMetric' bereitgestellt wird). Soweit ich das beurteilen kann, hat 'System.Net.NetworkInformation' keine Möglichkeit, das abzurufen. –

+0

@JeroenMostert danke für die Antwort. Angenommen, Sie haben zwei Adapter, und beide sind mit dem Internet verbunden. Wenn Sie den Internet Explorer starten, wie wählt er den zu verwendenden Adapter? –

+0

Es ist nicht, das ist auf einem Niveau unter IE. IE fragt einfach den DNS-Resolver nach der IP-Adresse der Site und beginnt dann mit dem Senden von Paketen. Welcher Adapter diese Pakete beendet, hängt von der Routentabelle ab ("route print" von der Befehlszeile), und diese wird wiederum sowohl vom Zielnetzwerk als auch von den Schnittstellenmetriken abgeleitet. (IE hat tatsächlich ein paar "Setup Internet" -Dingamajigs und Proxy-Overrides, so dass dies nicht ganz genau ist, aber das ist die allgemeine Geschichte für Netzwerk-Anwendungen, die nichts Besonderes tun.) Es ist möglich, dass eine Anwendung endet Verwenden mehrerer Adapter. –

Antwort

0

Wenn ich richtig verstehe, suchen Sie den aktiven Adapter, über den die Verbindung hergestellt wird? Ich tat dies:

string currentAdapter = ""; 

foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) { 
    if (ni.OperationalStatus == OperationalStatus.Up 
     && ni.NetworkInterfaceType != NetworkInterfaceType.Tunnel 
     && ni.NetworkInterfaceType != NetworkInterfaceType.Loopback) { 
     currentAdapter = (ni.Name); 
    } 
} 

This solution was found here

Verwandte Themen