233 votos

¿Es posible hacer ping a una dirección:puerto?

No me interesa la red, y tengo la siguiente pregunta relacionada con el comando ping de Linux.

¿Puedo hacer ping solo a una dirección? Por ejemplo:

miner@raspberrypi ~ $ ping onofri.org
PING onofri.org (67.222.36.105) 56(84) bytes of data.
64 bytes from onofri.org (67.222.36.105): icmp_req=1 ttl=47 time=202 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=2 ttl=47 time=206 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=3 ttl=47 time=215 ms

¿O puedo hacer ping a una dirección:puerto, por ejemplo: onofri.org:80?

Si intento esto, no funciona:

miner@raspberrypi ~ $ ping onofri.org:80
ping: host desconocido onofri.org:80

¿Es posible hacer ping a algo como dirección:puerto? Si es posible, ¿por qué no funciona lo que intenté?

8 votos

¿Qué estás tratando de lograr? Verificar la correcta operación del servicio requiere que consultes realmente el servicio y evalúes la respuesta. Un servidor web, por ejemplo, podría aceptar tu conexión, pero devolver un error debido a una mala configuración.

0 votos

@AndreaNobili - Esta es una buena pregunta. Por favor, responde a las preguntas de Daniel, pero puedo decir que hiciste una investigación adecuada antes de hacer esta pregunta.

5 votos

Eso es parte de lo que me gusta de Telnet. Puedes conectarte a un servidor web y escribir GET /index.html HTTP\1.1 y ver la respuesta 200 (o el código de error) junto con el marcado resultante.

324voto

BenjiWiebe Puntos 3981

Los puertos son un concepto de UDP y TCP. Los mensajes de ping se refieren técnicamente como Solicitud de Eco ICMP y Respuesta de Eco ICMP que forman parte de ICMP. ICMP, TCP y UDP son "hermanos"; no se basan unos en otros, sino que son tres protocolos separados que se ejecutan encima de IP.

Por lo tanto, no se puede ping a un puerto. Lo que puedes hacer es usar un escáner de puertos como nmap.

nmap -p 80 onofri.org

También puedes usar telnet onofri.org 80, como se sugiere en una de las respuestas anteriores (dará un error si el puerto está cerrado o filtrado).

26 votos

+1 Lo entiendes correctamente. ICMP se construye sobre IP, que tiene un concepto de direcciones IP pero no de puertos. TCP y UDP también se construyen sobre IP, y son estos protocolos los que añaden "puertos". ICMP, TCP y UDP están todos en el mismo "nivel" en términos del protocolo por el que son transportados.

15 votos

+1. Muchas personas piensan que si no pueden hacer ping a algo, no pueden conectarse a ello... pero como dices, ICMP es diferente a TCP y UDP: si tienes la intención de servir, por ejemplo, una página web en TCP 80, entonces solo necesitas abrir TCP 80 en el firewall, nada más (por lo que el ping al mismo IP podría (... debería!) estar bloqueado, por ejemplo)

0 votos

Agregando a lo que dijo @OlivierDulac, un error común es cuando se utiliza ping para probar conexiones en, por ejemplo, una red básica que estás configurando, si el ping no responde a veces la gente no piensa en comprobar si las respuestas de ping están realmente habilitadas o siendo bloqueadas, y pasan mucho tiempo yendo por el camino equivocado buscando otras razones. Especialmente veo que esto sucede cuando la gente configura un servidor de algún tipo en casa y trata de hacer ping desde el mundo exterior para probarlo; sin darse cuenta de que su enrutador (o quizás su proveedor de servicios de Internet) está bloqueando específicamente el ping.

92voto

Frank Thomas Puntos 16653

Uso Telnet, ya que está integrado en muchas plataformas sin necesidad de descargas adicionales.

Solo utiliza el comando telnet para conectarte al puerto que deseas probar. Si obtienes el mensaje a continuación, o un mensaje del servicio en sí, entonces el puerto está activo.

Minty16 ~ $ telnet localhost 139
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Si conoces la secuencia de comandos para el servicio al que te estás conectando, puedes escribir un comando (HTTP/FTP GET por ejemplo) y observar la respuesta y la salida en la terminal. Esto es muy útil para probar el propio servicio, ya que te mostrará información de error enviada al cliente, como los errores HTTP 500.

Si recibes un mensaje de que la conexión fue rechazada, el puerto está cerrado.

Minty16 ~ $ telnet localhost 5000
Trying 127.0.0.1...
telnet: No se puede conectar al host remoto: Conexión rechazada

8 votos

También, si la pantalla se pone completamente negra, es una señal de que también estás conectado.

0 votos

Excelente sugerencia. Solía usar esto para probar si un servidor web estaba activo cuando un navegador web no era una opción fácil.

0 votos

@Brandon como cuando haces ssh en las máquinas de desarrollo ^.^

52voto

d33tah Puntos 325

Sí, usa HPing para hacer eso:

