diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-11-12 14:19:30 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-11-12 14:19:30 -0500 |
| commit | 8e41918ac5880b2b72c676ac550011fd854ff0a1 (patch) | |
| tree | d9eeac9b74a150785cca21bbca87c06de32171a2 /MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs | |
| parent | e6329c46d17eef31aeedff57a672830ed569873d (diff) | |
update local network detection
Diffstat (limited to 'MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs')
| -rw-r--r-- | MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs | 54 |
1 files changed, 37 insertions, 17 deletions
diff --git a/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs b/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs index c27dfd68d..9b5fa726c 100644 --- a/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs +++ b/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs @@ -84,7 +84,15 @@ namespace MediaBrowser.Common.Implementations.Networking return true; } - private bool IsInPrivateAddressSpace(string endpoint) + private bool IsInPrivateAddressSpaceIpv6(string endpoint) + { + return + + // If url was requested with computer name, we may see this + string.Equals(endpoint, "::1", StringComparison.OrdinalIgnoreCase); + } + + private bool IsInPrivateAddressSpaceIpv4(string endpoint) { // Private address space: // http://en.wikipedia.org/wiki/Private_network @@ -96,9 +104,6 @@ namespace MediaBrowser.Common.Implementations.Networking return - // If url was requested with computer name, we may see this - endpoint.IndexOf("::", StringComparison.OrdinalIgnoreCase) != -1 || - endpoint.StartsWith("localhost", StringComparison.OrdinalIgnoreCase) || endpoint.StartsWith("127.", StringComparison.OrdinalIgnoreCase) || endpoint.StartsWith("10.", StringComparison.OrdinalIgnoreCase) || @@ -131,25 +136,40 @@ namespace MediaBrowser.Common.Implementations.Networking throw new ArgumentNullException("endpoint"); } - if (IsInPrivateAddressSpace(endpoint)) - { - return true; - } - - const int lengthMatch = 4; - - if (endpoint.Length >= lengthMatch) + IPAddress address; + if (IPAddress.TryParse(endpoint, out address)) { - var prefix = endpoint.Substring(0, lengthMatch); + int lengthMatch = 100; + if (address.AddressFamily == AddressFamily.InterNetwork) + { + lengthMatch = 4; + if (IsInPrivateAddressSpaceIpv4(endpoint)) + { + return true; + } + } + else if (address.AddressFamily == AddressFamily.InterNetworkV6) + { + lengthMatch = 10; + if (IsInPrivateAddressSpaceIpv6(endpoint)) + { + return true; + } + } - if (GetLocalIpAddresses() - .Any(i => i.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))) + // Should be even be doing this with ipv6? + if (endpoint.Length >= lengthMatch) { - return true; + var prefix = endpoint.Substring(0, lengthMatch); + + if (GetLocalIpAddresses() + .Any(i => i.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))) + { + return true; + } } } - IPAddress address; if (resolveHost && !IPAddress.TryParse(endpoint, out address)) { Uri uri; |
