如何列出 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
我正在尝试列出 IIS 服务器中的所有活动连接,但我不知道如何实现。我正在研究一些方法并尝试在 Powershell 中制作一个脚本,该脚本提取 特定端口中的所有连接数 (如 80 端口)和 一些特定端口中的唯一连接(如 80 端口)。
我需要此信息,因为在某些情况下,我可以基于同一 IP 多次访问此服务器,因此我需要过滤此 IP 访问并查看两个数字,一个显示所有活动连接,另一个显示所有唯一连接连接。
感谢帮助!!
您可以使用 appcmd
:
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