spoon |
09-18-2008 04:33 PM |
Quote:
Originally Posted by cubber
(Post 156289)
Very nice! Cant wait to go home and log on to test! Only one thing I see that could be a security risk though is that the username used to establish the telnet connection is displayed before the uptime report:
Code:
Server is ONLINE
TELNET-USERNAME uptime Worldserver Uptime: 01d 06h 39m 52s
Nobody is online
How can it be hidden?
|
Haven't properly tested the regex, but try this:
PHP Code:
<?php
class telnet {
// Variables var $message = array(); var $connection;
// Connects to the World Telnet Server function connect(){ // Open Socket Connection $this->connection = fsockopen('127.0.0.1', 9000);
if(!$this->connection){ $this->message[] = "Error connecting to World Telnet Server"; return false; }else{ fputs($this->connection, sprintf("%s\r", 'USER_NAME')); usleep(125000); fputs($this->connection, sprintf("%s\r", 'PASSWORD')); usleep(125000); return true; } } // Close the Telnet Connection function close(){ fclose($this->connection); } // Server Uptime function uptime(){ fputs ($this->connection, "uptime\r"); usleep(125000); while (!feof($this->connection)){ $ret = fgets($this->connection); if (ereg("Uptime", $ret)) { $ret = str_replace("$user", "", $ret); return str_replace(">", "", $ret); break; } } } // Zone Status function zonestatus($zone=''){ fputs ($this->connection, sprintf("zonestatus %s\r", $zone)); usleep(125000); while(!feof($this->connection)){ $ret = fgets($this->connection); if (ereg("$Server:", $ret)){ echo "$ret \n <br>"; } if(ereg("avail", $ret)){ echo "$ret \n <br>"; break; } } } // Kick Character from World Server function kick($character, $message='YOU ARE BEING KICKED FROM THE SERVER IN 4 SECONDS'){ fputs($this->connection, sprintf("tell %s %s\r", $character, $message)); sleep(4); fputs($this->connection, sprintf("kick %s\r", $character)); $this->message[] = "Character has been kicked from server"; sleep(1); } // Send Character a Tell function tell($character, $message){ fputs($this->connection, sprintf("tell %s %s\r", $character, $message)); sleep(1); $this->message[] = sprintf("Message Sent to Character: %s", $character); } // Send Server a OOC Message function ooc($message){ fputs($this->connection, sprintf("ooc %s\r", $message)); sleep(1); $this->message[] = "Message sent to OOC"; } // Broadcast Message Server Wide function broadcast($message){ fputs($this->connection, sprintf("broadcast %s\r", $message)); sleep(1); $this->message[] = "Broadcast Message Sent to World Server"; } // Who/Who All function whoall($who=''){ fputs ($this->connection, sprintf("who%s\r", $who)); usleep(125000);
while (!feof($this->connection)) { $ret_tmp = fgets($this->connection);
if(ereg("zone", $ret_tmp)){ $ret[++$x] = $ret_tmp; } if(ereg("online", $ret_tmp)){ break; } } if( !is_array($ret) ) { return; }
// Process each line of the returned results foreach ($ret as $key => $value) { // Original Return $players[$key]['original'] = $value;
// GM Status if (preg_match("/\*.*\*/", $value, $matches)) { $players[$key]['GM'] = trim($matches[0], "* "); } // Role/Anon, Level & Class if (preg_match("/\[.*\]/", $value, $matches)) { $tmp = explode(" ", trim($matches[0], "[] ")); if (!is_numeric($tmp[0])) { $players[$key]['Visible'] = $tmp[0]; $players[$key]['Level'] = $tmp[1]; $players[$key]['Class'] = rtrim($tmp[2] . " " . $tmp[3], " "); } else { $players[$key]['Level'] = $tmp[0]; $players[$key]['Class'] = rtrim($tmp[1] . " " . $tmp[2], " "); } } // Character's Name if(preg_match("/\].*\(/", $value, $matches)){ $players[$key]['Name'] = trim($matches[0], "] ("); } // Race if(preg_match("/\(.*\)/", $value, $matches)){ $players[$key]['Race'] = trim($matches[0], "( )"); } // Zone if(preg_match("/zone:.*AccID:/", $value, $matches)){ $players[$key]['ZoneLong'] = substr($matches[0], 6, -7); } // Account ID if(preg_match("/AccID:.*AccName:/", $value, $matches)){ $players[$key]['AcctID'] = substr($matches[0], 7, -9); } // Account Name if(preg_match("/AccName:.*LSID:/", $value, $matches)){ $players[$key]['AcctName'] = substr($matches[0], 9, -6); } // Login Server ID if(preg_match("/LSID:.*Status:/", $value, $matches)){ $players[$key]['LSID'] = substr($matches[0], 6, -8); } // Status if(preg_match("/Status:.*/", $value, $matches)){ $players[$key]['Status'] = substr($matches[0], 8, 3); } } // Return Player Array return $players; }
}
$telnet = new telnet; if($telnet->connect() ) { // We are connected... yay! echo "<h1>Server is <span style='background-color:green;'>UP</span></h1>"; $uptime = $telnet->uptime(); $uptime = preg_replace( '/^.*:/','' , $uptime ); echo "<p> Uptime: " . $uptime . "</p>"; $players = $telnet->whoall(); if( is_array($players) ) { echo "<table><tr><td>Name</td><td>Class</td><td>Level</td><td>Zone</td></tr>"; foreach( array_keys($players) as $key) { echo "<tr><td>" . $players[$key]['Name'] . "</td>"; echo "<td>" . $players[$key]['Class']. "</td>"; echo "<td>" . $players[$key]['Level']. "</td>"; echo "<td>" . $players[$key]['ZoneLong']. "</td><tr>"; } echo "</table>"; } else { echo "<p>Nobody is on</p>"; } } else { // OH NOS! echo "<h1>Server is <span style='background-color:red;'>DOWN</span></h1><p>" . $telnet->message[0] ."</p>"; } ?>
|