2017-01-30 3 views
1

In Windows-Systemsteuerung angeschlossen ist, können Sie eine Liste von Netzwerk-Schnittstellen/Verbindungen finden, die zeigt Folgendes:Namen des Netzwerks zu erhalten, die eine Netzwerk-Schnittstelle zu

network interfaces

in .NET Framework sind diese in der NetworkInterface Klasse dargestellt (und über NetworkInterface.GetAllNetworkInterfaces gefunden).

Als Referenz sagen, ich bin Eigenschaften von der Ethernet-Schnittstelle zu lesen - die NetworkInterface.Name Eigenschaft gibt "Ethernet", die NetworkInterface.Description Eigenschaft gibt "Realtek PCIe FE Family Controller".

Nichts in der Klasse scheint jedoch in der Lage zu sein, mir den Namen des Netzwerks zu erhalten, mit dem es verbunden ist (in diesem Fall "BELL024"). Wie würde ich diese Saite bekommen? Ich muss wissen, welchem ​​Netzwerk die Schnittstelle zugeordnet ist, nicht nur eine Liste der vorhandenen Netzwerke.

+0

Netzwerke haben keine Namen, sie haben Netzwerkadressen. Es kann einen DNS-Namen für das Netzwerk auf einem DNS-Server geben, aber das ist nicht inhärent im Netzwerk und ein DNS-Server könnte mehrere Namen für ein Netzwerk haben, oder unterschiedliche DNS-Server könnten unterschiedliche Namen für das Netzwerk haben. Wie ein Host ein Netzwerk aufruft, ist ziemlich willkürlich. Ein Benutzer könnte ein Wi-Fi-Netzwerk umbenennen, um Ethernet zu sagen, oder umgekehrt. –

+0

Ich verstehe. Wie hat Windows/dieser Host die Zeichenfolge "BELL024" für das Netzwerk ermittelt? Es spielt für mich keine Rolle, ob der Benutzer ihn umbenennen kann, ich möchte nur, dass er neben dem Namen der Netzwerkschnittstelle angezeigt wird, damit er leicht erkennen kann, in welches Netzwerk die App den Traffic leiten wird. – sawch

+0

Das ist etwas, das jemand in Windows eingegeben hat. Es ist möglicherweise die Windows-Arbeitsgruppe, die Windows entdeckt hat. Wenn es sich um einen Arbeitsgruppennamen handelt, könnte dieser auf mehreren Schnittstellen vorhanden sein. –

Antwort

1

Es stellt sich heraus, Informationen über jedes Netzwerk als ‚Netzwerk-Profil‘ von Windows-gespeichert ist, speichert seinen Namen und andere Informationen wie, ob es öffentlich oder nicht. Der Name kann von Benutzern in der Systemsteuerung geändert werden, aber in meiner Situation ist das kein Problem. Das Windows API Code Pack von Microsoft enthält die APIs, die zum Abrufen der Sammlung von Netzwerkprofilen erforderlich sind Da es eine Menge Bloat enthält, die ich nicht brauche, ist der Mindestcode, um die Windows API can be found here zu umbrechen.

Eine Sammlung der Netzwerkprofile können dann wie so gefunden werden:

//Get the networks that are currently connected to 
var networks = NetworkListManager.GetNetworks(NetworkConnectivityLevels.Connected); 

Jedes Objekt in der Sammlung ein Netzwerkprofil dar und enthält eine Sammlung von Objekten NetworkConnection. Jedes Objekt NetworkConnection scheint Informationen über die Verbindung einer Schnittstelle zum Basisnetzwerk zu enthalten.

foreach(Network network in networks) 
{ 
    //Name property corresponds to the name I originally asked about 
    Console.WriteLine("[" + network.Name + "]"); 

    Console.WriteLine("\t[NetworkConnections]"); 
    foreach(NetworkConnection conn in network.Connections) 
    { 
     //Print network interface's GUID 
     Console.WriteLine("\t\t" + conn.AdapterId.ToString()); 
    } 
} 

Die NetworkConnection.AdapterId Eigenschaft ist die gleiche Netzwerk-Interface-GUID, dass die NetworkInterface.Id Eigenschaft kennt.

So können Sie bestimmen, mit welchem ​​Netzwerk eine Schnittstelle verbunden ist, indem Sie prüfen, ob eine der Verbindungen des Netzwerks die gleiche ID wie die Schnittstelle hat. Beachten Sie, dass sie anders dargestellt sind, so dass Sie ein bisschen mehr Arbeit zu tun haben:

example image

Sowohl meine Wi-Fi und Ethernet-Schnittstellen zum BELL024 Netzwerk in dem obigen Beispiel verbunden sind.

+1

Hinweis: Guid.Parse zum einfachen Konvertieren der 'NetworkInterface.Id'-Zeichenfolge in den gleichen Typ wie NetworkConnection.AdapterId, dann Guid.Equals (...) – sawch

0

Sie können WMI verwenden, um nach Ihrem Netzwerknamen zu suchen. Sie können diesen Code als Beispiel verwenden:

ManagementScope oMs = new ManagementScope(); 
ObjectQuery oQuery = 
    new ObjectQuery("Select * From Win32_NetworkAdapter"); 
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs, oQuery); 
ManagementObjectCollection oReturnCollection = oSearcher.Get(); 
foreach (ManagementObject oReturn in oReturnCollection) 
{ 
    if (oReturn.Properties["NetConnectionID"].Value != null) 
     { 
      Console.WriteLine("Name : " + oReturn.Properties["NetConnectionID"].Value); 
     } 
} 
+0

Das scheint nur den Namen der Netzwerkschnittstelle zurückzugeben (die gleiche wie 'NetworkInterface.Name' Eigenschaft). Ich habe alle möglichen Eigenschaften dieser Methode durchlaufen und keiner von ihnen gibt den Namen des Netzwerks an, nach dem ich leider suche. – sawch

0

auf Windows 8 und Windows 2012 und höher können Sie WMI-Klasse MSFT_NetConnectionProfile von root/StandardCimv2 Namespace abfragen.

Es sollte nicht zu schwer sein, dies in C# umzuwandeln.

Get-WmiObject -Namespace root/StandardCimv2 -Class MSFT_NetConnectionProfile | Format-Table InterfaceAlias, Name 
Verwandte Themen