How to obtain the current TCP/IP configuation for all adapters






4.40/5 (9 votes)
Aug 19, 2003
2 min read

86252

2896
An article on obtaining the current TCP/IP configuration for all .NET supported OSs.
Introduction
Obtaining the current TCP/IP configuration, is not provided by the standard .NET class libraries. In order to work on all the standard desktop OSs supported by .NET, at least two different approaches must be taken. For more recent OSs such as Windows XP, WMI contains objects that can be queried to obtain this information. The System.Management
namespace provides access to WMI objects in managed code. For older OSs like Windows 98, an entirely different approach is needed. Since running the .NET Framework on Windows 98 also requires Internet Explorer 5.x or higher we can also assume that the library IPHLPAPI.DLL is available. This library commonly called IPHelper provides the API calls needed to obtain network configuration. Since IPHLPAPI is not managed code, a managed code wrapper needs to be created to use the .NET Interop services to invoke IPHLPAPI routines.
Using the code
The source code project provides two classes. The primary class is called NetworkConfiguration
. NetworkConfiguration
makes the determination internally regarding whether to use WMI or IPHLPAPI.DLL. It provides public methods such as GetTCPIPSettings()
that returns an ArrayList
of AdapterTCPIPSettings
instances. AdapterSettings
contains the basic configuration data such as the adapter description, IP addresses, subnets, and gateways. There are several other methods in NetworkConfiguration
that serve as helper functions to obtain very task specific information from GetTCPIPSettings()
. GetDNSServers()
is one such method.
The second class is the managed code wrapper that calls into several APIs from IPHLPAPI.DLL. It is used internally by NetworkConfiguration
only for OSs that do not support WMI. This class can also be used outside of NetworkConfiguration
, if needed.
An example of using NetworkConfiguration
is provided in the downloadable example attached to this article. The following code snippet demonstrates enumerating through the adapters and doing something with its members.
using MooseNet;
...
ArrayList settings = NetworkConfiguration.GetTCPIPSettings();
foreach ( NetworkConfiguration.AdapterTCPIPSettings setting in settings )
{
if ( setting._description != null )
{
...
}
...
}
Points of interest
Something to keep in mind is that the WMI query can be rather slow. Do not call GetTCPIPSettings()
very often in your code. The helper methods in NetworkConfiguration
use a caching mechanism to avoid this. Another thing is that the AdapterSettings
instances will frequently contain null references for data that can not be obtained. This should be checked before using any of its values.
You will also notice that these classes are part of a namespace called MooseNet. MooseNet is my open source networking library written in C#. Please check out my project page at http://www.hypermoose.com. You will find many useful classes for handling protocols such as UPnP, SMTP, POP3 and DNS there.
History
- Initial version - August 10, 2003