如何知道Windows防火墙当前打开的端口?

如何知道Windows防火墙当前打开的端口?

在 Windows XP 和 Windows Server 2003 上,我可以使用以下命令了解 Windows 防火墙上当前打开的端口:

netsh firewall show state

但是,在 Windows 7 和 Hyper-V Server 2008 R2 上,当我输入该命令时,它显示:

当前所有网络接口上均未打开任何端口。

重要提示:命令已成功执行。
但是,“netsh 防火墙”已弃用;
请改用“netsh advfirewall 防火墙”。

显然,由于 NetBIOS NS、远程桌面和 Hyper-V 远程管理等服务正在运行,因此端口是开放的。

我尝试了一些“netsh advfirewall”显示命令,但没有办法找出 Windows 防火墙允许哪些端口。

了解当前开放的端口后,我可以确保允许必要且足够的流量进入,不多也不少。

浏览整套高级防火墙规则非常繁琐且容易出错。

Windows 7 和 Windows Server 2008 上是否有命令可以有效地执行此操作?

答案1

您无法使用相同命令获得相同结果的原因是 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 上发帖

相关内容