在 C# 中以编程方式启用和禁用适配器的 IPv4 和 IPv6

Enable and Disable IPv4 and IPv6 of an adapter programmatically in C#

是否可以使用 C# 和 .Net 库或注册表 Enable/Disable 选定网络适配器的 IPv4 和 IPv6 协议?

看看:http://eniackb.blogspot.com/2009/07/how-to-disable-ipv6-in-windows-2008.html

基本上修改注册表以执行与使用 GUI 相同的操作。

您需要使用 INetCfgBindingPath::Enable 然后 INetCfg::Apply 方法(参见 here). Please look into code example for details: how to disable ipv6 programmatically

据我所知,nvspbind 可以在指定适配器上禁用或启用 IPv6 而无需重新启动 PC。而且我认为 nvspbind 是基于 INetCfg API.

我试过示例 How to disable IPv6 programmatically ,但它在我的电脑上不起作用。

但是,我找到了另一种无需直接编辑注册表即可解决问题的方法。

首先,我将向您展示如何使用 PowerShell 解决此问题。

我们有很多方法可以获取网卡的名称,例如在PowerShell上执行如下命令:

Get-NetAdapter

假设网卡名称是"Ethernet".

要启用 IPv6,请在 PowerShell 上执行以下命令:

enable-NetAdapterBinding -Name 'Ethernet' -ComponentID ms_tcpip6

要禁用 IPv6,请在 PowerShell 上执行以下命令:

disable-NetAdapterBinding -Name 'Ethernet' -ComponentID ms_tcpip6

要获取网卡的所有ComponentID,在PowerShell上执行以下命令:

Get-NetAdapterBinding -name 'Ethernet'

现在,我将向您展示如何使用 C# 执行此操作。

1.Install 将 "Microsoft.PowerShell.5.ReferenceAssemblies" 命名为您的项目的 nuget 包

2.If你想禁用IPv6,使用下面的代码

using (var powerShell = PowerShell.Create())
{
    powerShell.AddScript("Disable-NetAdapterBinding -Name 'Ethernet' -ComponentID ms_tcpip6");
    powerShell.Invoke();
    if (powerShell.HadErrors)
    {
        // Failed, do something
        return;
    }
    // Success, do something
    return;
}

3.Now,我相信你已经知道如何进行其他类似的操作了。