Qual função do Powershell poderia verificar se uma determinada porta está no estado LISTENING no host local?

3

Introdução

Objetivo: verificar se uma porta está em LISTENING state on localhost usando uma função do PowerShell

O seguinte comando:

New-Object Net.Sockets.TcpClient.Connect("127.0.0.1",10389)

resulta em:

PS C:\Windows\system32> New-Object Net.Sockets.TcpClient.Connect("127.0.0.1",10389)
At line:1 char:33
+ New-Object Net.Sockets.TcpClient.Connect("127.0.0.1",10389)
+                                 ~
Unexpected token ')' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

PS C:\Windows\system32>

Pergunta

Qual função do PowerShell pode ser usada para verificar se uma determinada porta está no estado LISTENING no host local?

    
por 030 17.06.2014 / 19:11

4 respostas

6

Se você estiver usando o PowerShell v3.0 + no Windows 8 / Server 2012 ou posterior, em vez de tentar se conectar à porta para determinar o estado, basta usar Get-NetTCPConnection :

Get-NetTCPConnection -State Listen

Para mim, isso é mais preciso, pois está lendo o status da porta no computador. Usar uma conexão para testar pode fazer parecer que não está "OUVINDO" quando estiver, se um firewall ou algo parecido atrapalhar ou algo assim.

    
por 17.06.2014 / 19:23
2

Primeiro, crie e armazene a conexão:

$connection = (New-Object Net.Sockets.TcpClient)
$connection.Connect("127.0.0.1",10389)

Em seguida, verifique se está conectado

if ($connection.Connected) {
    "We're connected"
    }

Ou como sugerido por Colyn1337

Try {
    $connection = (New-Object Net.Sockets.TcpClient)
    $connection.Connect("127.0.0.1",10389)
    "Connected"
    }
Catch {
    "Can't Connect"
    }
    
por 17.06.2014 / 19:20
1

Eu tentei adicionar isso à resposta do técnico, então esta é uma expansão dele. Você pode ajustar a saída assim:

Get-NetTCPConnection -State Listen | Where-Object {$_.LocalAddress -eq "192.168.56.1" -and $_.LocalPort -eq "139"}

Isso retornaria uma matriz de dados se estivesse ouvindo nessa porta. Se não houver ouvinte, ele retornará null e, portanto, não haverá necessidade de tratamento de erros.

    
por 17.06.2014 / 19:33
1

estava tudo pronto para dar a um dos Get-NetTCPConnection respostas a um upvote, afinal ele funcionou na minha máquina. Infelizmente, ele não funcionou nos servidores do Windows 2008 que estavam executando o Powershell 3.0 e tiveram que fazer a verificação.

No entanto, o seguinte funcionou perfeitamente

([Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties()).GetActiveTcpListeners() | Where Port -EQ 10389

    
por 02.04.2015 / 15:36