A diferença entre 'ping' e 'wget' em relação à resolução do nome do host

3

Quando usei wget , a resolução do nome do host é ok

root:here cd$ wget https://gfe.cit.api.here.com/1/layer_put.json?layer_id=123&app_id=x2&app_code=x1

O resultado é

Resolving gfe.cit.api.here.com... 52.51.134.116, 54.154.19.134, 52.208.9.155
Connecting to gfe.cit.api.here.com|52.51.134.116|:443... connected.
HTTP request sent, awaiting response... 400 Bad Request
2016-12-24 13:18:47 ERROR 400: Bad Request.

Mas quando usei ping

ping https://gfe.cit.api.here.com/1/layer_put.json?layer_id=123&app_id=x2&app_code=x1

O resultado é

cannot resolve https://gfe.cit.api.here.com/1/layer_put.json?layer_id=123: Unknown host

A resolução do nome do host falhou, qual é a diferença entre wget e ping ?

    
por cdhit 24.12.2016 / 01:25

3 respostas

11

Respondendo a:

What is the difference between 'ping' and 'wget' in relation to hostname resolution

Ping espera um endereço IP ou um nome de host como parâmetro. Você está dando a ela uma URL completa que tenta resolver como um nome de host e falha. Com tudo, menos o nome totalmente qualificado removido, o comando ping pode verificar a conexão (e falha no meu teste a seguir, talvez porque a solicitação ICMP esteja bloqueada ou porque o servidor está inativo):

$ ping gfe.cit.api.here.com

Pinging cle2-cit.eu-west-1.elasticbeanstalk.com [54.154.19.134] with 32 bytes of data:
Request timed out.

Para a diferença geral entre ping e wget , consulte a resposta de Alec.

Por um motivo provável explicando o erro 400, veja um deles.

    
por 24.12.2016 / 02:25
5

O Wget é usado principalmente para download via HTTP, HTTPS e FTP, portanto, por padrão, o TCP será usado para conexões. Ping usa um protocolo chamado ICMP , que basicamente diz "olá" ao host e vê se ele responde. O ICMP não usa uma porta, que é o que significa http: //. Ele diz "o computador" abre uma conexão na porta 80 "e para a porta HTTPS 443. Como o ICMP não usa portas, o ping espera apenas e o endereço IP, mas o wget estabeleceu uma conexão TCP e baixa um arquivo.

    
por 24.12.2016 / 01:30
5

Para responder à pergunta que você realmente fez. wget usa um URL, mas ping recebe um nome de host. Seu URL é composto por um protocolo ( https ), um nome de host ( gfe.cit.api.here.com ), um caminho ( /1/layer_put.json ) e três parâmetros codificados ( layer_id=123&app_id=x2&app_code=x1 ). Existem outros itens que podem aparecer em um URL, como uma autenticação e uma porta.

Apenas o componente hostname é aceitável para o comando ping .

O comando wget abre uma conexão TCP / IP com a porta esperada pelo protocolo ( 443/tcp no caso de https ) e usa o protocolo HTTP para recuperar o conteúdo da URL especificada.

O comando ping usa o ICMP para enviar uma solicitação ping para o host especificado, que retorna a resposta resposta de eco . Estes são os tipos de pacotes ICMP 8 e 0, respectivamente.

Agora, a razão subjacente para o wget ter falhado é que você não citou o parâmetro como wget , então o shell o analisa. O caractere & no meio da URL diz ao shell para executar tudo até esse ponto em segundo plano. Em seguida, ele imediatamente executa as duas partes restantes da linha e comete erros imediatos.

Use aspas simples em torno do seu URL e provavelmente funcionará como você pretendia.

Então nós temos

wget -O layer_put.json 'https://gfe.cit.api.here.com/1/layer_put.json?layer_id=123&app_id=x2&app_code=x1'

ping -c3 gfe.cit.api.here.com
    
por 24.12.2016 / 01:55