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}SettingIDconnectionRegistryKey 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();
}
}
}
}
}
}
}