Назад | Перейти на главную страницу

Как узнать открытые в данный момент порты в брандмауэре Windows?

В Windows XP и Windows Server 2003 я могу узнать открытые в данный момент порты в брандмауэре Windows с помощью следующей команды:

netsh firewall show state

Однако в Windows 7 и Hyper-V Server 2008 R2, когда я даю эту команду, она говорит:

В настоящее время на всех сетевых интерфейсах нет открытых портов.

ВАЖНО: Команда выполнена успешно.
Однако "брандмауэр netsh" устарел;
используйте вместо этого "netsh advfirewall firewall".

Судя по всему, порты открыты, потому что работают такие службы, как NetBIOS NS, Remote Desktop и удаленное администрирование Hyper-V.

Я попробовал несколько команд show netsh advfirewall, но не смог узнать, какие порты разрешены брандмауэром Windows.

Зная текущие открытые порты, я могу быть уверен, что разрешаю пройти необходимый и достаточный трафик, ни больше, ни меньше.

Прохождение всего набора расширенных правил брандмауэра утомительно и чревато ошибками.

Есть ли команда в Windows 7 и Windows Server 2008, чтобы сделать это эффективно?

Причина, по которой вы не можете получить те же результаты, используя одни и те же команды, заключается в том, что правила брандмауэра Win7 могут быть специфичными для отдельного приложения и настраиваться для каждого типа сети (частная, домен, общедоступная), протокола, порта и т. Д. Powershell должен давать у вас гораздо лучший способ запросить эту информацию и отсортировать ее. Вот быстрый скрипт, который я должен сбросить свою конфигурацию, когда мне это нужно.

Function Get-EnabledRules
{
    Param($profile)
    $rules = (New-Object -comObject HNetCfg.FwPolicy2).rules
    $rules = $rules | where-object {$_.Enabled -eq $true}
    $rules = $rules | where-object {$_.Profiles -bAND $profile}
    $rules
}

$networkListManager = [Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]"{DCB00C01-570F-4A9B-8D69-199FDBA5723B}"))
 $connections = $networkListManager.GetNetworkConnections()
[int[] ] $connTypes = @()
$connTypes = ($connections | % {$_.GetNetwork().GetCategory()})
#$connTypes += 1
Write-Host $connTypes

$connTypes | ForEach-Object {Get-EnabledRules -profile $_ | sort localports,Protocol | format-table -wrap -autosize -property Name, @{Label="Action"; expression={$_.action}}, @{Label="Protocol"; expression={$_.protocol}}, localPorts,applicationname}

Во многом это было основано на этот разместить в MSDN