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

212

No estoy interesado en las redes, y tengo la siguiente pregunta relacionada con el comando ping de Linux .

¿Solo 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 ping a una dirección: puerto , por ejemplo: onofri.org:80 ?

Si intento este no funciona:

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

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

AndreaNobili
fuente
8
¿Qué está tratando de lograr? Verificar la operación correcta del servicio requiere que usted realmente consulte el servicio y evalúe la respuesta. Un servidor web podría, por ejemplo, aceptar su conexión, pero devolver un error debido a una configuración incorrecta.
Daniel B
55
Eso es parte de lo que me gusta de Telnet. puede conectarse a un servidor web y escribir GET /index.html HTTP\1.1y ver la respuesta 200 (o código de error) junto con el marcado resultante.
Frank Thomas
77
@FrankThomas HTTP\1.1? De Verdad?
glglgl
55
@Navin Quizás HTTP/1.1...
glglgl
3
@glglgl; ¿Qué? nunca pusiste un truco donde debería ir un corte? pero tienes razón, debería ser una barra oblicua.
Frank Thomas

Respuestas:

21

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

(vea también Github como code.google.com se ha depreciado)

paping -p 80 google.com
kxmp
fuente
8
Alguna explicación de lo que hace este programa sería útil.
David Schwartz
16
para cualquiera que encuentre esta respuesta, como lo hice yo, solo para encontrar paping no está en ningún repositorio y es un código antiguo que ni siquiera se compilará en ARM; desplácese hacia abajo hasta la respuesta 'hping'. Es un complemento perfecto para hacer ping cuando necesita probar un puerto y es fácilmente accesible en varios repositorios (es decir, Ubuntu, Arch), incluido ARM.
Mark
¿Cómo puedo instalar paping? He visitado el repositorio pero no hay lanzamientos. Ah, no importa ... el código de Google no estaba disponible para mí en ese momento.
Shayan
310

Los puertos son un concepto de UDP y TCP . Los mensajes de ping se conocen técnicamente como solicitud de eco ICMP y respuesta de eco ICMP, que son parte de ICMP . ICMP, TCP y UDP son "hermanos"; no se basan el uno en el otro, sino que son tres protocolos separados que se ejecutan sobre IP.

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

nmap -p 80 onofri.org

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

BenjiWiebe
fuente
22
+1 lo entiendes bien. ICMP está construido sobre IP, que tiene un concepto de direcciones IP pero no de puertos. TCP y UDP también están por encima de IP, y son esos protocolos los que agregan "puertos". ICMP, TCP y UDP están todos en el mismo "nivel" en términos del protocolo que llevan.
Jason C
14
+1. Mucha, mucha gente piensa que si no pueden hacer ping a algo, no pueden conectarse a él ... pero, como usted dice, ICMP es diferente de TCP y UDP: si tiene la intención de servir, digamos, una página web en TCP 80, de lo que solo necesita abrir TCP 80 en el firewall, nada más (por lo que Ping a la misma IP podría (... debería!) bloquearse, por ejemplo)
Olivier Dulac
66
Solo para mantener la información precisa, ICMP no es un protocolo de capa de transporte como TCP o UDP. Al igual que una serie de protocolos, no encaja completamente en los modelos conceptuales de red, pero generalmente se considera un protocolo de capa de red / internetwork como lo es IP. A veces también se le conoce como protocolo L3.5.
YLearn
2
@BenjiWiebe, estuvo de acuerdo, pero nuevamente, para mayor precisión, la declaración debe hacerse, por eso la agregué. Todo lo que se dice hasta ahora es que ICMP, TCP y UDP están relacionados. El comentario más votado llega incluso a decir que todos están en el mismo "nivel". Si bien esto no hace ninguna diferencia para el usuario promedio, hay muchos usuarios no promedio que visitan este sitio.
YLearn
44
@ OlivierDulac No sé si deberías bloquearlo. La mayoría de los servidores web que conozco lo dejan abierto. ICMP hace que Internet funcione. ¿Por qué querrías que las personas piensen que no pueden contactarte si pueden?
Cruncher
86

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

Simplemente use el comando telnet para conectarse al puerto que desea probar. Si recibe el mensaje a continuación, o un mensaje del propio servicio, entonces el puerto está activo.

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

Si conoce la secuencia de comandos para el 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 servicio en sí, ya que le mostrará información de error enviada al cliente, como los errores HTTP 500.

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

