File: 0.01.2a/base/tests.inc.php (View as Code)

1: 2: function icmpChecksum($data) 3: { 4: if (strlen($data)%2) 5: $data .= "\x00"; 6: 7: $bit = unpack('n*', $data); 8: $sum = array_sum($bit); 9: 10: while ($sum >> 16) 11: $sum = ($sum >> 16) + ($sum & 0xffff); 12: 13: return pack('n*', ~$sum); 14: } 15: function PingTest($host) 16: { 17: // Checksum calculation function 18: 19: // Making the package 20: $type= "\x08"; 21: $code= "\x00"; 22: $checksum= "\x00\x00"; 23: $identifier = "\x00\x00"; 24: $seqNumber = "\x00\x00"; 25: $data= "FreeNATS"; 26: $package = $type.$code.$checksum.$identifier.$seqNumber.$data; 27: $checksum = icmpChecksum($package); // Calculate the checksum 28: $package = $type.$code.$checksum.$identifier.$seqNumber.$data; 29: // And off to the sockets 30: $socket = @socket_create(AF_INET, SOCK_RAW, 1); 31: if (!$socket) return 0; 32: //or die(socket_strerror(socket_last_error())); 33: $sconn=@socket_connect($socket, $host, null); 34: if (!$sconn) return 0; 35: // If you're using below PHP 5, see the manual for the microtime_float 36: // function. Instead of just using the m 37: // icrotime() function. 38: $startTime = microtime(true); 39: @socket_send($socket, $package, strLen($package), 0); 40: if (socket_read($socket, 255)) 41: { 42: @socket_close($socket); 43: return round(microtime(true) - $startTime, 4); 44: } 45: socket_close($socket); 46: return 0; 47: } 48: 49: function WebTest($url) 50: { 51: $fp=@fopen($url,"r"); 52: if ($fp<=0) return 0; 53: $ctr=0; 54: while ($body=@fgets($fp,1024)) $ctr+=sizeof($body); 55: @fclose($fp); 56: return $ctr; 57: } 58: 59: function DoTest($test,$param,$hostname="") 60: { 61: switch ($test) 62: { 63: case "web": 64: return WebTest($param); 65: break; 66: case "tcp": 67: $fp=@fsockopen($hostname,$param); 68: if ($fp<=0) return 0; 69: @fclose($fp); 70: return 1; 71: break; 72: case "wtime": 73: $startTime=microtime(true); 74: $r=WebTest($param); 75: $elapsedTime=round(microtime(true)-$startTime,4); 76: if ($r<=0) return -1; 77: return $elapsedTime; 78: break; 79: case "testloop": 80: return $param; 81: break; 82: } 83: return -1; 84: } 85: 86: function SimpleEval($test,$result) 87: { 88: switch($test) 89: { 90: case "ping": 91: if ($result<=0) return 2; 92: return 0; 93: case "web": 94: if ($result<=0) return 2; 95: return 0; 96: case "tcp": 97: if ($result==1) return 0; 98: return 2; 99: case "wtime": 100: if ($result<0) return 2; 101: return 0; 102: } 103: return -1; 104: } 105: 106: function aText($al) 107: { 108: switch($al) 109: { 110: case -1: return "Untested"; 111: case 0: return "Passed"; 112: case 1: return "Warning"; 113: case 2: return "Failed"; 114: default: return "Unknown"; 115: } 116: } 117: ?>