我目前有一台服务器,上面设置了5个IP。在这台服务器上,我运行了一个名为TCAdmin的游戏服务器管理系统,将游戏服务器分配给IP和端口。我正在尝试使用Powershell从该池获取到特定IP的UDP连接列表。这些连接将是该游戏服务器上当前在线的玩家。但是,当我运行netstat来查看所有连接时,没有显示的TCP或UDP连接。我只是得到一个看起来像这样的项目列表:
UDP xx.xx.xx.122:138 *:* 4
我知道有20多个玩家连接到这个特定的游戏服务器,所以我对如何使用netstat或其他内置工具编写脚本以获取20多个玩家连接感到茫然。
感谢任何帮助或指示!
答案 0 :(得分:0)
找到了这个 https://learn-powershell.net/2011/02/21/querying-udp-ports-with-powershell/
function Get-NetworkStatistics
{
$properties = ‘Protocol’,’LocalAddress’,’LocalPort’
$properties += ‘RemoteAddress’,’RemotePort’,’State’,’ProcessName’,’PID’
netstat -ano | Select-String -Pattern ‘\s+(TCP|UDP)’ | ForEach-Object {
$item = $_.line.split(” “,[System.StringSplitOptions]::RemoveEmptyEntries)
if($item[1] -notmatch ‘^\[::’)
{
if (($la = $item[1] -as [ipaddress]).AddressFamily -eq ‘InterNetworkV6’)
{
$localAddress = $la.IPAddressToString
$localPort = $item[1].split(‘\]:’)[-1]
}
else
{
$localAddress = $item[1].split(‘:’)[0]
$localPort = $item[1].split(‘:’)[-1]
}
if (($ra = $item[2] -as [ipaddress]).AddressFamily -eq ‘InterNetworkV6’)
{
$remoteAddress = $ra.IPAddressToString
$remotePort = $item[2].split(‘\]:’)[-1]
}
else
{
$remoteAddress = $item[2].split(‘:’)[0]
$remotePort = $item[2].split(‘:’)[-1]
}
New-Object PSObject -Property @{
PID = $item[-1]
ProcessName = (Get-Process -Id $item[-1] -ErrorAction SilentlyContinue).Name
Protocol = $item[0]
LocalAddress = $localAddress
LocalPort = $localPort
RemoteAddress =$remoteAddress
RemotePort = $remotePort
State = if($item[0] -eq ‘tcp’) {$item[3]} else {$null}
} | Select-Object -Property $properties
}
}
}
Get-NetworkStatistics | Format-Table