Minty16 ~ $ telnet localhost 5000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
Frank Thomas
fuente
8
Además, si la pantalla se vuelve completamente negra, es una señal de que también estás conectado.
Tensigh
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.
Brandon
@Brandon gusta cuando se mete en máquinas de desarrollo ^. ^
Cruncher
Las herramientas de desarrollador en los navegadores son mucho más fáciles, ya que aún enviarán todos los encabezados de solicitud HTTP adecuados, pero puede inspeccionar la respuesta HTTP completa. Por otra parte, si desea personalizar la solicitud también, telnet es el camino a seguir.
Carreras ligeras en órbita
Creo que todas las respuestas aquí pierden la información más crucial. Técnicamente, ¿no sería posible "hacer ping" a un puerto de la siguiente manera? Puede establecer una conexión TCP / UDP, y contar cuántos milisegundos se necesitaron para establecer esa conexión.
David
48

Sí, use 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
--- 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 de IP sin procesar, al igual que el ping (que probablemente es suid en su sistema).

d33tah
fuente
3
Desearía que esta fuera la "respuesta aceptada". hping se podía encontrar fácilmente en múltiples repositorios, a diferencia del paping, que es un código antiguo que no se compila en ARM. También, a diferencia de NMAP, haping devuelve un código de estado que es fácilmente comprobable desde un script de shell, por lo que es un sustituto perfecto de dónde usaría ping. Gracias por esta respuesta, una pena que no me haya desplazado lo suficiente como para verla y en su lugar tuve que encontrarla en otro sitio web.
Mark
No puedo instalar hping en ubuntu ... Paquete no encontrado ... Pero he encontrado. ¿ hping3Es lo mismo que hping3? @ d33tah
Shayan
Ok, lo intenté hping3y hace sonar todos los puertos ... No importa si está cerrado o abierto ... ¿Cómo puedo saber si un puerto está cerrado o abierto?
Shayan
46

Puede usar netcat para conectarse a un puerto específico para ver si obtiene una conexión. El indicador -v aumentará la verbosidad para mostrar si el puerto está abierto o cerrado. El indicador -z hará que netcat se cierre una vez que tenga una conexión. Luego 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 usar mtr con el indicador -T para tcp y el indicador -P para especificar un puerto. Esto hará algo similar a un traceroute sobre TCP en lugar de solo ICMP. Sin embargo, esto puede ser excesivo.

suspiro Tengo que editar para agregar este bit, ya que no podemos poner código en los comentarios. Puede que Knoppix esté haciendo algo diferente con su versión de netcat, pero esto es lo que obtengo 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]
Falsenames
fuente
El problema es que si lo intentas nc -z www.google.com 8000 puede tomar mucho tiempo, más de 5 segundos. Si lo hago -w 1, me toma 5 segundos. Si lo hago -w 3, me toma 3 veces más tiempo ... 15 parpadeos del cursor, 15 segundos. -w 1está destinado a ser un segundo pero 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.
barlop
maldición no hay nuevas líneas en los comentarios ... Eso parece ser un error con Cygwin. Las pruebas con Linux Mint muestran un retraso de la cantidad de segundos especificada. ejecutó esto para probar: fecha; nc-zw5 www.google.com 8000; fecha
Falsenames
También voté a @BenjiWiebe con las solicitudes de nmap. nc es más fácil de poner en un script, pero es MUCHO más fácil usar nmap visualmente.
Falsenames
Probándolo en knoppix. nc -zv -w 1 www.google.com ¿Cómo hace que lo intente solo una vez? Cuando lo intento, sí, -w 1 funciona, pero cada segundo vuelve a intentarlo hasta que hago Ctrl-C.
barlop
No estoy seguro de lo que está haciendo la versión Knoppix de 'nc -zv -w 1 www.google.com 80'. Eso funciona bien en mi sistema, consultar una vez y soltar como se supone que debe hacer -z. Además, sin el número de puerto especificado, el mío falla al decir que no hay un puerto especificado.
Falsenames
18

También podría usar nping(parte de nmap):

$ nping -p 80 localhost

