Ping em uma porta específica

671

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

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

Estou procurando por algo parecido ping ip address portNum.

Davie
fonte
1
para janelas esta pergunta pode ser verificado
npocmaka

Respostas:

720

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

nmap -p 80 example.com

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

sfussenegger
fonte
15
Você pode adicionar -PNpara ignorar a descoberta de host que o nmap geralmente faz antes de testar a porta especificada.
Flokra 8/10/09
27
Para poupar algumas pessoas de problemas: o nmap / pode / pode ser instalado no Windows a partir do link (ou google nmap windows), MAS NÃO funciona em VPNs. O PaPing não parecia capaz de digitalizar um intervalo de endereços. Postei abaixo o script Python que funcionará através da VPN para verificar uma variedade de portas em uma variedade de endereços.
23
Para outros: o nmap não existe no Mac OS X, você pode instalar o nmap via homebrew brew install nmapou MacPorts.
Highway of Life
17
O nping é mais adequado para esta tarefa que o nmap. nping faz parte da distribuição nmap.
CMCDragonkai
6
Mac OSX tem 'Network Utility', que tem uma aba scanner de porta
Shanimal
192

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+ ].

Ajay
fonte
23
netcatfunciona também muito bem e é menos detalhado.
petrus
3
O Telnet funciona bem para isso se a porta for uma porta TCP.
Falcon Momot
6
netcat trabalha com UDP também (nc-u)
Tsvetomir Dimitrov
1
Para usuários de Mac - netcatagora é built-in MacOS HighSierra, onde telnet pode ser instalado a partir HomeBrewbrew install telnet
sandiejat
98
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
Rahul Patil
fonte
10
Use com timelike in time nc -vz www.example.com 80e você terá uma espécie de RTT também.
Xebeche
3
Solução única que funciona em instâncias do Amazon EC2 sem nenhuma instalação.
Masadow
o que é -z? NCAT 6,40 em rhel7 lhe dá uma opção desconhecida
Tagar
@Tagar, de acordo com a ajuda da versão do Ubuntu, -z é o modo Zero-I / O, usado para a digitalização.
Ben Mordecai
88

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

Test-NetConnection <host> -port <port>

Exemplo: Test-NetConnection example.com -port 80

Esse cmdlet também possui o alias tnc. Por exemplotnc example.com -port 80

Kjetil Limkjær
fonte
80

Você pode usar PaPing:

http://code.google.com/p/paping

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

fonte
1
Ou, em vez de usar o paping, você pode usar a criptografia que existe há muito mais tempo e suporta o ping de alguns serviços e portas.
Isso pode ser usado para executar ping em qualquer porta ou apenas 80?
Luke Puplett
@LukePuplett apenas altere o número 80 no exemplo. Executá-lo digitando paping.exe <hostname IP /> -p <porta> -c <número de tentativas>
David Costa
Isso funciona muito bem. use -c *para paping constante (?).
user2924019
26

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

Balthazar
fonte
47
Tenho certeza de que o uso de "ping" foi metafórico.
9114 Luke Puplett
26

Tente o curlcomando, como:

$ curl host:port

Por exemplo:

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

Acima comando retornará falha em um diferentes de zero códigos de status de saída. Em alguns casos específicos, como resposta vazia ou malformada (consulte man curl), convém manipular códigos de saída específicos como bem-sucedidos; portanto, verifique esta postagem para obter explicações mais detalhadas.

kenorb
fonte
3
Eu gosto disso porque curlestá presente por padrão no CentOS, então não preciso instalar nada.
precisa saber é
dobras trabalhou em um Raspberry Pi (distro Raspian)
John M
1
Esta é de longe a solução mais elegante e universal. I tweaked-lo um pouco para torná-lo um oneliner puro:IP="<ip>" ; PORT="<port>" ; curl -s "$IP:$PORT" > /dev/null && echo "Success connecting to $IP on port $PORT." || echo "Failed to connect to $IP on port $PORT."
Lefty G Balogh
21

Encontrei uma solução mais simples usando o PsPing:

psping 192.168.2.2:5000

Faz parte do Windows Sysinternals .

O PsPing implementa a funcionalidade Ping, TCP ping, latência e medição de largura de banda.

Ayan Mullick
fonte
1
O PsPing também vem da equipe do Microsoft SysInternal, por isso pode ser considerado um pouco mais legítimo ao lidar com outras pessoas orientadas pela Microsoft. (E tem melhor funcionalidade do que os muito velhos PortQry)
martyvis
O PSPing tem a vantagem de fornecer medição de latência ao usar uma porta personalizada, algo que o Test-NetConnection não pode fazer (ele apenas relata o tempo de resposta do ICMP).
Jeff Miles
14

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

hping example.com -S -V -p 80
c4f4t0r
fonte
1
hping (hping3 no meu ubuntu) é excelente. Repete periodicamente o probe, como o ping faz, e ao contrário de muitas das ferramentas sugeridas aqui. Ele também testa se o pacote é entregue e se a porta está aberta. Se estiver aberto, você recebe flags=SA(por exemplo, SYN ACK), e se está fechado, recebe flags=SR(por exemplo, SYN RST). Note que você provavelmente não precisa da -Vbandeira aqui, mas precisa do sudo / root para executar o hping.
Mc0e
Excelente! Ao contrário de muitas outras respostas, isso informa como a latência de RTT pinge pings até parar.
Edward Anderson
11

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

Usei-o apenas para testar controladores de domínio quanto a problemas de conectividade, mas funcionou muito bem nisso, portanto, deve funcionar para você.

Roubar
fonte
1
O PortQry foi originalmente lançado em 1999/2000 pela equipe do MS Exchange, mas a versão recente do MS parece ter atrapalhado a remoção da capacidade de consultar portas remotas (saúde e segurança).
Luke Puplett
8

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();
        }
    }
Luke Puplett
fonte
5

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ê deseja executar ping, TCP ou UDP? Como o protocolo "ping" não usa nenhum dos dois (o ping é implementado usando o ICMP ), não faz muito sentido.

descontrair
fonte
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 ​​no contexto de Nagios, todos são programas independentes.

$ ./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
fvu
fonte
4

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

O exemplo abaixo localiza quais IPs na VPN que possuem VNC / porta 5900 são abertos com o cliente em execução no Windows 7.

Um script Python curto (v2.6.6) para verificar uma lista específica 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ários. 5,0 segundos na minha VPN pareciam ser suficientes para funcionar adequadamente de forma consistente, menos (nem sempre) davam resultados precisos. Na minha rede local, 0,5 era mais que suficiente.

Mark Ribau
fonte
2
Funciona perfeitamente no cliente Win 7 XP Pro / Win Server 2008 R2 para diagnosticar porta fechada. (Eu tive que usar um limiar de tempo limite 30 segundo, mas que pode ser um problema com o ambiente de servidor específico não é um problema com este código)
David Zemens
1

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

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

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

timeout 1 bash -c "</dev/tcp/serverfault.com/81" && echo Port open || echo Port closed
kenorb
fonte
0

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


fonte
O Zenmap também está disponível para Windows.
Nick Young