I was working on an old ASP.NET application written in C#, which uses the following method to code to get the IP address of the server it runs on:

public string GetIPAddress()
{
   IPHostEntry Host = default(IPHostEntry);
   string Hostname = null;
   Hostname = System.Environment.MachineName;
   Host = Dns.GetHostEntry(Hostname);
   string IPAddress = "";
   foreach (IPAddress IP in Host.AddressList)
   {
      if (IP.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
      {
         IPAddress = Convert.ToString(IP);
      }
   }
   return IPAddress;
}

Apart from the doubt about the correctness of the code to obtain the IP address of the machine, at the line with the call to “Dns.GetHostEntry”, I got the following error: “System.Net.Sockets.SocketException (0x80004005): No such host is known”.

Consider that this code always worked in other environments, but on this server I got the exception above. I didn’t have much time, so I looked for a quick and dirty solution….

The problem seemed to be due to the fact that the call to “Dns.GetHostEntry” could not resolve the machine name in a valid Host object. So I tried to modify the windows file “host”, which you can find in “C:\Windows\System32\drivers\etc”, in the following way.

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost

# Added the following line to solve the "No such host is known" error...
10.0.0.5			SDAADMIN384759XXX

On the left you can see the IP address of the server (in this case a private IP address because the server is behind a NAT), and on the right you can see the host name. Pay attention: the host name you enter must match the host name you would get calling “System.Environment.MachineName”.

Using this workaround I managed to avoid the exception and get the application running without modifying the source code, maybe getting a wrong IP address but in this case it wasn’t important.