通过Powershell获取UDP连接列表

时间:2016-07-07 02:06:14

标签: sockets powershell tcp

我目前有一台服务器,上面设置了5个IP。在这台服务器上,我运行了一个名为TCAdmin的游戏服务器管理系统,将游戏服务器分配给IP和端口。我正在尝试使用Powershell从该池获取到特定IP的UDP连接列表。这些连接将是该游戏服务器上当前在线的玩家。但是,当我运行netstat来查看所有连接时,没有显示的TCP或UDP连接。我只是得到一个看起来像这样的项目列表:

 UDP    xx.xx.xx.122:138      *:*                                    4

我知道有20多个玩家连接到这个特定的游戏服务器,所以我对如何使用netstat或其他内置工具编写脚本以获取20多个玩家连接感到茫然。

感谢任何帮助或指示!

1 个答案:

答案 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