如何在C#中获取当前网络ID?求正确实现示例代码
获取C#中当前网络ID的正确方法
你之前的代码仅获取了本地IPv4地址,而网络ID需要结合IP地址和子网掩码通过按位与运算得到。以下是具体实现步骤和示例代码:
实现逻辑
- 遍历本地所有网络接口,筛选出处于启用状态且支持IPv4的接口
- 从接口的单播地址列表中,提取对应的IPv4地址和子网掩码
- 将IP地址与子网掩码的字节数组进行按位与运算,得到网络ID的字节数组
- 将字节数组转换为
IPAddress对象,最终转为字符串形式的网络ID
示例代码
using System; using System.Linq; using System.Net; using System.Net.NetworkInformation; public class NetworkIdTool { public static string GetCurrentNetworkId() { // 筛选有效网络接口:启用状态、非回环、支持IPv4 var validInterfaces = NetworkInterface.GetAllNetworkInterfaces() .Where(nic => nic.OperationalStatus == OperationalStatus.Up && nic.NetworkInterfaceType != NetworkInterfaceType.Loopback && nic.Supports(NetworkInterfaceComponent.IPv4)); foreach (var nic in validInterfaces) { // 提取接口的IPv4单播地址 var ipv4Addresses = nic.GetIPProperties().UnicastAddresses .Where(addr => addr.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork); foreach (var addrInfo in ipv4Addresses) { IPAddress ip = addrInfo.Address; IPAddress subnetMask = addrInfo.IPv4Mask; // 跳过未分配子网掩码的情况 if (subnetMask == null) continue; // 按位与计算网络ID byte[] ipBytes = ip.GetAddressBytes(); byte[] maskBytes = subnetMask.GetAddressBytes(); byte[] networkBytes = new byte[4]; for (int i = 0; i < 4; i++) { networkBytes[i] = (byte)(ipBytes[i] & maskBytes[i]); } return new IPAddress(networkBytes).ToString(); } } // 未找到有效网络时返回空字符串 return string.Empty; } // 测试调用示例 public static void Main() { string networkId = GetCurrentNetworkId(); Console.WriteLine($"当前网络ID: {networkId}"); } }
补充说明
- 代码自动跳过回环接口(如127.0.0.1),仅获取真实物理/虚拟网络接口的信息
- 处理了子网掩码未分配的异常场景,避免运行时错误
- 若存在多个有效网络接口,会返回第一个匹配到的网络ID
内容的提问来源于stack exchange,提问作者neha
相关产品推荐
相关产品推荐