$ sudo hping -S -p 80 google.com
HPING google.com (p5p1 77.237.27.37): S set, 40 headers + 0 data bytes
len=46 ip=77.237.27.37 ttl=58 id=25706 sport=80 flags=SA seq=0 win=29200 rtt=7.5 ms
len=46 ip=77.237.27.37 ttl=58 id=25707 sport=80 flags=SA seq=1 win=29200 rtt=7.4 ms
len=46 ip=77.237.27.37 ttl=58 id=25708 sport=80 flags=SA seq=2 win=29200 rtt=8.5 ms
len=46 ip=77.237.27.37 ttl=58 id=25709 sport=80 flags=SA seq=3 win=29200 rtt=7.8 ms
^C
--- Estadísticas de hping de google.com ---
4 paquetes transmitidos, 4 paquetes recibidos, 0% pérdida de paquetes
tiempo de ida y vuelta min/avg/max = 7.4/7.8/8.5 ms

Ten en cuenta que se necesitan privilegios de root (o capacidades SELinux) para crear paquetes IP crudos, al igual que ping (que muy probablemente tiene permisos setuid en tu sistema).

3 votos

Ojalá que este fuera la "respuesta aceptada". hping era fácil de encontrar en varios repositorios, a diferencia de paping que es código anticuado que no compila en ARM. También a diferencia de NMAP, hping devuelve un código de estado que es fácil de probar desde un script de shell, por lo que es un sustituto perfecto para cuando de otro modo usarías ping. Gracias por esta respuesta, es una lástima que no haya bajado lo suficiente para verla y haya tenido que encontrarla en otro sitio web en su lugar.

0 votos

No puedo instalar hping en ubuntu.. Paquete no encontrado.. Pero he encontrado hping3. ¿Es lo mismo que hping3? @d33tah

0 votos

Ok, intenté hping3 y hace ping a todos los puertos.. No importa si están cerrados o abiertos.. ¿Cómo puedo saber si un puerto está cerrado o abierto?

50voto

Vincent Scheib Puntos 2702

Puedes usar netcat para conectarte a un puerto específico y ver si obtienes una conexión. La flag -v aumentará la verbosidad para mostrar si el puerto está abierto o cerrado. La flag -z hará que netcat se cierre una vez que tenga una conexión. Luego puedes usar los códigos de salida a través de $? para ver si la conexión se estableció o no.

$ nc -zv localhost 22
localhost [127.0.0.1] 22 (ssh) abierto
$ echo $?
0
$ nc -zv localhost 23
localhost [127.0.0.1] 23 (telnet) : Conexión rechazada
$ echo $?
1

Además, puedes usar mtr con la flag -T para tcp y la flag -P para especificar un puerto. Esto hará algo similar a un traceroute sobre TCP en lugar de solo ICMP. Sin embargo, esto puede ser demasiado.

sigh Tengo que editar para agregar este dato, ya que no podemos poner código en los comentarios. Knoppix puede estar haciendo algo diferente con su versión de netcat, pero esto es lo que obtengo del Linux Mint

$ date;nc -z -w 1 www.google.com 8000;date
Fri Jun 20 15:55:26 PDT 2014
Fri Jun 20 15:55:27 PDT 2014
$ date;nc -z -w 4 www.google.com 8000;date
Fri Jun 20 15:55:33 PDT 2014
Fri Jun 20 15:55:37 PDT 2014

$ nc -h
[v1.10-40]

0 votos

El problema es que si intentas nc -z www.google.com 8000 puede llevar mucho tiempo, 5 segundos o más. Si pongo -w 1 entonces tarda 5 segundos. Si pongo -w 3 entonces tarda aproximadamente 3 veces más... 15 destellos del cursor, 15 segundos. -w 1 se supone que es un segundo pero probado en cygwin... 5 segundos. Es super rápido cuando hay un servidor en el puerto pero un poco lento cuando no lo hay.

0 votos

Maldición sin saltos de línea en los comentarios... Eso parece ser un error con Cygwin. Probando con Linux Mint se muestra un retraso de la cantidad de segundos especificada. Corrí esto para probar: fecha; nc -zw5 www.google.com 8000; fecha

0 votos

También voté positivamente a @BenjiWiebe con las peticiones de nmap. nc es más fácil de poner en un script, pero es MUCHO más fácil de usar nmap visualmente.

24voto

kxmp Puntos 84

Puedes usar Paping, una herramienta de prueba de puerto TCP multiplataforma, que emula la funcionalidad de ping (ping de puerto)

(ver también Github ya que code.google.com ha sido descontinuado)

paping -p 80 google.com

8 votos

Alguna explicación de lo que hace este programa sería útil.

24 votos

Para cualquier persona que encuentre esta respuesta, como yo hice, solo para descubrir que paping no está en ningún repositorio y es un código antiguo que ni siquiera se compila en ARM, desplácese más adelante hasta la respuesta de 'hping'. Es un reemplazo perfecto para ping cuando necesitas probar un puerto y es fácilmente accesible en varios repositorios (por ejemplo, Ubuntu, Arch), incluido ARM.

0 votos

¿Cómo puedo instalar paping? he visitado el repositorio pero no hay versiones. Ah, olvídalo.. en ese momento google code no era accesible para mí.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X