“ping”和“wget”在主机名解析方面的区别

“ping”和“wget”在主机名解析方面的区别

我使用的时候wget,主机名解析没问题

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

结果是

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.

但是当我使用ping

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

结果是

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

wget主机名解析失败,和之间有什么区别ping

答案1

回答:

在主机名解析方面,“ping”和“wget”有什么区别

Ping需要 IP 地址或主机名作为参数。您给它一个完整的 URL,它尝试将其解析为主机名,但失败了。除了完全限定的命名剥离之外的所有内容,该ping命令都能够检查连接(并且在我的以下测试中失败,可能是因为请求ICMP被阻止或因为服务器已关闭):

$ 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.

ping有关和之间的一般区别wget,请参阅亚历克的回答。

有关解释错误 400 的可能原因,请参阅 roaima 的一个。

答案2

回答您实际提出的问题。wget需要一个 URL,但ping需要一个主机名。您的 URL 由协议 ( https)、主机名 ( gfe.cit.api.here.com)、路径 ( /1/layer_put.json) 和三个编码参数 ( )组成layer_id=123&app_id=x2&app_code=x1。 URL 中还可能出现其他项目,例如身份验证和端口。

该命令仅接受主机名部分ping

然后,该wget命令打开到协议所需端口的 TCP/IP 连接(443/tcp在 的情况下https),并使用 HTTP 协议从指定的 URL 检索内容。

ping命令使用 ICMP 发送向指定主机发出请求,然后返回回显回复回复。这些分别是 ICMP 数据包类型 8 和 0。


现在,失败的根本原因wget是您没有引用 参数wget,因此 shell 会解析它。&URL 中间的字符告诉 shell 在后台运行到该点为止的所有内容。然后它立即运行该行的其余两个部分,并立即出错。

在您的网址周围使用单引号,它可能会按您的预期工作。

所以我们有

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

答案3

Wget 主要用于通过 HTTP、HTTPS 和 FTP 下载,因此默认情况下将使用 TCP 进行连接。 Ping 使用一种称为ICMP,这基本上是向主机说“你好”并查看它是否响应。 ICMP 不使用端口,这就是 http:// 的含义。它告诉“计算机“在端口 80 上打开连接”,对于 HTTPS 端口 443。由于 ICMP 不使用端口,因此 ping 只需要 IP 地址,但 wget 建立了 TCP 连接并下载文件。

相关内容