【问题标题】:Can you change the Interface Metric on a NIC using C#?您可以使用 C# 更改 NIC 上的接口指标吗?
【发布时间】:2018-04-04 04:05:12
【问题描述】:

可以手动更改接口指标,方法是进入 NIC 属性并选择“Internet 协议版本 4 (TCP/IPv4)”属性,然后单击“高级”。

系统使用接口度量来确定使用哪个 NIC 的优先级。

无论如何,我正在编写一个测试,我需要在同一子网上的 NIC 之间来回切换,以便我可以控制我正在使用的外部设备上的哪个连接。 (外部设备只有一个 IP 地址,但可以通过有线或 Wifi 访问)我需要测试这两个连接。

那么,如何通过 .net 在 C# 中以编程方式修改其中一个 NIC 上的接口度量?我看过 C++ 中的示例,但我正在寻找一种将 C# 与 .net 结合使用的方法。我正在尝试编写干净的代码而不将旧库推入其中。

【问题讨论】:

  • 不完全。另一个问题的答案使用 C++ 代码,而不是带有 .net 的 c#
  • 查看 System.Management 命名空间来进行这种机器操作。 Win32_NetworkAdapterConfiguration 类有 SetIPConnectionMetric() 方法,听起来很有希望。从 WMI Code Creator 实用程序开始,它可以让您试验并为您编写 C# 代码。

标签: c# .net nic interface-metric


【解决方案1】:

我发现了一种在 C# 中使用 netsh.exe 的非常简单的方法。

这仅在您以管理员身份运行程序时才有效。

命令行是:

netsh.exe interface ipv4 set interface "myNICsName" metric=20

要将指标设置为“自动”,只需将其设置为 0。 上限是 9999,但如果您使用更高的值,它只会为您设置为 9999。

要以编程方式执行此操作,只需按以下方式使用 Process.Start:

        System.Diagnostics.Process p = new System.Diagnostics.Process
        {
            StartInfo =
            {
                FileName = "netsh.exe",
                Arguments = $"interface ipv4 set interface \"{nicName}\" metric={metric}",
                UseShellExecute = false,
                RedirectStandardOutput = true
            }
        };

        bool started = p.Start();

        if (started)
        {
            if (SpinWait.SpinUntil(() => p.HasExited, TimeSpan.FromSeconds(20)))
            {
                Log.Write($"Successfully set {nicName}'s metric to {metric}");
                Log.Write($"Sleeping 2 seconds to allow metric change on {nicName} to take effect.");
                Thread.Sleep(2000);

                return true;
            }

            Log.Write($"Failed to set {nicName}'s metric to {metric}");
            return false;
        }

上面的代码还进行了一些错误检查,以确保进程确实启动并进行了短暂的延迟,以便度量更改有机会生效。我发现当我没有包含延迟时,我的代码中出现了一些问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 2012-02-21
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多