Starting Nping 0.6.00 ( http://nmap.org/nping ) at 2014-06-23 11:57 CEST
SENT (0.0015s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (0.0016s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (1.0027s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (1.0027s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (2.0038s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (2.0039s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (3.0050s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (3.0050s) Handshake with localhost:80 (127.0.0.1:80) completed
SENT (4.0061s) Starting TCP Handshake > localhost:80 (127.0.0.1:80)
RECV (4.0062s) Handshake with localhost:80 (127.0.0.1:80) completed

Max rtt: 0.032ms | Min rtt: 0.008ms | Avg rtt: 0.012ms
TCP connection attempts: 5 | Successful connections: 5 | Failed: 0 (0.00%)
Tx time: 4.00575s | Tx bytes/s: 99.86 | Tx pkts/s: 1.25
Rx time: 4.00575s | Rx bytes/s: 49.93 | Rx pkts/s: 1.25
Nping done: 1 IP address pinged in 4.01 seconds
nyuszika7h
fuente
66
nping --tcp -p 80 localhost
K-Gun
Pruebo CUALQUIER puerto (puertos que no están abiertos) y todavía recibo dos apretones de manos todo el tiempo ...
Shayan
8

Puede hacer esto en el shell con Python como un revestimiento no tan corto:

$ portping() { python <<<"import socket; socket.setdefaulttimeout(1); socket.socket().connect(('$1', $2))" 2> /dev/null && echo OPEN || echo CLOSED; }
$ portping 8.8.8.8 54
CLOSED
$ portping 8.8.8.8 53
OPEN
Laboratorios AX
fuente
7

Solo como referencia, quería compartir una publicación de Vivek Gite: https://www.cyberciti.biz/faq/ping-test-a-specific-port-of-machine-ip-address-using-linux-unix/# comentario-920398

Enumera varias formas, algunas de las cuales ya están publicadas aquí. Pero lo más sorprendente para mí fue nada más que bash:

(echo >/dev/tcp/{host}/{port}) &>/dev/null && echo "opened" || echo "closed"
(echo >/dev/udp/{host}/{port}) &>/dev/null && echo "opened" || echo "closed"
(echo >/dev/tcp/www.cyberciti.biz/22) &>/dev/null && echo "Opened 22" || echo "Closed 22"
(echo >/dev/tcp/www.cyberciti.biz/443) &>/dev/null && echo "Opened 443" || echo "Closed 443"

O una versión súper simple: solo mirando la salida del siguiente patrón de comando:

echo >/dev/{tcp|udp}/{host}/{port}

Útil cuando se trabaja con contenedores acoplables aleatorios.

Jacek
fuente
looking at the output- Solo inspeccionar el código de retorno $?puede ser útil. También se cuelga en puertos cerrados, puede haber algún tiempo de espera se puede configurar en cualquier lugar ...
vp_arth
Esta solución se ve ordenada, pero echo >/dev/tcp/{hostname}/{portnumber}no termina cuando el puerto está cerrado. Y echo >/dev/tcp/{hostname}/{portnumber}no muestra nada a pesar de que el puerto está abierto y puedo verlo en un navegador.
miguelmorin
Hola mmorin, ¿qué sistema operativo utilizas? En Ubuntu se comporta como se esperaba: si el puerto está cerrado, me sale Connection refused. De lo contrario, sale sin mostrar nada y echo $?mostrando el código de salida1
Jacek
3

Añado watchherramienta aquí:

watch nmap -p22,80 google.com

Every 2,0s: nmap -p22,80 google.com   Mon Jun 15 16:46:33 2015

Starting Nmap 6.40 ( http://nmap.org ) at 2015-06-15 16:46 NOVT
Nmap scan report for google.com (127.0.0.1)
Host is up (0.0012s latency).
rDNS record for 127.0.0.1: google.com
PORT     STATE  SERVICE
22/tcp open   ssh
80/tcp closed http

Nmap done: 1 IP address (1 host up) scanned in 0.18 seconds
vp_arth
fuente
3

Es simple con nmap

ejemplos:

#sintaxis
nmap -p [port] hostName
#first is command, after scan ports, type port - port or range ports, and ip or name of website...

## Scan port 80
nmap -p 80 onofri.org

## Scan TCP port 80
nmap -p T:80 onofri.org

## Scan UDP port 53
nmap -p U:53 onofri.org

## Scan two ports ##
nmap -p 80,443 onofri.org

## Scan port ranges ##
nmap -p 80-200 onofri.org

## Combine all options ##
nmap -p U:53,111,137,T:21-25,80,139,8080 onofri.org
nmap -p U:53,111,137,T:21-25,80,139,8080 server1.cyberciti.biz
nmap -v -sU -sT -p U:53,111,137,T:21-25,80,139,8080 onofri.org

## Scan all ports with * wildcard ##
nmap -p "*" 192.168.1.1

## Scan top ports i.e. scan $number most common ports ##
nmap --top-ports 5 onofri.org
nmap --top-ports 10 onofri.org

Para más información vea esto:

escriba en la línea de comando esto: man nmap

http://www.cyberciti.biz/networking/nmap-command-examples-tutorials/ http://www.tecmint.com/nmap-command-examples/

DarckBlezzer
fuente
1

¿Está intentando probar la comunicación u obtener una respuesta del puerto 80 en ese nodo? PINGintentará establecer comunicación con un host específico a través de ICMP que no tiene nada que ver con los puertos.

En su lugar, intente http://nmap.org/ para verificar la información del puerto y probar la comunicación:

nmap -v -p 80 onofri.org
Quijote Shin
fuente
1
No estoy seguro de qué versión de nmap estás usando. En mi sistema, requiere que -v y -p se separen como 'nmap -v -p 80 onofri.org'. Esto se debe a que -v y -vv significan cosas diferentes, -v tomando más v como argumento.
Falsenames