No puede hacer ping a los puertos, ya que Ping está utilizando ICMP que no tiene el concepto de puertos. Los puertos pertenecen a los protocolos de la capa de transporte como TCP y UDP. Sin embargo, podría usar nmap para ver si los puertos están abiertos o no
nmap -p 80 example.com
Editar: como se mencionó en flokra, nmap es más que un simple ping-for-ports-thingy. Es el mejor amigo de los auditores de seguridad y hackers y viene con toneladas de opciones geniales. Consulte el documento para ver todas las banderas posibles.
Es posible que desee agregar -PNpara omitir el descubrimiento de host que nmap generalmente hace antes de probar el puerto dado.
flokra
27
Para salvar a algunas personas algunos problemas: nmap / can / be instalado en Windows desde el enlace (o google nmap windows), PERO no funciona a través de VPN. PaPing no parecía capaz de escanear un rango de direcciones. He publicado el script de Python a continuación que funcionará a través de VPN para escanear un rango de puertos en un rango de direcciones.
23
Para otros: nmap no existe en Mac OS X, puede instalar nmap a través de homebrew brew install nmapo MacPorts.
Highway of Life
17
nping es más adecuado para esta tarea que nmap. nping es parte de la distribución nmap.
CMCDragonkai
66
Mac OSX tiene 'Network Utility' que tiene una pestaña de escáner de puertos
Shanimal
192
Abra una sesión de telnet en el puerto específico, por ejemplo:
# telnet google.com 80
Trying 74.125.226.48...
Connected to google.com.
Escape character is '^]'.
O en lugar de paping, podría usar cryping, que ha existido por mucho más tiempo y admite ping de algunos servicios y puertos.
¿Se puede usar para hacer ping a cualquier puerto o solo a 80?
Luke Puplett
@LukePuplett simplemente cambia el número 80 en el ejemplo. Ejecútelo escribiendo paping.exe <nombre de host / IP> -p <número de puerto> -c <número de intentos>
David Costa
Esto funciona muy bien. utilizar -c *para paping constante (?).
user2924019
26
No, no puedes, porque pingusa el protocolo ICMP , que ni siquiera tiene un concepto de puertos.
El comando anterior devolverá Fallo en un código de estado de salida distinto de cero. En algunos casos particulares, como una respuesta vacía o con formato incorrecto (ver man curl), es posible que desee manejar códigos de salida específicos como exitosos, así que consulte esta publicación para obtener una explicación más detallada.
Me gusta porque curlestá presente por defecto en CentOS, por lo que no tengo que instalar nada.
bdemarest
curl trabajó en una Raspberry Pi (distro Raspian)
John M
1
Esta es, con mucho, la solución más elegante y universal. Lo modifiqué un poco para convertirlo en una línea ordenada: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."
También PsPing proviene del equipo de Microsoft SysInternal, por lo que podría considerarse un poco más legítimo cuando se trata con otras personas orientadas a Microsoft. (Y tiene una mejor funcionalidad que el antiguo PortQry)
martyvis
PSPing tiene la ventaja de proporcionar medición de latencia cuando se usa un puerto personalizado, algo que Test-NetConnection no puede hacer (solo informa el tiempo de respuesta de ICMP).
Jeff Miles
14
En Linux puede usar hping pero usa TCP, en lugar de ICMP.
hping (hping3 en mi ubuntu) es excelente. Repite periódicamente la sonda como hace ping, y a diferencia de muchas de las herramientas sugeridas aquí. También prueba si el paquete pasa y si el puerto está abierto. Si está abierto, obtienes flags=SA(es decir, SYN ACK), y si está cerrado, obtienes flags=SR(es decir, SYN RST). Tenga en cuenta que probablemente no necesite la -Vbandera aquí, pero sí necesita sudo / root para ejecutar hping.
mc0e
¡Excelente! A diferencia de muchas otras respuestas, esto informa latencia RTT como pingy pings hasta que se detiene.
Edward Anderson
11
Ping es muy específico, pero si desea verificar si un puerto está abierto o no, y está ejecutando un cuadro de Windows, entonces PortQry es su amigo.
Solo lo he usado para probar controladores de dominio para problemas de conectividad, pero funcionó de maravilla para eso, por lo que debería funcionar para usted.
PortQry fue lanzado originalmente en 1999/2000 por el equipo de MS Exchange, pero la versión reciente de MS parece haberlo atrofiado al eliminar la capacidad de consultar puertos remotos (salud y seguridad).
Luke Puplett
8
Aquí hay una aplicación de consola .NET rápida y sucia:
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();
}
}
No hay garantía de que el servicio que se ejecuta en el puerto entienda el ping. También abre la pregunta de qué "sabor" del puerto desea hacer ping, TCP o UDP? Como el "protocolo" de ping no usa ninguno (el ping se implementa usando ICMP ), no tiene mucho sentido.
Estoy bastante seguro de que la sonda Nagios check_tcp hace lo que quieres. Se pueden encontrar aquí y, aunque están diseñados para usarse en un contexto de Nagios, todos son programas independientes.
$ ./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 es la única solución que funciona para las VPN con la máquina cliente siendo Windows Vista o Windows 7 , ya que otras respuestas enumeradas simplemente no funcionan. Esta respuesta se eliminó anteriormente y no debería haberse eliminado, ya que esta es la única solución para un caso común del mundo real. Como no hay una apelación disponible para la eliminación, la vuelvo a publicar para salvar a otros la frustración que tenía al intentar usar las otras respuestas.
El siguiente ejemplo encuentra qué IP en la VPN que tienen VNC / puerto 5900 abierto con el cliente que se ejecuta en Windows 7.
Un breve script de Python (v2.6.6) para escanear una lista dada de IP y puertos:
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."
Las cuatro variables en la parte superior tendrían que cambiarse para que sean apropiadas para cualquier tiempo de espera, red, hosts y puertos que se necesiten. 5.0 segundos en mi VPN parecían ser suficientes para funcionar correctamente de manera consistente, menos (no siempre) dio resultados precisos. En mi red local, 0.5 fue más que suficiente.
Funciona perfectamente en el cliente Win 7 XP Pro / Win Server 2008 R2 para diagnosticar el puerto cerrado. (Tuve que usar un umbral de tiempo de espera de 30 segundos, pero eso puede ser un problema con un entorno de servidor específico, no un problema con este código)
Si está ejecutando un sistema operativo * nix, intente instalar y usar "zenmap", es una GUI para nmap y tiene varios perfiles de escaneo útiles que son de gran ayuda para el nuevo usuario.
Respuestas:
No puede hacer ping a los puertos, ya que Ping está utilizando ICMP que no tiene el concepto de puertos. Los puertos pertenecen a los protocolos de la capa de transporte como TCP y UDP. Sin embargo, podría usar nmap para ver si los puertos están abiertos o no
Editar: como se mencionó en flokra, nmap es más que un simple ping-for-ports-thingy. Es el mejor amigo de los auditores de seguridad y hackers y viene con toneladas de opciones geniales. Consulte el documento para ver todas las banderas posibles.
fuente
-PN
para omitir el descubrimiento de host que nmap generalmente hace antes de probar el puerto dado.nmap windows
), PERO no funciona a través de VPN. PaPing no parecía capaz de escanear un rango de direcciones. He publicado el script de Python a continuación que funcionará a través de VPN para escanear un rango de puertos en un rango de direcciones.brew install nmap
o MacPorts.Abra una sesión de telnet en el puerto específico, por ejemplo:
Para cerrar su sesión, presione Ctrl+ ].
fuente
netcat
también funciona muy bien y es menos detallado.netcat
ahora está integrado en MacOS HighSierra, en donde telnet se puede instalar desde HomeBrewbrew install telnet
fuente
time
like intime nc -vz www.example.com 80
y también tendrá una especie de RTT.Si está en una instalación de Windows con PowerShell v4 o posterior, puede usar el módulo PowerShell Test-Netconnection:
Ejemplo: Test-NetConnection example.com -port 80
Este cmdlet también tiene el alias
tnc
. P.ejtnc example.com -port 80
fuente
Puedes usar PaPing:
http://code.google.com/p/paping
fuente
-c *
para paping constante (?).No, no puedes, porque
ping
usa el protocolo ICMP , que ni siquiera tiene un concepto de puertos.fuente
Pruebe el
curl
comando, como:Por ejemplo:
El comando anterior devolverá Fallo en un código de estado de salida distinto de cero. En algunos casos particulares, como una respuesta vacía o con formato incorrecto (ver
man curl
), es posible que desee manejar códigos de salida específicos como exitosos, así que consulte esta publicación para obtener una explicación más detallada.fuente
curl
está presente por defecto en CentOS, por lo que no tengo que 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."
Encontré una solución más simple usando PsPing:
Es parte de Windows Sysinternals .
fuente
En Linux puede usar hping pero usa TCP, en lugar de ICMP.
fuente
flags=SA
(es decir, SYN ACK), y si está cerrado, obtienesflags=SR
(es decir, SYN RST). Tenga en cuenta que probablemente no necesite la-V
bandera aquí, pero sí necesita sudo / root para ejecutar hping.ping
y pings hasta que se detiene.Ping es muy específico, pero si desea verificar si un puerto está abierto o no, y está ejecutando un cuadro de Windows, entonces PortQry es su amigo.
Solo lo he usado para probar controladores de dominio para problemas de conectividad, pero funcionó de maravilla para eso, por lo que debería funcionar para usted.
fuente
Aquí hay una aplicación de consola .NET rápida y sucia:
fuente
No.
No hay garantía de que el servicio que se ejecuta en el puerto entienda el ping. También abre la pregunta de qué "sabor" del puerto desea hacer ping, TCP o UDP? Como el "protocolo" de ping no usa ninguno (el ping se implementa usando ICMP ), no tiene mucho sentido.
fuente
Estoy bastante seguro de que la sonda Nagios check_tcp hace lo que quieres. Se pueden encontrar aquí y, aunque están diseñados para usarse en un contexto de Nagios, todos son programas independientes.
fuente
Esta es la única solución que funciona para las VPN con la máquina cliente siendo Windows Vista o Windows 7 , ya que otras respuestas enumeradas simplemente no funcionan. Esta respuesta se eliminó anteriormente y no debería haberse eliminado, ya que esta es la única solución para un caso común del mundo real. Como no hay una apelación disponible para la eliminación, la vuelvo a publicar para salvar a otros la frustración que tenía al intentar usar las otras respuestas.
El siguiente ejemplo encuentra qué IP en la VPN que tienen VNC / puerto 5900 abierto con el cliente que se ejecuta en Windows 7.
Un breve script de Python (v2.6.6) para escanear una lista dada de IP y puertos:
Los resultados parecían:
Las cuatro variables en la parte superior tendrían que cambiarse para que sean apropiadas para cualquier tiempo de espera, red, hosts y puertos que se necesiten. 5.0 segundos en mi VPN parecían ser suficientes para funcionar correctamente de manera consistente, menos (no siempre) dio resultados precisos. En mi red local, 0.5 fue más que suficiente.
fuente
Hay una herramienta ligera para ello, llamada tcping: http://www.linuxco.de/tcping/tcping.html
fuente
En el shell Bash, puede usar el archivo pseudodispositivo TCP , por ejemplo:
Aquí está la versión que implementa un tiempo de espera de 1 segundo:
fuente
Si está ejecutando un sistema operativo * nix, intente instalar y usar "zenmap", es una GUI para nmap y tiene varios perfiles de escaneo útiles que son de gran ayuda para el nuevo usuario.
fuente