I'm building a little web app that will ping an array of domains and return their status, letting me monitor if they're up or down, pointing to the right servers, etc. (live example that may or may not be working)
I started out using exec("ping -n 3 -w 3 {$_POST['host']}", $output, $status);
and am now using exec("traceroute -w 1 {$_POST['host']}", $output, $status);
and grabbing the last $output
and matching the IP there.
This works for the most part except I'm noticing it's not following 301 redirects, etc.
For example a traceroute on myrayhawk.com
yields something like:
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
But doing the same on rayhawk.com
since I know there's a 301 redirect in there:
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 * * *
I've tried using wget --spider hostname.com
but wget
doesn't like to work nicely in php exec()
calls.
When doing a wget
in plain SSH I get:
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
And could then parse out the stuff I wanted.
How can I resolve the final location of a host and retrieve it's HTTP status code in PHP?