231 votos

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

No estoy en la red, y tengo la siguiente pregunta relacionada con el Linux ping comando.

¿Sólo puedo hacer ping 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 también puedo hacer un ping a dirección:puerto por ejemplo: onofri.org:80 ?

Si pruebo este no funciona:

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

¿Es posible hacer un ping como dirección:puerto ? Si es posible, ¿por qué no funciona lo que he intentado?

8 votos

¿Qué se pretende conseguir? Para verificar el correcto funcionamiento del servicio es necesario consultar el servicio y evaluar 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, dirígete a las preguntas de Daniel, pero se nota que has investigado bien 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 código de error) junto con el marcado resultante.

321voto

BenjiWiebe Puntos 3981

Los puertos son un concepto de UDP y TCP . Los mensajes ping se denominan técnicamente Solicitud de eco ICMP y Respuesta de eco ICMP que forman parte de ICMP . ICMP, TCP y UDP son "hermanos"; no se basan el uno en el otro, sino que son tres protocolos distintos que se ejecutan sobre IP.

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

nmap -p 80 onofri.org

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

26 votos

+1 lo has entendido bien. ICMP está construido sobre IP, que tiene un concepto de direcciones IP pero no de puertos. TCP y UDP también están encima de IP, y son esos protocolos los que añaden "puertos". ICMP, TCP y UDP están al mismo "nivel" en cuanto al protocolo que llevan.

14 votos

+1. Mucha, mucha gente piensa que si no puede hacer ping a algo no puede conectarse a él... pero como dices, ICMP es diferente a TCP y UDP : si pretendes servir, digamos, una página web en TCP 80, entonces sólo necesitas abrir TCP 80 en el firewall, nada más (así que el ping a la misma IP podría (... ¡debería!) ser bloqueado, por ejemplo)

0 votos

Añadiendo a lo que dijo @OlivierDulac, un error común es cuando se utiliza el ping para probar las conexiones en, digamos, una red básica que se está configurando, si el ping no responde a veces la gente no piensa en comprobar si las respuestas de ping están realmente habilitadas / bloqueadas, y pasan mucho tiempo yendo por el camino equivocado buscando otras razones. Veo especialmente 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 router (o tal vez su ISP) está bloqueando específicamente el ping.

91voto

Frank Thomas Puntos 16653

Yo uso Telnet ya que está integrado en muchas plataformas sin necesidad de descargas adicionales.

Sólo tienes que utilizar el comando telnet para conectarte al puerto que quieres probar. Si obtienes el mensaje de abajo, o un mensaje del propio servicio, entonces el puerto está vivo.

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

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

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

Minty16 ~ $ telnet localhost 5000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

8 votos

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

0 votos

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

0 votos

@Brandon como cuando sshing en máquinas dev ^.^

50voto

Vincent Scheib Puntos 2702

Puedes usar netcat para conectarte a un puerto específico para ver si consigues una conexión. La flag -v aumentará la verbosidad para mostrar si el puerto está abierto o cerrado. La flag -z hará que netcat salga una vez que tenga una conexión. Entonces puede 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) open
$ echo $?
0
$ nc -zv localhost 23
localhost [127.0.0.1] 23 (telnet) : Connection refused
$ echo $?
1

Además, puede utilizar 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 sólo ICMP. Sin embargo, esto puede ser excesivo.

suspiro Tengo que editar para añadir esta parte, 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 me sale de 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 tardar mucho tiempo, más de 5 segundos. Si lo hago -w 1 entonces tarda 5 segundos. Si hago -w 3 entonces tarda como 3 veces más.. 15 parpadeos del cursor, 15 segundos. -w 1 se supone que es un segundo pero se ha probado en cygwin,. 5 segundos. Es súper rápido cuando hay un servidor en el puerto pero un poco lento cuando no lo hay.

0 votos

maldición no hay nuevas líneas en los comentarios... Eso parece ser un error con cygwin. Probando con linux Mint muestra un retardo de tantos segundos como se especifique. corrió esto para probar: date;nc-zw5 www.google.com 8000;date

0 votos

También he votado 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 usar nmap visualmente.

50voto

d33tah Puntos 325

Sí, utilice HPing para hacerlo:

$ 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
--- google.com hping statistic ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 7.4/7.8/8.5 ms

Tenga en cuenta que necesita privilegios de root (o capacidades de SELinux) para crear paquetes IP sin procesar, al igual que ping (que probablemente sea suid en su sistema).

3 votos

Desearía que esta fuera la "respuesta aceptada". hping era fácil de encontrar en múltiples repos, a diferencia de paping que es un código antiguo que no compila en ARM. También a diferencia de NMAP, haping devuelve un código de estado que es fácilmente testificable desde un Shell ShellscriptShell, por lo que es un sustituto perfecto para donde de otra manera se usaría ping. Gracias por esta respuesta, una pena que no me haya desplazado 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

Bien, lo he intentado. hping3 y hace pings en todos los puertos.. No importa cerrado o abierto .. ¿Cómo puedo saber si un puerto está cerrado o abierto?

25voto

kxmp Puntos 84

Puede utilizar Paping , una prueba de puertos TCP multiplataforma, que emula la funcionalidad de ping (puerto ping)

(véase también Github como code.google.com ha sido depreciado)

paping -p 80 google.com

8 votos

Sería útil alguna explicación de lo que hace este programa.

23 votos

para cualquiera que encuentre esta respuesta, como lo hice yo, sólo para encontrar que paping no está en ningún repositorio y es un código antiguo que ni siquiera compila en ARM - desplácese hacia abajo hasta la respuesta 'hping'. Es un perfecto drop-in para ping cuando necesitas probar un port y es fácilmente accesible en varios repositorios (ie. Ubuntu, Arch) incluyendo ARM.

0 votos

¿Cómo puedo instalar paping ? He visitado el repo pero no hay ninguna versión. Ah, no importa el código de Google no era accesible para mí en ese momento.

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: