在Windows XP和Windows Server 2003上,使用以下命令可以知道Windows防火墙上的当前打开的端口:
netsh firewall show state
但是,在Windows 7和Hyper-V Server 2008 R2上,当我给出这个命令时,它说:
目前没有端口在所有networking接口上打开。
重要提示:命令执行成功。
但是,“netsh防火墙”已过时;
改为使用“netsh advfirewall防火墙”。
显然有端口是开放的,因为诸如NetBIOS NS,远程桌面和Hyper-V远程pipe理等服务正在运行。
我尝试了一些“netsh advfirewall”显示命令,但没有find一个方法来找出哪些端口是允许的Windows防火墙。
知道目前开放的港口,我可以肯定,我允许必要的和足够的stream量通过,不多也不less。
浏览整套高级防火墙规则非常繁琐且容易出错。
Windows 7和Windows Server 2008上有没有一个命令可以有效地执行此操作?
使用相同命令无法获得相同结果的原因是,Win7防火墙规则可能是特定于单个应用程序的,并且根据networkingtypes(Private,Domain,Public),协议,端口等进行configuration。Powershell应该给你可以更好地查询这些信息并对其进行分类。 这里有一个快速的脚本,当我需要的时候,我必须转储我的configuration。
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上的这篇文章
这是旧的,但人们可能希望知道,你可以用“netstat”来做到这一点。 这个命令在开箱即用的Windows中已经可用了很长时间了。
例如,进入提升的命令提示符并使用netstat -a -b 。 除此之外,它列出了机器上的每个绑定端口,并且(尝试)向您显示拥有它的进程。