diff --git a/shadowsocks-csharp/Model/Server.cs b/shadowsocks-csharp/Model/Server.cs index 8ac3ad2f..b53df47d 100755 --- a/shadowsocks-csharp/Model/Server.cs +++ b/shadowsocks-csharp/Model/Server.cs @@ -1,6 +1,4 @@ using System; -using System.Net; -using System.Net.Sockets; using System.Text; using System.Text.RegularExpressions; @@ -41,27 +39,24 @@ namespace Shadowsocks.Model { return I18N.GetString("New server"); } - IPAddress addr; - if ( !IPAddress.TryParse( server, out addr ) ) { - Logging.Error( "Invalid server IP Address" ); + string serverStr; + // CheckHostName() won't do a real DNS lookup + var hostType = Uri.CheckHostName( server ); + if ( hostType == UriHostNameType.Unknown ) { + throw new FormatException("Invalid Server Address."); } - if ( remarks.IsNullOrEmpty() ) { - switch ( addr.AddressFamily ) { - case AddressFamily.InterNetwork: - return $"{server}:{server_port}"; - case AddressFamily.InterNetworkV6: - return $"[{server}]:{server_port}"; - } - } else { - switch ( addr.AddressFamily ) { - case AddressFamily.InterNetwork: - return $"{remarks} ({server}:{server_port})"; - case AddressFamily.InterNetworkV6: - return $"{remarks} ([{server}]:{server_port})"; - } + switch ( hostType ) { + case UriHostNameType.IPv6: + serverStr = $"[{server}]:{server_port}"; + break; + default: + // IPv4 and domain name + serverStr = $"{server}:{server_port}"; + break; } - // If reached here, boom. - return null; + return remarks.IsNullOrEmpty() + ? serverStr + : $"{remarks} ({serverStr})"; } public Server()