Windows-Server-2008
如何知道 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 上是否有有效執行此操作的命令?
使用相同命令無法獲得相同結果的原因是 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 上的這篇文章