您可以使用C#更改NIC上的接口度量标准吗?

时间:2018-04-03 17:46:06

标签: c# .net nic interface-metric

可以通过进入NIC属性并选择“Internet协议版本4(TCP / IPv4)”属性,然后单击“高级”来手动更改接口度量标准。

系统使用接口度量标准来确定要使用的NIC的优先级。

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

那么,如何在C#到.net中以编程方式修改其中一个网卡上的接口度量标准?我在C ++中看过一些例子,但是我正在寻找一种使用C#和.net来实现它的方法。我正在尝试编写干净的代码而不将旧库推入其中。

1 个答案:

答案 0 :(得分:-1)

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

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

命令行是:

        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;
        }

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

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

{{1}}

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