Member 14525261 Ответов: 1

Как мы можем изменить этот код


Как мы можем изменить этот код, чтобы заблокировать порт в Брандмауэре Windows?

Imports System
Imports System.Linq
Imports System.Text
Imports NetFwTypeLib

Public Class form1
    
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim icfMgr As INetFwMgr = Nothing

        Try
            Dim TicfMgr As Type = Type.GetTypeFromProgID("HNetCfg.FwMgr")
            icfMgr = CType(Activator.CreateInstance(TicfMgr), INetFwMgr)
        Catch ex As Exception
            Return
        End Try

        Try
            Dim profile As INetFwProfile
            Dim portClass As INetFwOpenPort
            Dim TportClass As Type = Type.GetTypeFromProgID("HNetCfg.FWOpenPort")
            portClass = CType(Activator.CreateInstance(TportClass), INetFwOpenPort)
            profile = icfMgr.LocalPolicy.CurrentProfile
            portClass.Scope = NetFwTypeLib.NET_FW_SCOPE_.NET_FW_SCOPE_ALL
            portClass.Enabled = True
            portClass.Protocol = NetFwTypeLib.NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP
            portClass.Name = "111"
            portClass.Port = 8000
            profile.GloballyOpenPorts.Add(portClass)
            Return
            MsgBox("completed" + vbExclamation)
        Catch ex As Exception
            MsgBox(ex.Message)

        End Try
    End Sub
End Class


Что я уже пробовал:

Как мы можем изменить этот код, чтобы заблокировать порт в Брандмауэре Windows?

1 Ответов

Рейтинг:
1

RickZeeland

Смотрите пример в C# здесь: как заблокировать и разрешить любой конкретный порт с помощью c#[^]

Обратите внимание, что в приведенном примере формат строки неправильно заканчивается на a ):

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")


Member 14525261

В Примере непонятно куда записывают номера портов

Afzaal Ahmad Zeeshan

Есть четкий комментарий, указывающий порт, пожалуйста, прочитайте код еще раз, медленно.

Dave Kreskowiak

Ты серьезно? Разве вы не видели комментарий, который говорит "порт"?

Member 14525261

Вы преобразовали код в vb.net
Система Импорта.Во время выполнения.InteropServices

Общественного Класса Form1


Частная функция RunShellCommand(команда бывал как строка, список параметров бывал в строку, <из&ГТ; как byref вывод как строку, <из&ГТ; как byref поток stderr как String, необязательный бывал waitforcompletion в значение как булево = истина) как целое число
Dim psi As ProcessStartInfo = New ProcessStartInfo(команда)
пси.RedirectStandardInput = Истина
psi.RedirectStandardOutput = True
пси.RedirectStandardError = Истина
пси.Значение Свойства Useshellexecute = False В
psi.WindowStyle = ProcessWindowStyle.Скрытый
пси.CreateNoWindow = Истина
Dim proc As Process = процесс.Начало(пси)
Дим ео системы.ИО.Модулю записи StreamWriter = тез.Докл.StandardInput
Dim sr As System.IO.StreamReader = proc.StandardOutput
Дим, а система.ИО.Что streamreader = тез.Докл.StandardError
ув.Метода WriteLine(Палмс)
ув.Рядом()
stdout = sr.ReadToEnd()
stderr = se.ReadToEnd()
Если waitForCompletion, то proc.WaitForExit()
Возвращение тез.Докл.Exitcode содержит

Конечная Функция

Как сделать следующее преобразование кода в vb.net

RunShellCommand(
"netsh.exe",
Строка.Формат("advfirewall firewall add rule name=\"{0}\" dir=in action=block protocol={1} localport={2} profile={3}",
- Мое имя правила",
"протокол TCP",
4567, // порт
"Частная", // могут быть частными, домен, общественной или какой-либо
из потока stdout,
из потока stderr);


End Класса

RickZeeland

Дим результат как целое число = RunShellCommand("netsh.exe", ... стандартный вывод, стандартный вывод)
в VB нет эквивалента ключевого слова out, вам не нужно использовать его в вызове.