Цитата связанная запись в блоге :
Есть пара эвристик, когда класс не стоит насмехаться. Во-первых, у него есть только аксессоры или простые методы, которые действуют на ценности, которые он держит, у него нет никакого интересного поведения. Во-вторых, вы не можете думать о значимом имени для класса, отличного от VideoImpl или какого-то такого неопределенного термина.
blockquote>Подразумевается первая точка в контексте раздела под названием «Дон 't mock values objects ", это объекты с объектами не имеют интересного поведения.
Если вы используете Windows Vista, вы можете использовать встроенный брандмауэр для блокировки любого доступа в Интернет.
Следующий код создает правило брандмауэра, которое блокирует любые исходящие подключения на всех ваших сетевые адаптеры:
using NetFwTypeLib; // Located in FirewallAPI.dll
...
INetFwRule firewallRule = (INetFwRule)Activator.CreateInstance(
Type.GetTypeFromProgID("HNetCfg.FWRule"));
firewallRule.Action = NET_FW_ACTION_.NET_FW_ACTION_BLOCK;
firewallRule.Description = "Used to block all internet access.";
firewallRule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_OUT;
firewallRule.Enabled = true;
firewallRule.InterfaceTypes = "All";
firewallRule.Name = "Block Internet";
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(
Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
firewallPolicy.Rules.Add(firewallRule);
Затем удалите правило, если вы снова хотите разрешить доступ в Интернет:
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(
Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
firewallPolicy.Rules.Remove("Block Internet");
Это небольшая модификация некоторого другого кода, который я использовал, поэтому я не могу дать никаких гарантий, что он будет работать . Еще раз имейте в виду, что для этого вам потребуется Windows Vista (или более поздняя версия) и права администратора.
Это то, что я сейчас использую (моя идея, а не API):
System.Diagnostics;
void InternetConnection(string str)
{
ProcessStartInfo internet = new ProcessStartInfo()
{
FileName = "cmd.exe",
Arguments = "/C ipconfig /" + str,
WindowStyle = ProcessWindowStyle.Hidden
};
Process.Start(internet);
}
Отключение от Интернета: InternetConnection("release");
Подключение к Интернету: InternetConnection("renew");
Отключение просто лишит вас доступа к Интернету (на значке Wi-Fi появится значок предупреждения). Подключение может занять пять секунд или более.
Не по теме :
В любом случае вы можете проверить, подключены ли вы или нет (когда вы используете код выше), я лучше предлагаю это:
System.Net.NetworkInformation;
public static bool CheckInternetConnection()
{
try
{
Ping myPing = new Ping();
String host = "google.com";
byte[] buffer = new byte[32];
int timeout = 1000;
PingOptions pingOptions = new PingOptions();
PingReply reply = myPing.Send(host, timeout, buffer, pingOptions);
return (reply.Status == IPStatus.Success);
}
catch (Exception)
{
return false;
}
}
Вот пример программы, которая делает это, используя объекты управления WMI.
В этом примере я нацеливаюсь на мой беспроводной адаптер, ища сетевые адаптеры с названием «Wireless» в их названии. Вы можете найти некоторую подстроку, которая идентифицирует имя целевого адаптера (вы можете получить имена, выполнив ipconfig /all
в командной строке). Если не передать подстроку, это может пройти через все адаптеры, что довольно серьезно. Вам нужно будет добавить ссылку на System.Management в свой проект.
using System;
using System.Management;
namespace ConsoleAdapterEnabler
{
public static class NetworkAdapterEnabler
{
public static ManagementObjectSearcher GetWMINetworkAdapters(String filterExpression = "")
{
String queryString = "SELECT * FROM Win32_NetworkAdapter";
if (filterExpression.Length > 0)
{
queryString += String.Format(" WHERE Name LIKE '%{0}%' ", filterExpression);
}
WqlObjectQuery query = new WqlObjectQuery(queryString);
ManagementObjectSearcher objectSearcher = new ManagementObjectSearcher(query);
return objectSearcher;
}
public static void EnableWMINetworkAdapters(String filterExpression = "")
{
foreach (ManagementObject adapter in GetWMINetworkAdapters(filterExpression).Get())
{
//only enable if not already enabled
if (((bool)adapter.Properties["NetEnabled"].Value) != true)
{
adapter.InvokeMethod("Enable", null);
}
}
}
public static void DisableWMINetworkAdapters(String filterExpression = "")
{
foreach (ManagementObject adapter in GetWMINetworkAdapters(filterExpression).Get())
{
//If enabled, then disable
if (((bool)adapter.Properties["NetEnabled"].Value)==true)
{
adapter.InvokeMethod("Disable", null);
}
}
}
}
class Program
{
public static int Main(string[] args)
{
NetworkAdapterEnabler.DisableWMINetworkAdapters("Wireless");
Console.WriteLine("Press any key to continue");
var key = Console.ReadKey();
NetworkAdapterEnabler.EnableWMINetworkAdapters("Wireless");
Console.WriteLine("Press any key to continue");
key = Console.ReadKey();
return 0;
}
}
}
public static void BlockingOfData()
{
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
firewallPolicy.set_DefaultOutboundAction(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN, NET_FW_ACTION_.NET_FW_ACTION_BLOCK);
firewallPolicy.set_DefaultOutboundAction(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE, NET_FW_ACTION_.NET_FW_ACTION_BLOCK);
firewallPolicy.set_DefaultOutboundAction(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC, NET_FW_ACTION_.NET_FW_ACTION_BLOCK);
}
На самом деле существует множество способов отключить (Читать: прервать) ваш доступ в Интернет, но я думаю, что самым простым из них было бы выключить сетевой интерфейс, который соединяет вас с Интернетом.
Вот ссылка, с которой можно начать: Идентификация активного сетевого интерфейса