Respostas:
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.
-PN
para ignorar a descoberta de host que o nmap geralmente faz antes de testar a porta especificada.
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.
brew install nmap
ou MacPorts.
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+ ].
netcat
funciona também muito bem e é menos detalhado.
netcat
agora é built-in MacOS HighSierra, onde telnet pode ser instalado a partir HomeBrewbrew install telnet
$ nc -vz google.com 80
Connection to google.com 80 port [tcp/http] succeeded!
time
like in time nc -vz www.example.com 80
e você terá uma espécie de RTT também.
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
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
-c *
para paping constante (?).
Não, você não pode, porque ping
usa o protocolo ICMP , que nem sequer tem um conceito de portas.
Tente o curl
comando, 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.
curl
está presente por padrão no CentOS, então não preciso instalar nada.
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."
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.
No Linux, você pode usar o hping, mas ele usa o TCP, em vez do ICMP.
hping example.com -S -V -p 80
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 -V
bandeira aqui, mas precisa do sudo / root para executar o hping.
ping
e pings até parar.
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ê.
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();
}
}
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.
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
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.
Existe uma ferramenta leve, chamada tcping: http://www.linuxco.de/tcping/tcping.html
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
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.