pt1401
Вызов команды оболочки (netsh.exe). Предполагая, что вы используете Vista или более позднюю версию, это будет примерно так:-
RunShellCommand(
"netsh.exe",
String.Format("advfirewall firewall add rule name=\"{0}\" dir=in action=block protocol={1} localport={2} profile={3}",
"My rule name",
"TCP",
4567, // Port
"Private", // Can be Private, Domain, Public or Any
out stdout,
out stderr);
Который использует этот вспомогательный метод:-
private int RunShellCommand(string command, string parms, out string stdout, out string stderr, bool waitForCompletion = true)
{
ProcessStartInfo psi = new ProcessStartInfo(command);
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.UseShellExecute = false;
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.CreateNoWindow = true;
Process proc = Process.Start(psi);
System.IO.StreamWriter sw = proc.StandardInput;
System.IO.StreamReader sr = proc.StandardOutput;
System.IO.StreamReader se = proc.StandardError;
sw.WriteLine(parms);
sw.Close();
stdout = sr.ReadToEnd();
stderr = se.ReadToEnd();
if (waitForCompletion)
proc.WaitForExit();
return proc.ExitCode;
}
запустите" netsh advfirewall firewall add rule/? " в командной строке для синтаксиса.
owais2012
Спасибо, сэр, что дали мне дорогу.Этот код был хорошо проработан.теперь я могу легко добавлять и блокировать любую службу входящего трафика, определяя их правила с помощью c#. но теперь я сталкиваюсь с большой проблемой при проверке определяющего правила,потому что одно и то же правило может быть сделано несколько раз на одном и том же порту,одном и том же имени службы, одном и том же протоколе.
Теперь я хочу какое-то исключение из правил,больше одного правила не может быть сделано на одном и том же порту.
Можете ли вы помочь нам в том, как проверить правила брандмауэра с помощью C#?..