Try not to get the address via DNS, which may be deceiving or simply not working if for example there are no DNS records for the computer, but via the adapter settings, which is essentially the same ipconfig
does.
You can get all of the adapters with NetworkInterface.GetAllNetworkInterfaces()
. The NetworkInterfaceType
property let's you filter for Ethernet adapters as well as exclude the loop back adapter. You can also filter only for adapters in a particular status, e.g. up, with the OperationalStatus
property.
You can then loop through all the unicast addresses of the adapter and pick one of the IPv4 addresses from it, for example the first one encountered. Of course, if you have more adapters or addresses on one adapter this might still not be the one you're looking for. In that case you need to define how to recognize the one you want and implement that accordingly.
IPAddress ip = null;
IPAddress mask = null;
foreach (NetworkInterface networkInterface in NetworkInterface.GetAllNetworkInterfaces())
{
bool found = false;
if (networkInterface.NetworkInterfaceType == NetworkInterfaceType.Ethernet
&& networkInterface.OperationalStatus == OperationalStatus.Up
&& networkInterface.NetworkInterfaceType != NetworkInterfaceType.Loopback)
{
foreach (UnicastIPAddressInformation unicastIPAddressInformation in networkInterface.GetIPProperties().UnicastAddresses)
{
if (unicastIPAddressInformation.Address.AddressFamily == AddressFamily.InterNetwork)
{
ip = unicastIPAddressInformation.Address;
mask = unicastIPAddressInformation.IPv4Mask;
found = true;
break;
}
}
}
if (found)
{
break;
}
}