using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets; using LANCommander.SDK.Abstractions; namespace LANCommander.SDK.Providers; public class NetworkInformationProvider : INetworkInformationProvider { public string GetMacAddress() { return NetworkInterface.GetAllNetworkInterfaces() .Where(nic => nic.OperationalStatus == OperationalStatus.Up && nic.NetworkInterfaceType != NetworkInterfaceType.Loopback) .Select(nic => nic.GetPhysicalAddress().ToString()) .FirstOrDefault(); } public string GetComputerName() { return Dns.GetHostName(); } public string GetIpAddress() { return Dns.GetHostEntry(Dns.GetHostName()).AddressList[0].ToString(); } /// /// Get active network interfaces on the system /// /// public IEnumerable GetNetworkInterfaces() { var networkInterfaces = NetworkInterface .GetAllNetworkInterfaces() .Where(i => i.OperationalStatus == OperationalStatus.Up && i.NetworkInterfaceType != NetworkInterfaceType.Loopback); return networkInterfaces; } public IEnumerable GetBroadcastAddresses() { var networkInterfaces = GetNetworkInterfaces(); foreach (var nic in networkInterfaces) { foreach (var ua in nic.GetIPProperties().UnicastAddresses) { if (ua.Address.AddressFamily == AddressFamily.InterNetwork) { var ip = ua.Address; var mask = ua.IPv4Mask; if (mask == null) continue; var ipBytes = ip.GetAddressBytes(); var maskBytes = mask.GetAddressBytes(); var broadcastBytes = new byte[4]; for (var i = 0; i < 4; i++) broadcastBytes[i] = (byte)(ipBytes[i] | (maskBytes[i] ^ 255)); yield return new IPAddress(broadcastBytes); } } } } }