From f65f2983b7e997a56daee3f1218bac20e2be162d Mon Sep 17 00:00:00 2001 From: Jim Wigginton Date: Wed, 25 Mar 2009 22:29:42 +0000 Subject: [PATCH] added Net_SSH2::getLog() git-svn-id: http://phpseclib.svn.sourceforge.net/svnroot/phpseclib/trunk@27 21d32557-59b3-4da0-833f-c5933fad653e --- phpseclib/Net/SSH2.php | 92 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 89 insertions(+), 3 deletions(-) diff --git a/phpseclib/Net/SSH2.php b/phpseclib/Net/SSH2.php index 2f5b94e3..a2cd448f 100644 --- a/phpseclib/Net/SSH2.php +++ b/phpseclib/Net/SSH2.php @@ -41,7 +41,7 @@ * @author Jim Wigginton * @copyright MMVII Jim Wigginton * @license http://www.gnu.org/licenses/lgpl.txt - * @version $Id: SSH2.php,v 1.11 2009-03-23 22:44:51 terrafrost Exp $ + * @version $Id: SSH2.php,v 1.12 2009-03-25 22:29:42 terrafrost Exp $ * @link http://phpseclib.sourceforge.net */ @@ -87,6 +87,20 @@ define('NET_SSH2_MASK_CONSTRUCTOR', 0x00000001); define('NET_SSH2_MASK_LOGIN', 0x00000002); /**#@-*/ +/**#@+ + * @access public + * @see Net_SSH2::getLog() + */ +/** + * Returns the message numbers + */ +define('NET_SSH2_LOG_SIMPLE', 1); +/** + * Returns the message content + */ +define('NET_SSH2_LOG_COMPLEX', 2); +/**#@-*/ + /** * Pure-PHP implementation of SSHv2. * @@ -400,6 +414,24 @@ class Net_SSH2 { */ var $get_seq_no = 0; + /** + * Message Number Log + * + * @see Net_SSH2::getLog() + * @var Array + * @access private + */ + var $message_number_log = array(); + + /** + * Message Log + * + * @see Net_SSH2::getLog() + * @var Array + * @access private + */ + var $message_log = array(); + /** * Default Constructor. * @@ -1376,6 +1408,11 @@ class Net_SSH2 { $this->get_seq_no++; + if (defined('NET_SSH2_LOGGING')) { + $this->message_number_log[] = '<- ' . $this->message_numbers[ord($payload[0])]; + $this->message_log[] = $padding; + } + return $this->_filter($payload); } @@ -1483,6 +1520,11 @@ class Net_SSH2 { return false; } + if (defined('NET_SSH2_LOGGING')) { + $this->message_number_log[] = '-> ' . $this->message_numbers[ord($data[0])]; + $this->message_log[] = $data; + } + // 4 (packet length) + 1 (padding length) + 4 (minimal padding amount) == 9 $packet_length = strlen($data) + 9; // round up to the nearest $this->encrypt_block_size @@ -1569,13 +1611,57 @@ class Net_SSH2 { } } + /** + * Returns a log of the packets that have been sent and received. + * + * $type can be either NET_SSH2_LOG_SIMPLE or NET_SSH2_LOG_COMPLEX. NET_SSH2_LOG_COMPLEX + * will contain your severs password, so don't distribute log files produced with it unless + * you've redacted the password. + * + * @param Integer $type + * @access public + * @return String or Array + */ + function getLog($type = NET_SSH2_LOG_SIMPLE) + { + if ($type != NET_SSH2_LOG_COMPLEX) { + return $this->message_number_log; + } + + $boundary = ':'; + $long_width = 65; + $short_width = 15; + + $output = ''; + for ($i = 0; $i < count($this->message_log); $i++) { + $output.= $this->message_number_log[$i] . "\r\n"; + do { + $fragment = $this->_string_shift($this->message_log[$i], $short_width); + $hex = substr( + preg_replace( + '#(.)#es', + '"' . $boundary . '" . str_pad(dechex(ord(substr("\\1", -1))), 2, "0", STR_PAD_LEFT)', + $fragment), + strlen($boundary) + ); + // replace non ASCII printable characters with dots + // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters + $raw = preg_replace('#[^\x20-\x7E]#', '.', $fragment); + $output.= str_pad($hex, $long_width - $short_width, ' ') . $raw . "\r\n"; + } while (!empty($this->message_log[$i])); + $output.= "\r\n"; + } + + return $output; + } + /** * Returns Debug Information * * If any debug information is sent by the server, this function can be used to access it. * - * @return String; - * @access private + * @return String + * @access public */ function getDebugInfo() {