如何列出 IIS 服务器中所有活动和唯一的 ips 连接

How can I list all active and unique ips connections in a IIS server

我正在尝试列出 IIS 服务器中的所有活动连接,但我不知道如何实现。我正在研究一些方法并尝试在 Powershell 中制作一个脚本,该脚本提取 特定端口中的所有连接数 (如 80 端口)和 一些特定端口中的唯一连接(如 80 端口)。

我需要此信息,因为在某些情况下,我可以基于同一 IP 多次访问此服务器,因此我需要过滤此 IP 访问并查看两个数字,一个显示所有活动连接,另一个显示所有唯一连接连接。

感谢帮助!!

您可以使用 appcmd:

列出 IIS 当前正在 处理 的所有活动请求
appcmd list requests

我故意在上面使用 "process" 这个词的原因是 IIS 实际上没有 handle/terminate HTTP 连接 - 处理连接的低级细节工作被卸载到 OS 级 HTTP 驱动程序 (http.sys)。

如果可以直接从内核缓存中为请求提供服务,它可能会抢占请求处理,并且这样的请求永远不会出现在请求列表中。要查看机器的活动 连接 ,您要么必须断开 netstat:

$Connections = netstat -aon |findstr ":80 "

或使用 .NET do something similar:

$GlobalIPProperties = [System.Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties()
$Connections = $GlobalIPProperties.GetActiveTcpConnections() |Where-Object { $_.LocalEndpoint.Port -eq 80 }

在 Windows 2012/8 或更新版本中,您还可以使用 Get-NetTCPConnection cmdlet:

$Connections = Get-NetTCPConnection -LocalPort 80 

后一个选项很好,因为之后您可以轻松地与 $Connections 中的对象进行交互(即不需要进行字符串处理)。例如按 IP 对连接进行分组:

# If using IPGlobalProperties
$DistinctIPCount = @($Connections |Group {$_.RemoteEndpoint.Address}).Count

# If using Get-NetTCPConnection
$DistinctIPCount = @($Connections |Group {$_.RemoteAddress}).Count

已解决!

我没有使用 netstat 命令,而是使用 Get-NetTCPConnection 资源,基于 these articles

因此,我过滤了在端口 80 中建立的所有连接,并按外部地址(命名为 RemoteAddress)分组。

  • $count_unique_ips = Get-NetTCPConnection -LocalPort 80 -State 成立 |组 RemoteAddress -NoElement
  • $count_unique_ips.count

并且基于that link我已经解决了在端口 80 列出所有连接的问题。

  • $c = netstat –aon |查找字符串“:80” | select-string “ESTABLISHED” ;
  • $c.count