Diferencia entre hacer ping con y sin http: //

46

Estoy tratando de hacer ping a mi sitio web http://www.example.com/y se resuelve en una dirección IP desconocida y se agota el tiempo de espera.

PING http://www.example.com/ (198.105.254.228): 56 data bytes 
Request timeout for icmp_seq 0 
Request timeout for icmp_seq 1 
Request timeout for icmp_seq 2

pero cuando hago ping example.comfunciona

¿Qué es lo que me estoy perdiendo aquí?

Saransh Singh
fuente
32
Lo confuso aquí es que el ping ni siquiera debería ser capaz de resolver eso como un nombre de host, mucho menos enviar paquetes ICMP fallidos. ¿En qué sistema operativo / versión estás?
esponjoso
11
Pido disculpas, pero voté en contra debido a una combinación de razones: nuevo usuario con una pregunta que contiene una URL a su sitio web con resultados aparentemente falsificados de PING. Por todos los derechos, es un intento de dirigir el tráfico a la URL. A menos que podamos averiguar qué sistema operativo tiene una versión de PING que 1) sepa qué es una URL y 2) identifique el número icmp_seq para cada tiempo de espera.
Dawn Benton
25
Para las personas que downvoted porque no saben que existen servicios de DNS que secuestran las búsquedas fallidas, no saben pingy getaddrinfo()amigos pasan a través de las barras, no sabía que 56 data byteses un defecto común, etc .: Por favor, tome esto como un signo que sus esfuerzos por aprender más sobre las cosas antes de intentar ayudar serían apreciados.
rakslice
55
@ Ƭᴇcʜιᴇ007 Los resultados de ping son reales, veo exactamente lo mismo cuando hago ping a un nombre de host no válido con TimeWarner Cable DNS en OS X.
Hunter Dolan

Respuestas:

108

Estoy tratando de hacer ping a mi sitio web http://www.example.com/ y se resuelve en una dirección IP desconocida y se agota el tiempo de espera.

PING http://www.example.com/ (198.105.254.228): 56 data bytes
Request timeout for icmp_seq 0

El argumento para hacer ping es un nombre de host (o una dirección IP).

Entonces lo siguiente funcionará:

ping example.com
ping www.example.com
ping 127.0.0.1

Por otra parte,

ping http://www.example.com/

no funcionará, ya que http://www.example.com/ es un Localizador uniforme de recursos (URL) HTTP que no es un nombre de host válido (aunque parte de él es un nombre de host).

Una URL HTTP se compone de 4 partes:

  • Esquema - siempre presente
  • Nombre de host: siempre presente
  • Ruta o tallo: siempre presente pero a veces es nulo
  • Parámetros: opcional

Ping normalmente no reconocerá las URL como un nombre de host de destino válido.

Notas :

  • No todas las URL tienen el formato mencionado anteriormente.

  • Una URL completa consta de un especificador de esquema de nombres seguido de una cadena cuyo formato es una función del esquema de nombres.

  • El formato de una URL se define en la especificación IETF Localizadores uniformes de recursos (URL)


Secuestro de DNS

Puede ocurrir una excepción a lo anterior si el servidor DNS (que resuelve los nombres de host en direcciones IP) está configurado para devolver una dirección IP válida, incluso si se proporciona un nombre de host no válido.

Esto puede suceder si un ISP está secuestrando sus consultas DNS.

De la respuesta ¿Por qué el ping se resuelve a una IP 198.105.254.228 para cualquier nombre de host aleatorio que escriba? por Michael Hampton :

Están tratando de ser "útiles" al redirigir las solicitudes de dominios inexistentes a un servicio de marca blanca que proporcione resultados de búsqueda y publicidad, de los cuales todos menos usted obtienen una parte de los ingresos.

Afortunadamente, tienen una página de preferencias donde supuestamente puede desactivarla.

DavidPostill
fuente
33

Cuando ejecuta el comando ping con una cadena que no es una dirección IP, primero debe resolver la dirección IP del host que está intentando hacer ping.

Cuando corres:

$ ping example.com

El servidor DNS devuelve la dirección IP del servidor que aloja el sitio web.

Sin embargo, cuando prefija el protocolo y la ruta para crear una URL http estándar que se envía al servidor DNS para su resolución.

Entonces, en lugar de que el servidor DNS encuentre el registro example.com, busca el registro http://example.com/que no es un nombre de host válido.

Muchos servidores DNS volverán sin nada. En ese caso, el comando ping simplemente generará un error de resolución de DNS.

Sin embargo, su servidor DNS devuelve la dirección IP 123.456.789.000. La dirección parece ser un servicio de sugerencias de Time Warner Cable para ayudar a los usuarios que escribieron mal la URL en su navegador.

Pero el comando ping toma esto literalmente y cree que el nombre de host http://example.com/(que no es un nombre de host válido) se resuelve en la dirección 123.456.789.000.

La razón por la cual el comando ping expira después de eso es porque 123.456.789.000no responde a las solicitudes ICMP.

Hunter Dolan
fuente
55
Vale la pena señalar que el dominio / ip real fue editado por el bot de la Comunidad. "123.456.789.000" fue originalmente la dirección IP que el DNS de TWC arrojó cuando intentó resolver un nombre de host inexistente.
Hunter Dolan
1
El bot no sabe cómo hacer ediciones automáticas; Diría que es una edición sugerida por un usuario anónimo.
Léo Lam
La edición fue propuesta por un usuario anónimo y aprobada por mí y otro usuario.
DavidPostill
21

Http: // significa protocolo de transferencia de hipertexto, el protocolo utilizado para acceder a las páginas web. Hacer ping a un servidor no usa HTTP, sino que consiste en un mensaje ICMP (protocolo de mensajes de control de Internet), por lo que http: // no tiene sentido en este contexto.

KJ4TIP
fuente
Diría que no es obvio para alguien que aún no sabe, pero ahora que conoce la información de la respuesta de KJ4TIP, mire la salida: Request timeout for icmp_seq 0puede ver el ICMP allí, lo que significa la secuencia ICMP 0, 1, 2 ...
Tyler Collier
0

¿Por qué usarías 'ping' de todos modos? No funcionará si hay un cortafuegos en el camino que bloquea el tráfico 'ping'.

En mi opinión, si va a probar un servidor web, entonces es mejor usar 'telnet', entonces puede probar el host y el puerto en el que debería estar escuchando.

por ejemplo: Para probar su servidor web telnet www.mywebserver.com 80 en la pantalla en blanco, escriba 'get' y luego 'enter' y debería recibir un montón de respuesta http del servidor web. ( por ejemplo: HTTP / 1.1 400 Solicitud incorrecta ... )

Esto me dice que no solo el servidor está 'activo', sino que también está escuchando y respondiendo en el puerto 80. (También esperaría que cualquier firewall deje pasar el puerto 80 a mi servidor web)

Del mismo modo, 'telnet' también funciona para probar servidores de correo, ftp y casi cualquier otra cosa.

MattW
fuente