in src/log4net/Util/TypeConverters/IPAddressConverter.cs [73:139]
public object ConvertFrom(object source)
{
string str = source as string;
if (str != null && str.Length > 0)
{
try
{
#if NET_2_0 || NETCF_2_0
#if !NETCF_2_0
// Try an explicit parse of string representation of an IPAddress (v4 or v6)
IPAddress result;
if (IPAddress.TryParse(str, out result))
{
return result;
}
#endif
// Try to resolve via DNS. This is a blocking call.
// GetHostEntry works with either an IPAddress string or a host name
IPHostEntry host = Dns.GetHostEntry(str);
if (host != null &&
host.AddressList != null &&
host.AddressList.Length > 0 &&
host.AddressList[0] != null)
{
return host.AddressList[0];
}
#else
// Before .NET 2 we need to try to parse the IPAddress from the string first
// Check if the string only contains IP address valid chars
if (str.Trim(validIpAddressChars).Length == 0)
{
try
{
// try to parse the string as an IP address
return IPAddress.Parse(str);
}
catch(FormatException)
{
// Ignore a FormatException, try to resolve via DNS
}
}
// Try to resolve via DNS. This is a blocking call.
#if NETSTANDARD
IPHostEntry host = Dns.GetHostEntryAsync(str).GetAwaiter().GetResult();
#else
IPHostEntry host = Dns.GetHostByName(str);
#endif
if (host != null &&
host.AddressList != null &&
host.AddressList.Length > 0 &&
host.AddressList[0] != null)
{
return host.AddressList[0];
}
#endif
}
catch(Exception ex)
{
throw ConversionNotSupportedException.Create(typeof(IPAddress), source, ex);
}
}
throw ConversionNotSupportedException.Create(typeof(IPAddress), source);
}