Ping em uma porta específica

588

Apenas uma verificação rápida de sanidade aqui.

Você pode fazer o ping de uma porta específica de uma máquina e, em caso afirmativo, pode fornecer um exemplo?

Estou procurando por algo como ping ip address portNum .

    
por Davie 08.10.2009 / 11:57

18 respostas

634

Você não pode fazer ping de portas, pois o Ping está usando o ICMP que não tem o conceito de portas. As portas pertencem aos protocolos da camada de transporte , como o TCP e o UDP. No entanto, você pode usar o nmap para ver se as portas estão abertas ou não

nmap -p 80 example.com

Editar: Como o flokra mencionou, o nmap é mais do que apenas um ping-for-ports-thingy. É o melhor amigo dos auditores de segurança e dos hackers e vem com muitas opções legais. Verifique o documento para todos os possíveis sinalizadores.

    
por 08.10.2009 / 12:00
172

Abra uma sessão de telnet para a porta específica, por exemplo:

# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.

Para fechar sua sessão, pressione Ctrl + ] .

    
por 08.10.2009 / 12:01
79

Você pode usar o PaPing:

link

C:\>paping.exe www.google.com -p 80 -c 4
paping v1.5.1 - Copyright (c) 2010 Mike Lovell

Connecting to www.l.google.com [209.85.225.147] on TCP 80:

Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=25.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80
Connected to 209.85.225.147: time=24.00ms protocol=TCP port=80

Connection statistics:
        Attempted = 4, Connected = 4, Failed = 0 (0.00%)
Approximate connection times:
        Minimum = 24.00ms, Maximum = 25.00ms, Average = 24.25ms
    
por 03.09.2010 / 06:23
76
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
    
por 10.04.2013 / 03:55
61

Se você estiver em uma instalação do Windows com o powershell v4 ou mais recente, você pode usar o módulo powershell test-netconnection:

Test-NetConnection <host> -port <port>

Exemplo:      Test-NetConnection example.com -port 80

Esse cmdlet também tem o alias tnc . Por exemplo, tnc example.com -port 80

    
por 26.10.2014 / 22:09
22

Não, você não pode, porque ping usa o protocolo ICMP , que nem sequer tem um conceito de portas.

    
por 08.10.2009 / 12:00
19

Tente o comando curl , como:

$ curl host:port

Por exemplo:

$ curl -s localhost:80 >/dev/null && echo Success. || echo Fail.
Success.

O comando acima retornará Fail em um código de status de saída diferente de zero. Em alguns casos específicos, como resposta vazia ou malformada (consulte man curl ), talvez você queira manipular códigos de saída específicos como bem-sucedidos, portanto, verifique isso post para uma explicação mais detalhada.

    
por 01.11.2015 / 01:11
16

Eu encontrei uma solução mais simples usando o PsPing:

psping 192.168.2.2:5000

Faz parte do Windows Sysinternals .

PsPing implements Ping functionality, TCP ping, latency and bandwidth measurement.

    
por 12.12.2014 / 20:49
13

No Linux, você pode usar hping , mas ele usa TCP, em vez de ICMP.

hping example.com -S -V -p 80
    
por 23.12.2013 / 00:12
11

O ping é muito específico, mas se você quiser verificar se uma porta está aberta ou não e está executando uma caixa do Windows, então PortQry é seu amigo.

Eu só o usei para testar os controladores de domínio em busca de problemas de conectividade, mas funcionou muito bem para isso, então deve funcionar para você.

    
por 08.10.2009 / 12:06
7

Aqui está um aplicativo de console .NET rápido e sujo:

    static void Main(string[] args)
    {
        string addressArgument = null, portArgument = null;

        System.Net.Sockets.TcpClient tcpClient = null;

        try
        {
            addressArgument = args[0];
            portArgument = args[1];

            int portNumber;
            portNumber = Int32.Parse(portArgument);

            tcpClient = new System.Net.Sockets.TcpClient();
            tcpClient.ReceiveTimeout = tcpClient.SendTimeout = 2000;


            IPAddress address;
            if (IPAddress.TryParse(args[0], out address))
            {
                var endPoint = new System.Net.IPEndPoint(address, portNumber);
                tcpClient.Connect(endPoint);
            }
            else
            {
                tcpClient.Connect(addressArgument, portNumber);
            }

            Console.WriteLine("Port {0} is listening.", portArgument);
        }
        catch (Exception e)
        {
            if (e is SocketException || e is TimeoutException)
            {
                Console.WriteLine("Not listening on port {0}.", portArgument);
            }
            else
            {
                Console.WriteLine("Usage:");
                Console.WriteLine("    portquery [host|ip] [port]");
            }
        }
        finally
        {
            if (tcpClient != null)
                tcpClient.Close();
        }
    }
    
