我正在尝试 ping 我的网站http://www.example.com/
但它解析为一个未知的 IP 地址并且超时。
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
但当我 ping 的时候example.com
它就工作了
我在这里遗漏了什么?
答案1
我正在尝试 ping 我的网站http://www.example.com/并且它解析为未知的 IP 地址并超时。
PING http://www.example.com/ (198.105.254.228): 56 data bytes
Request timeout for icmp_seq 0
ping 的参数是主机名(或 IP 地址)。
因此下面的操作都可以进行:
ping example.com
ping www.example.com
ping 127.0.0.1
另一方面,
ping http://www.example.com/
不会起作用http://www.example.com/是一个 HTTP统一资源定位器 (URL)不是有效的主机名(尽管它的一部分是主机名)。
HTTP URL 由 4 个部分组成:
- 方案 — — 始终存在
- 主机名 — 始终存在
- 路径或词干 — 始终存在,但有时为空
- 参数——可选
Ping 通常不会将 URL 识别为有效的目标主机名。
笔记:
并非所有 URL 都具有上述格式。
完整的 URL 由命名方案说明符和后跟的字符串组成,字符串的格式取决于命名方案。
URL 的格式在 IETF 规范中定义统一资源定位符 (URL)
DNS劫持
如果 DNS 服务器(将主机名解析为 IP 地址)配置为即使提供了无效的主机名也返回有效的 IP 地址,则可能会发生上述情况的例外。
如果 ISP 劫持了您的 DNS 查询,就会发生这种情况。
从答案来看为什么我输入的任何随机主机名 ping 都会解析为 IP 198.105.254.228?经过迈克尔·汉普顿:
他们试图通过将不存在的域名的请求重定向到白标服务该网站提供搜索结果和广告,除了你之外的所有人都可以从中分得一杯羹。
幸运的是他们有一个偏好页面在那里你可以将其关闭。
答案2
当您使用非 IP 地址的字符串运行 ping 命令时,它首先需要解析您尝试 ping 的主机的 IP 地址。
当你运行时:
$ ping example.com
DNS 服务器返回托管该网站的服务器的 IP 地址。
但是,当您在协议和路径前添加前缀来创建标准 http URL 时,该 URL 都会被发送到 DNS 服务器进行解析。
因此,DNS 服务器不会查找记录,而是查找无效主机名的example.com
记录。http://example.com/
很多 DNS 服务器不会返回任何结果。在这种情况下,ping 命令将只会显示 DNS 解析错误。
但是您的 DNS 服务器返回的是 IP 地址123.456.789.000
。该地址似乎是时代华纳有线电视公司提供的建议服务,旨在帮助那些在浏览器中输入错误 URL 的用户。
但是 ping 命令按字面意思理解,并认为主机名http://example.com/
(不是有效的主机名)解析为地址123.456.789.000
。
此后 ping 命令超时的原因是123.456.789.000
没有响应 ICMP 请求。
答案3
http:// 代表超文本传输协议,用于访问网页的协议。Ping 服务器不使用 HTTP,而是使用 ICMP(互联网控制消息协议)消息,因此 http:// 在此上下文中没有意义。
答案4
无论如何,你为什么要使用“ping”?如果有防火墙阻挡“ping”流量,它将无法工作。
在我看来,如果您要测试 Web 服务器,那么最好使用“telnet”,然后您可以测试主机和它应该监听的端口。
例如:测试你的网络服务器 telnet www.mywebserver.com 80 在空白屏幕上,输入“get”,然后输入“enter”,您应该会从 Web 服务器收到一堆 http 响应。(例如:HTTP/1.1 400 错误请求...)
这告诉我,服务器不仅处于“启动”状态,而且还在监听和响应端口 80。(我还希望任何防火墙都允许端口 80 到达我的 Web 服务器)
类似地,“telnet”也用于测试邮件服务器、ftp 以及几乎任何其他东西。