Windows-Server-2008

如何知道 Windows 防火牆上目前打開的埠?

  • May 25, 2015

在 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 上是否有有效執行此操作的命令?

使用相同命令無法獲得相同結果的原因是 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 上的這篇文章

引用自:https://serverfault.com/questions/221075