C#如何获取设备全部IP(含无线IP)及对应网卡适配器信息
解决多网卡环境下获取IP与对应适配器信息的方案
你当前使用的Dns.GetHostEntry方法仅能返回主机绑定的所有IP地址集合,无法关联IP对应的网卡适配器属性,因此无法实现按适配器类型/名称筛选的需求。
实现思路
使用.NET内置的System.Net.NetworkInformation.NetworkInterface类,可遍历系统所有网卡适配器,直接获取适配器名称、类型、运行状态、关联IP地址等全量信息,完美匹配筛选特定适配器IP的需求。
完整实现步骤
- 先引入所需命名空间
using System.Net.NetworkInformation; using System.Net.Sockets;
- 替换原有Form1_Load逻辑的代码示例
private void Form1_Load(object sender, EventArgs e) { // 获取系统所有网卡适配器 NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface adapter in adapters) { // 通用筛选:仅保留运行状态正常的网卡,不需要可注释 if (adapter.OperationalStatus != OperationalStatus.Up) continue; // 示例筛选1:仅保留无线WiFi网卡,不需要可注释 if (adapter.NetworkInterfaceType != NetworkInterfaceType.Wireless80211) continue; // 示例筛选2:仅保留名称包含"以太网"的有线网卡,不需要可注释 // if (!adapter.Name.Contains("以太网")) // continue; Console.WriteLine($"适配器名称:{adapter.Name}"); Console.WriteLine($"适配器描述:{adapter.Description}"); Console.WriteLine($"适配器类型:{adapter.NetworkInterfaceType}"); // 获取该适配器下的所有IP配置 IPInterfaceProperties ipProps = adapter.GetIPProperties(); foreach (UnicastIPAddressInformation ipInfo in ipProps.UnicastAddresses) { // 示例筛选:仅保留IPv4地址,不需要可注释 if (ipInfo.Address.AddressFamily != AddressFamily.InterNetwork) continue; Console.WriteLine($"对应IP地址:{ipInfo.Address}"); // 按需求赋值到UI控件,可区分不同适配器的IP赋值到不同label label5.Text += $" {ipInfo.Address}"; } Console.WriteLine("------------------------"); } }
常用筛选参数说明
- 筛选无线网卡:判断
adapter.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 - 筛选有线以太网网卡:判断
adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet - 筛选仅运行中的网卡:判断
adapter.OperationalStatus == OperationalStatus.Up - 按适配器名称精准筛选:判断
adapter.Name == "目标适配器全称" - 筛选仅IPv6地址:判断
ipInfo.Address.AddressFamily == AddressFamily.InterNetworkV6
内容的提问来源于stack exchange,提问作者Santosh Bhaskar
相关产品推荐
相关产品推荐

