owais2012 Ответов: 1

как заблокировать и разрешить любой конкретный порт с помощью c#


I am developing port scanning tool using c#.that successfully retrieve a list of all open ports.along with the incoming packet details.
But Now i want to block and allow any specific port. I have been looking for someone help to guide me,how to block ports in windows using c#.

1 Ответов

Рейтинг:
7

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#?..