2

我正在构建一个小型 Web 应用程序,它将 ping 一系列域并返回它们的状态,让我监控它们是启动还是关闭,指向正确的服务器等(可能会或可能不会工作的实时示例

我开始使用exec("ping -n 3 -w 3 {$_POST['host']}", $output, $status);,现在正在使用exec("traceroute -w 1 {$_POST['host']}", $output, $status);并抓取最后一个$output并匹配那里的 IP。

这在大多数情况下都有效,除了我注意到它没有遵循 301 重定向等。

例如,跟踪路由myrayhawk.com会产生如下内容:

 1  192.168.1.1 (192.168.1.1)  0.495 ms  0.683 ms  0.911 ms
 2  10.71.96.1 (10.71.96.1)  32.220 ms  55.987 ms  57.109 ms
 3  ip68-4-12-93.oc.oc.cox.net (68.4.12.93)  58.231 ms  59.353 ms  60.424 ms
 4  68.4.15.242 (68.4.15.242)  72.339 ms  73.451 ms  74.641 ms
 5  ip68-4-11-16.oc.oc.cox.net (68.4.11.16)  76.265 ms  77.383 ms  79.591 ms
 6  ip68-4-11-94.oc.oc.cox.net (68.4.11.94)  143.201 ms  18.749 ms  41.717 ms
 7  langbprj01-ae1.rd.la.cox.net (68.1.1.13)  42.843 ms  43.971 ms  68.194 ms
 8  reserved.metro.la.ipv4.godaddy.com (206.223.123.32)  45.094 ms  70.501 ms  69.329 ms
 9  ip-97-74-253-94.ip.secureserver.net (97.74.253.94)  71.622 ms  72.754 ms  74.844 ms
10  ip-97-74-253-94.ip.secureserver.net (97.74.253.94)  108.322 ms  112.058 ms  109.446 ms

11  ip-97-74-253-98.ip.secureserver.net (97.74.253.98)  110.589 ms  37.376 ms  38.861 ms
12  ip-97-74-254-134.ip.secureserver.net (97.74.254.134)  68.868 ms  70.791 ms  72.282 ms
13  ip-184-168-86-185.ip.secureserver.net (184.168.86.185)  82.400 ms  76.183 ms  78.540 ms

但是做同样的事情,rayhawk.com因为我知道那里有一个 301 重定向:

 1  192.168.1.1 (192.168.1.1)  0.738 ms  0.868 ms  1.174 ms
 2  10.71.96.1 (10.71.96.1)  95.723 ms  119.914 ms  122.994 ms
 3  ip68-4-12-89.oc.oc.cox.net (68.4.12.89)  123.558 ms  124.115 ms  124.679 ms
 4  68.4.15.240 (68.4.15.240)  127.319 ms  127.933 ms  128.523 ms
 5  ip68-4-11-16.oc.oc.cox.net (68.4.11.16)  126.672 ms  132.373 ms  131.802 ms
 6  ip68-4-11-94.oc.oc.cox.net (68.4.11.94)  130.986 ms  65.913 ms  64.542 ms
 7  langbprj01-ae1.rd.la.cox.net (68.1.1.13)  89.395 ms  88.751 ms  88.113 ms
 8  reserved.metro.la.ipv4.godaddy.com (206.223.123.32)  97.840 ms  89.999 ms  90.593 ms
 9  po36.trma0202-01.bbn.mgmt.phx3.gdg (216.69.188.33)  98.454 ms  99.034 ms  115.921 ms
10  po36.trma0202-01.bbn.mgmt.phx3.gdg (216.69.188.33)  114.698 ms  114.032 ms  115.263 ms
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *

我试过使用wget --spider hostname.comwget不喜欢在 phpexec()调用中很好地工作。

当做一个wget普通的 SSH 时,我得到:

Resolving rayhawk.com... 72.167.131.159
Connecting to rayhawk.com|72.167.131.159|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.rayhawk.com/ [following]
Spider mode enabled. Check if remote file exists.
--2012-04-12 11:37:42--  http://www.rayhawk.com/
Resolving www.rayhawk.com... 72.167.131.159
Connecting to www.rayhawk.com|72.167.131.159|:80... connected.
HTTP request sent, awaiting response... 200 OK

然后可以解析出我想要的东西。

如何解析主机的最终位置并在 PHP 中检索它的 HTTP 状态代码?

4

1 回答 1

1

我写了一篇关于如何获取可能发生的 HTTP 重定向跟踪的博客文章,它附带了代码示例:

示例输出http://example.com/

Status code (after all redirects): 200
Number of responses: 2 (1 Redirect(s))
* http://example.com/ -- 302 --> http://www.iana.org/domains/example/

您可以在重定向后的相关问题 HTTP 响应代码的答案中找到对代码的更深入讨论。

于 2012-04-12T18:52:37.790 回答