/// <summary> /// Builds a lookup table for the local network adapters. /// </summary> /// <returns>The created lookup table.</returns> public static IPLookupTable CreateLocal() { IPLookupTable result = new IPLookupTable(); NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces(); foreach (IPInterfaceProperties adapter in adapters.Where(x => x.NetworkInterfaceType != NetworkInterfaceType.Loopback).Select(x => x.GetIPProperties())) { string ipv4 = adapter.UnicastAddresses.FirstOrDefault(x => x.Address.AddressFamily == AddressFamily.InterNetwork).Address.ToString(); string ipv6 = adapter.UnicastAddresses.FirstOrDefault(x => x.Address.AddressFamily == AddressFamily.InterNetworkV6).Address.ToString(); result.Add(ipv4, ipv6); } return(result); }
private static async Task <string?> GetLocalIPv6Async(bool recurse) { string?ip = await GetAsync(IPv6LocalRetriever, TryGetLocalV6Async).ConfigureAwait(false); if (ip != null) { return(ip); } if (recurse) { string?ip4 = await GetLocalIPv4Async(false).ConfigureAwait(false); if (ip4 != null) { return(IPLookupTable.CreateLocal().GetIPv6(ip4)); } } return(IPLookupTable.CreateLocal().GetIPv6Addresses().FirstOrDefault()); }
private static string?GetLocalIPv6(bool recurse) { string?ip = Get(IPv6LocalRetriever, TryGetLocalV6); if (ip != null) { return(ip); } if (recurse) { string?ip4 = GetLocalIPv4(false); if (ip4 != null) { return(IPLookupTable.CreateLocal().GetIPv6(ip4)); } } return(IPLookupTable.CreateLocal().GetIPv6Addresses().FirstOrDefault()); }
/// <summary> /// Gets the local IPv6 addresses synchronously. /// </summary> /// <returns>Local IPv6 addresses that can be found.</returns> public static string[] GetLocalIPv6s() => IPLookupTable.CreateLocal().GetIPv6Addresses();