MSDN.WhiteKnight - Stack Overflow answers
Ответ на "C#: фильтрация ip-адресов"
Answer 830696
Добавьте ссылку на System.Management и используйте WMI-запрос к классу Win32_NetworkAdapter, у реальных интерфейсов должно быть PhysicalAdapter=true. Для получения Guid интерфейса можно использовать
NetworkInterface.GetAllNetworkInterfaces()
. Как-то так:using System.Net; using System.Net.Sockets; using System.Net.NetworkInformation; using System.Management; ... //Определяет, является ли адаптер физическим public static bool IsAdapterPhysical(string guid) { ManagementObjectCollection mbsList = null; ManagementObjectSearcher mbs = new ManagementObjectSearcher( "SELECT PhysicalAdapter FROM Win32_NetworkAdapter WHERE GUID = '" + guid + "'" ); bool res = false; using (mbs) { mbsList = mbs.Get(); foreach (ManagementObject mo in mbsList) { foreach (var p in mo.Properties) { if (p.Value != null) { res = (bool)p.Value; break; } else res = false; } } return res; } } //Получает все локальные IP-адреса public static List<IPAddress> GetIpAddresses() { List<IPAddress> res = new List<IPAddress>(10); var ifs = NetworkInterface.GetAllNetworkInterfaces(); foreach (var interf in ifs) { var ipprop=interf.GetIPProperties(); if (ipprop == null) continue; var unicast = ipprop.UnicastAddresses; if (unicast == null) continue; if (IsAdapterPhysical(interf.Id.ToString())) { //находим первый Unicast-адрес foreach (var addr in unicast) { if (addr.Address.AddressFamily != AddressFamily.InterNetwork) continue; res.Add(addr.Address); break; } } } return res; }
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.