diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-08-15 12:35:41 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-08-15 12:35:41 -0400 |
| commit | e3c86944718d68806ad42c4d14c964a72da90b44 (patch) | |
| tree | 521f7cf81f29ac302ce5545cdc5ecde66f977182 /MediaBrowser.ServerApplication/Networking/NetworkManager.cs | |
| parent | 9c5cceb4ecc277ffb5a3a988f655ad674bf41c58 (diff) | |
3.0.5340.20849
Diffstat (limited to 'MediaBrowser.ServerApplication/Networking/NetworkManager.cs')
| -rw-r--r-- | MediaBrowser.ServerApplication/Networking/NetworkManager.cs | 47 |
1 files changed, 44 insertions, 3 deletions
diff --git a/MediaBrowser.ServerApplication/Networking/NetworkManager.cs b/MediaBrowser.ServerApplication/Networking/NetworkManager.cs index e80c8ff3f..7a2e184b6 100644 --- a/MediaBrowser.ServerApplication/Networking/NetworkManager.cs +++ b/MediaBrowser.ServerApplication/Networking/NetworkManager.cs @@ -1,12 +1,13 @@ -using System.Globalization; -using System.IO; -using MediaBrowser.Common.Implementations.Networking; +using MediaBrowser.Common.Implementations.Networking; using MediaBrowser.Common.Net; using MediaBrowser.Model.IO; using MediaBrowser.Model.Net; using System; using System.Collections.Generic; +using System.Globalization; +using System.IO; using System.Linq; +using System.Net; using System.Runtime.InteropServices; namespace MediaBrowser.ServerApplication.Networking @@ -43,6 +44,46 @@ namespace MediaBrowser.ServerApplication.Networking }; } + public bool IsInLocalNetwork(string endpoint) + { + if (string.IsNullOrWhiteSpace(endpoint)) + { + throw new ArgumentNullException("endpoint"); + } + + IPAddress address; + if (!IPAddress.TryParse(endpoint, out address)) + { + return true; + } + + const int lengthMatch = 4; + + if (endpoint.Length >= lengthMatch) + { + var prefix = endpoint.Substring(0, lengthMatch); + + if (GetLocalIpAddresses() + .Any(i => i.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))) + { + return true; + } + } + + // Private address space: + // http://en.wikipedia.org/wiki/Private_network + + return + + // If url was requested with computer name, we may see this + endpoint.IndexOf("::", StringComparison.OrdinalIgnoreCase) != -1 || + + endpoint.StartsWith("10.", StringComparison.OrdinalIgnoreCase) || + endpoint.StartsWith("192.", StringComparison.OrdinalIgnoreCase) || + endpoint.StartsWith("172.", StringComparison.OrdinalIgnoreCase) || + endpoint.StartsWith("169.", StringComparison.OrdinalIgnoreCase); + } + /// <summary> /// To the type of the network share. /// </summary> |
