我正在构建一个小型 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.com
但wget
不喜欢在 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 状态代码?