por 09.07.2012 / 19:53
4

Não.

Não há garantia de que o serviço em execução na porta entenda o ping. Também abre a questão de qual "sabor" da porta você quer pingar, TCP ou UDP? Como o "protocolo" ping não usa nenhum dos dois (o ping é implementado usando o ICMP ), não faz muito sentido.

    
por 08.10.2009 / 12:00
4

Tenho certeza de que o probe Nagios check_tcp faz o que você deseja. Eles podem ser encontrados aqui e, embora projetados para serem usados em um contexto Nagios, são todos programas autônomos.

$ ./check_tcp -H host -p 22
TCP OK - 0.010 second response time on port 22|time=0.009946s;0.000000;0.000000;0.000000;10.000000
    
por 08.10.2009 / 12:22
4

Esta é a única solução que funciona para VPNs com a máquina cliente sendo o Windows Vista ou o Windows 7 , já que outras respostas listadas simplesmente não funcionam. Essa resposta foi excluída anteriormente e não deveria ter sido, pois essa é a única solução para um caso comum do mundo real. Como não há recurso disponível para a exclusão, estou repassando para salvar outras pessoas da frustração que tive ao tentar usar as outras respostas.

O exemplo abaixo descobre quais IPs na VPN que possuem o VNC / port 5900 aberto com o cliente em execução no Windows 7.

Um pequeno script em Python (v2.6.6) para verificar uma determinada lista de IPs e Portas:

from socket import *

fTimeOutSec = 5.0
sNetworkAddress = '192.168.1'
aiHostAddresses = range(1,255)
aiPorts = [5900]

setdefaulttimeout(fTimeOutSec)
print "Starting Scan..."
for h in aiHostAddresses:
    for p in aiPorts:
        s = socket(AF_INET, SOCK_STREAM)
        address = ('%s.%d' % (sNetworkAddress, h))
        result = s.connect_ex((address,p))
        if ( 0 == result ):
            print "%s:%d - OPEN" % (address,p)
        elif ( 10035 == result ):
            #do nothing, was a timeout, probably host doesn't exist
            pass
        else:
            print "%s:%d - closed (%d)" % (address,p,result)

        s.close()
print "Scan Completed."

Os resultados pareciam:

Starting Scan...
192.168.1.1:5900 - closed (10061)
192.168.1.7:5900 - closed (10061)
192.168.1.170:5900 - OPEN
192.168.1.170:5900 - closed (10061)
Scan Completed.

As quatro variáveis na parte superior precisariam ser alteradas para serem apropriadas para qualquer tempo limite, rede, hosts e portas necessárias. 5.0 segundos na minha VPN pareciam ser o suficiente para funcionar adequadamente de forma consistente, menos não (sempre) dar resultados precisos. Na minha rede local, 0,5 foi mais que suficiente.

    
por 15.09.2011 / 06:58
2

Existe uma ferramenta leve, chamada tcping: link

    
por 26.10.2014 / 23:08
1

No shell Bash, você pode usar o TCP arquivo pseudo-device , por exemplo:

</dev/tcp/serverfault.com/80 && echo Port open || echo Port closed

Aqui está a versão que implementa um tempo limite de 1 segundo:

timeout 1 bash -c "</dev/tcp/serverfault.com/81" && echo Port open || echo Port closed
    
por 20.10.2016 / 17:29
0

Estou com sorte no google por "pingar uma porta específica": link , então NÃO, você não pode fazer ping em uma porta específica

você pode usar o nmap embora: nmap -p <port> <host>

    
por 08.10.2009 / 12:00
0

Se você estiver executando um sistema operacional * nix, tente instalar e usar o "zenmap", ele é uma GUI para o nmap e possui vários perfis de varredura úteis que são de grande ajuda para o novo usuário.

    
por 25.06.2011 / 00:41