以编程方式断开网络连接

时间:2011-11-23 15:13:04

标签: c# .net unit-testing networking

有没有办法以编程方式临时断开.NET 4.0中的网络连接?

我知道我可以通过这样做来获得当前的网络连接状态......

System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()

但是出于测试目的,我想测试我的应用程序在丢失网络连接时的行为(没有物理拔掉网络电缆)。

谢谢, 克里斯。

2 个答案:

答案 0 :(得分:16)

你可以用WMI做到这一点。这是我们用来禁用物理适配器来测试这些类型场景的方法。

using System.Management;
using System.Linq;

namespace DisableNIC
{
    internal static class Program
    {
        private static void Main()
        {
            var wmiQuery = new SelectQuery("SELECT * FROM Win32_NetworkAdapter " +
                                            "WHERE NetConnectionId != null " +
                                              "AND Manufacturer != 'Microsoft' ");
            using (var searcher = new ManagementObjectSearcher(wmiQuery))
            {
                foreach (var item in searcher.Get().OfType<ManagementObject>())
                {
                    if ((string) item["NetConnectionId"] != "Local Area Connection")
                        continue;

                    using (item)
                    {
                        item.InvokeMethod("Disable", null);
                    }
                }
            }
        }
    }
}

您没有指明操作系统,但这适用于Windows 7和Windows 8。

注意您需要成为管理员才能运作。

答案 1 :(得分:1)

如果您使用的是托管Wifi API&#39;你可以简单地删除个人资料。这对我有用。

string xmlString = m_WlanInterface.GetProfileXml(ConnectionProfileString)

如果您需要重新连接到该网络,请务必保存xml配置文件:

 m_WlanInterface.SetProfile(Wlan.WlanProfileFlags.AllUser, xmlString, true);
 m_WlanInterface.Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, ConnectionProfileString);

然后你可以重复使用它

{{1}}