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

时间:2015-01-06 17:56:10

标签: c# winforms tcp-ip

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

3 个答案:

答案 0 :(得分:1)

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

基本上修改注册表以使用GUI。

答案 1 :(得分:1)

我尝试了示例How to disable IPv6 programmatically,但是在我的PC上不起作用。

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

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

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

  

Get-NetAdapter

让我们假设NIC名称为“以太网”。

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

  

enable-NetAdapterBinding-名称“以太网” -ComponentID ms_tcpip6

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

  

disable-NetAdapterBinding-名称'Ethernet'-ComponentID ms_tcpip6

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

  

Get-NetAdapterBinding-名称'Ethernet'

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

1。在项目中安装名为“ Microsoft.PowerShell.5.ReferenceAssemblies”的nuget程序包

2。如果要禁用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。现在,我相信您已经知道如何执行其他类似的操作。

答案 2 :(得分:0)

您需要使用INetCfgBindingPath::Enable然后使用INetCfg::Apply方法(请参阅here)。请查看代码示例以获取详细信息:how to disable ipv6 programmatically

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