How to Retrieve “Network Interfaces” in C#

Environment: C# .NET

The following code is used to retrieve the “network interfaces” in C#. You may recognize the “network interfaces” as “Network and Dial-up Connections”: You can access them by using “Start > Setting > Network and Dial-up Connections”. C# does not provide a simple way of retrieving this list. The solution includes two main steps, which follow:

Step 1: Retrieve the Network Adapters

Get all the Network Adapters, which are IP-enabled, and their Setting ID. We use the ManagementClass: Win32_NetworkAdapterConfiguration to achieve this. The “SettingID” property of the ManagementObject is actually the Registry key.

Step 2: Extract information from the Registry

According the “SettingID”, extract the following value from the Registry:

   HKEY_LOCAL_MACHINE
      SYSTEMCurrentControlSetcontrolNetwork{xxxxxx}
             <SettingID>connection

Where {xxxxxx} is an unknown value, there for we go over all the keys under SYSTEMCurrentControlSetcontrolNetwork and <SettingID> is the values we found in Step 1.


using Microsoft.Win32;
using System.Management;

// holds the network interfaces names (such as “Local Area
// Connection”)

private string[] networkInterfaces = new string[MAX_CONNECTIONS];

// holds the network interface Registry key (which is the SettingID
// of the adapter, such as: B76D5407-4610-499A-A8A5-50AAD2A2297E)

private string[] networkInterfacesSettingId =
new string[MAX_CONNECTIONS];

// holds the number of network interfaces found
private int numberOfNetworkInterfaces = 0;

// extract all the IP-enabled adapters and get their SettingID
// (which is the Registry key)

ManagementClass objMC = new ManagementClass(
“Win32_NetworkAdapterConfiguration”);
ManagementObjectCollection objMOC = objMC.GetInstances();

foreach(ManagementObject objMO in objMOC)
{
if( Convert.ToBoolean(objMO[“ipEnabled”]) == false )
continue;

string SettingID = “”;
try
{
networkInterfacesSettingId[numberOfNetworkInterfaces] =
(string)objMO[“SettingID”];
++numberOfNetworkInterfaces;
}
catch{}
}

if(numberOfNetworkInterfaces == 0)
{
MessageBox.Show(“No Network Interface were found on this local
machine”, “Error”, MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}

int j=0;

// The network interfaces are in the following path in the Registry:
// HKEY_LOCAL_MACHINESYSTEMCurrentControlSetcontrol
// Network{xxxxxx}SettingIDconnection

RegistryKey networkRegistry = currentMachineRegistry.OpenSubKey(
“SYSTEM\CurrentControlSet\control\Network”);
int num = networkRegistry.SubKeyCount;
string[] tmp = networkRegistry.GetSubKeyNames();
for(int i=0; i<num; ++i)
{
// get all the {xxxxxx} keys under ‘Network’
RegistryKey conReg = networkRegistry.OpenSubKey(tmp[i]);
if(conReg != null)
{
string[] tmp1 = conReg.GetSubKeyNames();
if(tmp1.Length > 0)
{
for(int k=0; k<tmp1.Length; ++k)
{
// get all the <SettingID> keys under ‘Network{xxxxxx}’
RegistryKey reg = conReg.OpenSubKey(tmp1[k]);
if(reg != null)
{
int gg = Array.BinarySearch(
networkInterfacesSettingId, 0,
numberOfNetworkInterfaces, tmp1[k]);
if(gg >= 0)
{
// This subkey was found in the
// networkInterfacesSettingId array – which means
// that this is a valid network interface –
// let’s get the interface name
// get the ‘connection’ key under
// ‘Network{xxxxxx}<SettingID>’

RegistryKey r = reg.OpenSubKey(“connection”);
if(r != null)
{
Object obj = r.GetValue(“Name”);
networkInterfaces[gg] = obj.ToString();
}
}
}
}
}
}
}

Downloads


Download source – 4 Kb

More by Author

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Must Read