我知道netstat -s
Windows 上存在这个功能,但是它显示的信息比 Linux/OS X 少得多。它只给出了 8 个有关 TCP 的计数器,而在 Linux 上则超过 50 个。
我正在寻找任何与 TCP 相关的计数器,例如:
Linux:
TCPDSACKOldSent
、DelayedACKLocked
或。您可以TCPOFODrop
通过TCPDSACKIgnoredNoUndo
获得整套计数器cat /proc/net/netstat
。BSD/OS X:
rcvbyteafterwin
,rcvduppack
或rcvoobyte
。
是否有内置工具可以实现此目的?或者也许有一个系统调用可以让我检索此类信息?
答案1
不适用于内置工具。我能想到的唯一方法是使用 winpcap/npf 库来构建您自己的工具来构成您需要的统计数据。
与 Linux/BSD 相比,Windows 的网络堆栈被剥离了。因此需要 winpcap&npf 驱动程序。
我想补充一点,即使 Windows 防火墙也是伪无状态防火墙(第 4 层,它只检查 TCP 流量,不检查 ICMP 等(第 3 层)),而不是像 Linux 或 BSD 的机器那样的全状态第 3 层防火墙。所以它解释了为什么内置工具列出的数据少得多。
答案2
除了使用第三方产品之外...
netstat -s -e
或者你可以使用 WMI
例如:
wmic path Win32_PerfFormattedData_Tcpip_NetworkInterface
wmic path Win32_PerfFormattedData_Tcpip_TCPv4
wmic path Win32_PerfFormattedData_Tcpip_IPv4
上述操作需要与GET
参数一起使用,以便将目标集中在您想要的对象上,但您可以按原样运行它们以查看有哪些选择。
答案3
netsh interfaces ipv4 show {tcp,ip,udp}stats
通过 netstat 向您提供一些附加信息,但可能还不够。
答案4
对于像我一样偶然发现这个问题的人,这里还有几个选择
# List all TCP Connections
netstat -tanob
# List all Connections
netstat -anob
# List all TCP Connections with FQDN
netstat -tafob
# List all Connections with FQDN
netstat -afob
但我更喜欢使用 PowerShell 方式来获取非常有用的信息。
Get-NetTCPConnection |
Where-Object {$_.State -eq "Listen"} |
Sort-Object LocalPort |
Format-Table -AutoSize `
LocalAddress,
LocalPort,
RemoteAddress,
RemotePort,
State,
@{l="Process/Application";e={$(Get-Process -PID $_.OwningProcess | Select-Object ID,ProcessName).ProcessName}}
关于 PowerShell 方式的精彩文章,请访问https://sysnetdevops.com/2017/04/24/exploring-the-powershell-alternative-to-netstat/