User:Pizzahut/test.php
Jump to navigation
Jump to search
A test script in PHP to check which master servers respond.
The results can vary on a daily basis.
<?php $master_servers = array("68.177.101.62", "69.28.158.131", "208.64.200.117", "208.64.200.118"); define("MIN_PORT", 27010); define("MAX_PORT", 27013); define("FILTER", '\gamedir\tfc'); define("REGION", "\xFF"); define("TIMEOUT", 2.0); function query_timeout(&$socket, $seed) { stream_set_timeout($socket, TIMEOUT); if (!fwrite($socket, "1".REGION."$seed\0".FILTER."\0")) { fclose($socket); exit("fwrite error\n"); } stream_set_timeout($socket, TIMEOUT); $s = bin2hex(fread($socket, 6)); $info = stream_get_meta_data($socket); if ($info['timed_out']) echo "UNKNOWN (time out occurred)\n"; else { if ($s !== "ffffffff660a") { if ($s == "") echo "DOWN\n"; else echo "MALFUNCTION (expected ff ff ff ff 66 0a (hex) but got $s)\n"; return True; } else echo "UP\n"; } return $info['timed_out']; } // Connect to master server, return timeout info. // The socket is passed as reference and thus returned as well. function master_server_timeout(&$socket, $ip) { $port = MIN_PORT; do { echo "Connecting to master server \"$ip:$port\".\n"; $socket = fsockopen("udp://$ip", $port, $errno, $errstr, TIMEOUT); if (!$socket) exit("Error $errno : $errstr \n"); $timeout = query_timeout($socket, "0.0.0.0:0"); fclose($socket); $port = $port + 1; } while ($port <= MAX_PORT); return $timeout; } // Try all master servers. foreach ($master_servers as $ip) $timeout=master_server_timeout($socket, $ip) ?>