You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中获取当前网络ID?求正确实现示例代码

获取C#中当前网络ID的正确方法

你之前的代码仅获取了本地IPv4地址,而网络ID需要结合IP地址和子网掩码通过按位与运算得到。以下是具体实现步骤和示例代码:

实现逻辑

  1. 遍历本地所有网络接口,筛选出处于启用状态且支持IPv4的接口
  2. 从接口的单播地址列表中,提取对应的IPv4地址和子网掩码
  3. 将IP地址与子网掩码的字节数组进行按位与运算,得到网络ID的字节数组
  4. 将字节数组转换为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:12:46