Comandos nativos do Windows para monitorar a porta remota para disponibilidade do serviço

0

Similar Question: How to tell if Remote Desktop service is running and available?

Eu pesquisei em torno de respostas para o problema de "Como faço ping em uma porta específica?" e encontrei várias soluções. Mesmo antes de pesquisar, estava bem ciente de que "ping" não é nem remotamente a ferramenta adequada para o trabalho, mas é a ferramenta mais próxima em termos de funcionalidade para o que estou procurando fazer.

A maioria das soluções para o problema "pingar uma porta" depende do nmap ou de outras ferramentas não nativas, e geralmente elas são escritas de tal forma que são úteis apenas para uma verificação única. O que eu quero fazer é poder monitorar continuamente uma porta em um host remoto, para que eu possa ser alertado sobre quando o serviço nessa porta está disponível. Como na pergunta acima, o caso de uso mais comum que tenho para isso é verificar a disponibilidade de um RDP no computador após uma reinicialização (o ping sozinho não é um indicador confiável de se o sistema terminou ou não e iniciou todos os serviços). / p>

A principal diferença aqui é que estou procurando fazer isso com ferramentas nativas do Windows. Eu nunca sei exatamente quando ou onde será que eu vou querer monitorar um sistema remoto para disponibilidade de serviço, e eu nem sempre tenho minhas ferramentas portáteis à mão quando isso acontece, então seria ideal se houvesse uma relativamente simples one-liner usando utilitários CMD ou PowerShell integrados que poderiam fazer o trabalho.

Eu tenho alguns sistemas com o Windows 8 ou Server 2012, e o PowerShell 4.0, mas as soluções que são compatíveis com versões anteriores do Windows 7 e Server 2008, com o PowerShell 2.0, seriam ideais. (Observação: as versões do PowerShell são fornecidas somente para referência - qualquer comando ou script curto que funcione em uma nova instalação das versões do Windows fornecidas, sem a necessidade de software adicional, funcionará.)

    
por Iszi 27.08.2014 / 02:45

2 respostas

0

Se você for fazer a verificação interativamente, você pode usar o cliente TELNET digitando "porta do host telnet", por exemplo, "telnet 10.23.43.12 80" para acessar a porta HTTP.

Por favor, note que o cliente telnet não está instalado por padrão desde o Windows 7 / Windows 2008, então você precisa ativar a ferramenta no painel de controle - > Adicionar / Remover Software - > Componentes do Windows.

    
por 27.08.2014 / 09:34
0

No Windows 8, você pode usar Test-NetConnection para obter funcionalidade semelhante às ferramentas clássicas ping e tracert , além de verificar o status da porta de um sistema remoto. Infelizmente, as opções para Test-NetConnection são relativamente limitadas em comparação com as ferramentas que ela substitui. Então, por si só não servirá bem para um monitor contínuo. Felizmente, o PowerShell é muito programável. Aqui está um one-liner (tecnicamente, várias linhas condensadas em um) que continuamente testará uma porta para disponibilidade e imprimirá os resultados com registro de data e hora no console.

cls;1..8|%{""};for(){$x=tnc 192.168.0.1 -Po 80;"$(Get-Date) $($x.TcpTestSucceeded)"}

Aqui está uma captura de tela do script em ação. Você pode ver aqui porque comecei o script com cls;1..8|%{""}; , embora tecnicamente não seja necessário. Além disso, você pode ver que Test-NetConnection leva cerca de 9-10 segundos para ser executado toda vez, mesmo quando você está em uma conexão LAN.

Aquiestáumaversãocomentadadeváriaslinhasdoscript.Esteéomesmocódigo,apenasespalhecomumpassoapassoincluído.

#CLSisabuilt-inaliasforClear-Host.#Thisclearsanypre-existingoutputfromtheconsolesowecanstartoursfromthetop.cls;#Thistakestheintegersfrom1through8andpipesthemtoaForEach-Objectloop.#(Thepercentsymbol,"%", is a built-in alias for ForEach-Object.)
# Putting just a pair of double-quotes in the script block outputs a single blank line.
# Effectively, this line of script just outputs 8 blank lines.
# While Test-NetConnection runs, it puts a status display on the top 8 lines of the console.
# So, we're using this to make our output start below that level in order to be visible.

1..8|%{""};

# This begins an infinite for loop. It will run until aborted by the user.
# (e.g.: With CTRL+C)
# Note: Due to the way Test-NetConnection operates, the abort may take a few seconds to process.

for(){

    # TNC is a built-in alias for Test-NetConnection.
    # -Po is a shorthand for the -Port parameter name.
    # PowerShell allows shortening of parameter names down to as few characters are needed to uniquely identify the parameter.
    # This tests for connectivity to port 80 at 192.168.0.1 and puts the results in $x.

    $x=tnc 192.168.0.1 -Po 80;

    # The last step here is to output a timestamp, and the results.
    # Double-quotes allow for per-processing certain elements before including them in an output string.
    # Encapsulating script blocks with $(), within the double-quotes, lets us put their results directly in the output string.
    # So, the first part gets the date and time for the start of the output.
    # Then, with a space to separate it, the TcpTestSucceeded property of $x is retrieved and put at the end.

    "$(Get-Date) $($x.TcpTestSucceeded)"
    }

Não é tão limpo e simples quanto eu gostaria, mas faz o trabalho. Eu definitivamente não espero estar memorizando isso em breve, mas uma vez que você entenda os comandos e os fundamentos do PowerShell que o fazem funcionar, é relativamente fácil de re-construir em tempo real.

Para algo um pouco mais simples, isso apenas mantém a verificação da porta e para que você saiba quando ela está ativa, você pode usar isto:

while((tnc 192.168.0.1 -Po 80).TcpTestSucceeded -eq $False){};Get-Date

Aqui, estamos usando um loop while para continuar testando a porta enquanto ela estiver inativa. Depois que uma conexão com a porta for bem-sucedida, o loop while será fechado e Get-Date informará a hora. Você também verá algumas mensagens de aviso de Test-NetConnection enquanto o loop estiver em execução - isso porque ele usa o canal de saída Aviso para relatar quando uma conexão de ping ou porta falha, antes de realmente enviar os resultados completos como saída normal. .

Infelizmente, o Test-NetConnection não está disponível em sistemas com menos de Windows 8. Portanto, isso também carece da compatibilidade cruzada que eu esperava. Ainda assim, é melhor do que nada por enquanto.

    
por 28.08.2014 / 05:42