[Modify] Add a host check

This commit is contained in:
sta 2016-06-01 14:45:49 +09:00
parent 6d24085b7a
commit b1883ec5f5

View File

@ -84,6 +84,8 @@ namespace WebSocketSharp.Net
var pref = new HttpListenerPrefix (uriPrefix); var pref = new HttpListenerPrefix (uriPrefix);
var addr = convertToIPAddress (pref.Host); var addr = convertToIPAddress (pref.Host);
if (!addr.IsLocal ())
throw new HttpListenerException (87, "Includes an invalid host.");
var port = pref.Port; var port = pref.Port;
@ -94,26 +96,12 @@ namespace WebSocketSharp.Net
if (path.IndexOf ("//", StringComparison.Ordinal) != -1) if (path.IndexOf ("//", StringComparison.Ordinal) != -1)
throw new HttpListenerException (87, "Includes an invalid path."); throw new HttpListenerException (87, "Includes an invalid path.");
// Listens on all the interfaces if host name cannot be parsed by IPAddress.
getEndPointListener (addr, port, pref.IsSecure, listener).AddPrefix (pref, listener); getEndPointListener (addr, port, pref.IsSecure, listener).AddPrefix (pref, listener);
} }
private static IPAddress convertToIPAddress (string hostname) private static IPAddress convertToIPAddress (string hostname)
{ {
if (hostname == "*" || hostname == "+") return hostname == "*" || hostname == "+" ? IPAddress.Any : hostname.ToIPAddress ();
return IPAddress.Any;
IPAddress addr;
if (IPAddress.TryParse (hostname, out addr))
return addr;
try {
var host = Dns.GetHostEntry (hostname);
return host != null ? host.AddressList[0] : IPAddress.Any;
}
catch {
return IPAddress.Any;
}
} }
private static EndPointListener getEndPointListener ( private static EndPointListener getEndPointListener (