Diferença entre executar ping com e sem http: //

46

Estou tentando http://www.example.com/executar ping no meu site e ele resolve para um endereço IP desconhecido e atinge o tempo limite.

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

mas quando eu sigo example.comele funciona

O que é que eu estou perdendo aqui?

Saransh Singh
fonte
32
O que é confuso aqui é que o ping nem deveria ser capaz de resolver isso como um nome de host, muito menos enviar pacotes ICMP com falha. Em qual OS / versão você está?
fofo
11
Peço desculpas, mas rejeitei isso por causa de uma combinação de razões - novo usuário com uma pergunta que contém um URL para o site deles com saída aparentemente falsificada do PING. Por todos os direitos, é uma tentativa de direcionar tráfego para o URL. A menos que possamos descobrir qual sistema operacional possui uma versão do PING que 1) sabe o que é um URL e 2) identifica o número icmp_seq para cada tempo limite.
Amanhecer Benton
25
Para as pessoas que downvoted porque não sei que existem serviços de DNS que roubam pesquisas falharam, não sabia pinge getaddrinfo()e amigos passam por barras, não sabia que 56 data bytesé um padrão comum, etc .: Por favor, tome isso como um sinal que seus esforços para aprender mais sobre as coisas antes de tentar ajudar seriam apreciados.
rakslice
5
@ Ƭᴇcʜιᴇ007 Os resultados de ping são reais, eu vejo exatamente o mesmo quando eu ping um nome de host inválido com Time Warner Cable DNS no Mac OS X.
Hunter Dolan

Respostas:

108

Estou tentando executar ping no meu site http://www.example.com/ e ele resolve para um endereço IP desconhecido e atinge o tempo limite.

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

O argumento para executar ping é um nome de host (ou um endereço IP).

Portanto, o seguinte funcionará:

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

Por outro lado,

ping http://www.example.com/

não funcionará, pois http://www.example.com/ é um URL (URL) não um nome de host válido (embora parte dele seja um nome de host).

Um URL HTTP é composto de 4 partes:

  • Esquema - sempre presente
  • Nome do host - sempre presente
  • Caminho ou Haste - sempre presente, mas às vezes é nulo
  • Parâmetros - opcionais

O ping normalmente não reconhece URLs como um nome de host de destino válido.

Notas :

  • Nem todos os URLs têm o formato mencionado acima.

  • Uma URL completa consiste em um especificador de esquema de nomeação seguido por uma sequência cujo formato é uma função do esquema de nomeação.

  • O formato de um URL é definido na especificação IETF Uniform Resource Locator (URL)


Seqüestro de DNS

Uma exceção ao acima pode ocorrer se o servidor DNS (que resolve nomes de host para endereços IP) estiver configurado para retornar um endereço IP válido, mesmo que um nome de host inválido seja fornecido.

Isso pode acontecer se um ISP estiver seqüestrando suas consultas DNS.

Da resposta Por que o ping está resolvendo para um IP 198.105.254.228 para qualquer nome de host aleatório digitado? de Michael Hampton :

Eles estão tentando ser "úteis" redirecionando solicitações de domínios inexistentes para um serviço de etiqueta em branco que fornece resultados de pesquisa e publicidade, dos quais todos, menos você, recebem uma fatia da receita.

Felizmente, eles têm uma página de preferências onde você pode desativá-la.

DavidPostill
fonte
33

Quando você executa o comando ping com uma sequência que não é um endereço IP, ele primeiro precisa resolver o endereço IP do host que você está tentando executar ping.

Quando você executa:

$ ping example.com

O servidor DNS retorna o endereço IP do servidor que hospeda o site.

No entanto, quando você prefixa o protocolo e o caminho para criar um URL http padrão que é todo enviado ao servidor DNS para ser resolvido.

Portanto, em vez de o servidor DNS encontrar o registro, example.comele procura pelo registro http://example.com/que não é um nome de host válido.

Muitos servidores DNS retornarão sem nada. Nesse caso, o comando ping apresentará um erro de resolução de DNS.

No entanto, seu servidor DNS retorna o endereço IP 123.456.789.000. O endereço parece ser um serviço de sugestões da Time Warner Cable para ajudar os usuários que digitaram incorretamente o URL no navegador.

Mas o comando ping leva isso literalmente e acredita que o nome do host http://example.com/(que não é um nome de host válido) resolve para o endereço 123.456.789.000.

A razão pela qual o comando ping atinge o tempo limite depois disso é porque 123.456.789.000não responde às solicitações do ICMP.

Hunter Dolan
fonte
5
Vale ressaltar que o domínio / ip real foi editado pelo bot da comunidade. "123.456.789.000" era originalmente o endereço IP que o DNS do TWC descartou quando você tentou resolver um nome de host inexistente.
Hunter Dolan
1
O bot não sabe como fazer edições automáticas; Eu diria que é uma edição sugerida por um usuário anônimo.
Léo Lam
A edição foi proposta por um usuário anônimo e aprovada por mim e por outro usuário.
DavidPostill
21

O http: // significa protocolo de transferência de hipertexto, o protocolo usado para acessar páginas da web. O ping de um servidor não usa HTTP, mas consiste em uma mensagem ICMP (Internet Control Message Protocol), portanto, o http: // não faz sentido nesse contexto.

KJ4TIP
fonte
Eu diria que não é óbvio para alguém que ainda não sabe, mas agora que você conhece as informações da resposta do KJ4TIP, veja a saída: Request timeout for icmp_seq 0Você pode ver o ICMP lá, significando a sequência 0, 1, 2 do ICMP ...
Tyler Collier
0

Por que você usaria 'ping' de qualquer maneira. Não funcionará se houver um firewall que bloqueie o tráfego 'ping'.

Na minha opinião, se você for testar um servidor Web, é melhor usar o 'telnet', então você pode testar o host e a porta em que ele deve estar ouvindo.

por exemplo: Para testar seu servidor web telnet www.mywebserver.com 80 na tela em branco, digite 'get' e depois 'enter' e você deverá obter uma pilha de respostas http do servidor web. ( por exemplo: Solicitação HTTP / 1.1 400 incorreta ... )

Isso me diz que não apenas o servidor está 'ativo', mas também está ouvindo e respondendo na porta 80. (Eu também esperaria que todos os firewalls deixassem a porta 80 passar para o meu servidor da web)

Da mesma forma, 'telnet' também funciona para testar servidores de correio, ftp e praticamente qualquer outra coisa.

MattW
fonte