【问题标题】:PHP: gethostbyaddr() returning an invalid urlPHP:gethostbyaddr() 返回一个无效的 url
【发布时间】:2016-10-16 14:20:36
【问题描述】:

我正在编写一个 PHP 脚本来尝试将模糊的 URL(例如输入 facebook.com)解析为绝对 URL(例如 https://www.facebook.com);类似于您的浏览器每天使用 PHP 所做的事情。

到目前为止,我得到了以下代码:

$link = gethostbyname("facebook.com");

这提供了一个有效的 IPV4 地址,但是当我使用反向查找时:

$link2 = gethostbyaddr($link);

我希望收到像“https://www.facebook.com”这样的有效 URL,但我收到了像“'edge-star-mini-shv-13-atn1.facebook.com'”这样的垃圾

这就打破了使用 fopen 或 curl 尝试阅读网页内容的希望。

谁能解释这里出了什么问题以及我该如何解决?

编辑:尝试像“google.co.uk”这样的不安全网址会返回“'lhr25s10-in-f3.1e100.net'”,因此它与安全 HTTP (HTTPS) 无关

【问题讨论】:

  • @C0dekid - 是的。 “google.co.uk”提供“'lhr25s10-in-f3.1e100.net'”,这根本不安全
  • 等一下.. host 是这个 IP 托管的域,使用 GeoIP 工具并自己查看。 Hostbyaddr 不是网站链接。
  • 试试tracert facebook.com 或linux traceroute facebook.com 你会看到很多垃圾。这些是主机名。
  • 主机名不是 URL。

标签: php gethostbyaddr


【解决方案1】:

gethostbyaddr 获取 IP 地址的主机名,而不是 URL。

可以将多个主机名分配给一个 IP 地址。

gethostbyaddr 将获得默认值。

侦听该 IP 地址的 HTTP 服务器将处理对所有主机名的请求。

HTTP 请求包含一个名为 Host 的请求标头,它指定您请求的主机名。

HTTP 服务器可以关注该标头并为不同的主机名提供不同的内容。这允许多个网站托管在一个 IP 地址上。这非常有用,因为 IPv4 地址供应有限,而且有很多很多网站。

您正在获取托管 facebook.com 的计算机的默认主机名,但网络服务器并未在该主机名上托管您想要的网站。

【讨论】:

  • 啊。我知道了。您建议使用什么来检索网站?如果您可以编辑您的答案以包含此内容,我会接受它
  • 首先要知道您要处理的网站的 URL(而不是托管它的计算机的 IP 地址)并使用它。即绝对跳过你在问题中所做的一切。
  • 但是...您的浏览器不是这样的。您无需知道确切的 URL 即可让您的浏览器解读您的意图
  • @Raisus — 浏览器唯一不同的是,如果您忘记输入它,它会将http:// 添加到 URL 的前面(或者如果您忘记输入它,它会将所有内容推送到搜索引擎看起来您根本没有输入 URL)
  • 我可以在浏览器中输入“google.com”,它不仅会添加 http(或者在 facebook.com 的情况下是 https),还会添加 www。也是。编辑:您并不是说它所做的只是添加 www.同样,不使用 www 的网站(例如博客)呢?还是其他?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
相关资源
最近更新 更多