diff options
| author | tikuf <admin@nyalindee.com> | 2014-04-16 10:14:20 +1000 |
|---|---|---|
| committer | tikuf <admin@nyalindee.com> | 2014-04-16 10:14:20 +1000 |
| commit | 13196544c2ca525068e34d23bd98da551943bbca (patch) | |
| tree | ad9894c55a3f3078c15b7622f424b950524b4e2b /MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs | |
| parent | f9eede391b2de2ce80e75d8345aade14f70f1b9d (diff) | |
| parent | ab5f8ed13679dbe1763cafc599a8f566a36a4a14 (diff) | |
Merge branch 'master' of https://github.com/MediaBrowser/MediaBrowser
Diffstat (limited to 'MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs')
| -rw-r--r-- | MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs b/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs index ac6b9290e..e15c32518 100644 --- a/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs +++ b/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs @@ -16,6 +16,44 @@ namespace MediaBrowser.Common.Implementations.Networking /// <returns>IPAddress.</returns> public IEnumerable<string> GetLocalIpAddresses() { + var list = GetIPsDefault().Where(i => !IPAddress.IsLoopback(i)).Select(i => i.ToString()).ToList(); + + if (list.Count > 0) + { + return list; + } + + return GetLocalIpAddressesFallback(); + } + + private IEnumerable<IPAddress> GetIPsDefault() + { + foreach (var adapter in NetworkInterface.GetAllNetworkInterfaces()) + { + var props = adapter.GetIPProperties(); + var gateways = from ga in props.GatewayAddresses + where !ga.Address.Equals(IPAddress.Any) + select true; + + if (!gateways.Any()) + { + continue; + } + + foreach (var uni in props.UnicastAddresses) + { + var address = uni.Address; + if (address.AddressFamily != AddressFamily.InterNetwork) + { + continue; + } + yield return address; + } + } + } + + private IEnumerable<string> GetLocalIpAddressesFallback() + { var host = Dns.GetHostEntry(Dns.GetHostName()); // Reverse them because the last one is usually the correct one @@ -25,7 +63,7 @@ namespace MediaBrowser.Common.Implementations.Networking .Select(i => i.ToString()) .Reverse(); } - + /// <summary> /// Gets a random port number that is currently available /// </summary> @@ -50,6 +88,7 @@ namespace MediaBrowser.Common.Implementations.Networking .Select(i => BitConverter.ToString(i.GetPhysicalAddress().GetAddressBytes())) .FirstOrDefault(); } + /// <summary> /// Parses the specified endpointstring. /// </summary> |
