mirror of
https://github.com/phpseclib/phpseclib.git
synced 2024-12-27 03:42:40 +00:00
- add two new logging modes
git-svn-id: http://phpseclib.svn.sourceforge.net/svnroot/phpseclib/trunk@217 21d32557-59b3-4da0-833f-c5933fad653e
This commit is contained in:
parent
9a7d6cdb54
commit
7ef3108d00
@ -143,6 +143,10 @@ define('NET_SSH2_LOG_SIMPLE', 1);
|
|||||||
* Returns the message content
|
* Returns the message content
|
||||||
*/
|
*/
|
||||||
define('NET_SSH2_LOG_COMPLEX', 2);
|
define('NET_SSH2_LOG_COMPLEX', 2);
|
||||||
|
/**
|
||||||
|
* Outputs the content real-time
|
||||||
|
*/
|
||||||
|
define('NET_SSH2_LOG_REALTIME', 3);
|
||||||
/**#@-*/
|
/**#@-*/
|
||||||
|
|
||||||
/**#@+
|
/**#@+
|
||||||
@ -635,6 +639,30 @@ class Net_SSH2 {
|
|||||||
*/
|
*/
|
||||||
var $curTimeout;
|
var $curTimeout;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Real-time log file pointer
|
||||||
|
*
|
||||||
|
* @see Net_SSH2::_append_log()
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $realtime_log_file;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Real-time log file size
|
||||||
|
*
|
||||||
|
* @see Net_SSH2::_append_log()
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $realtime_log_size;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Real-time log file wrap boolean
|
||||||
|
*
|
||||||
|
* @see Net_SSH2::_append_log()
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $realtime_log_wrap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default Constructor.
|
* Default Constructor.
|
||||||
*
|
*
|
||||||
@ -1874,6 +1902,9 @@ class Net_SSH2 {
|
|||||||
function disconnect()
|
function disconnect()
|
||||||
{
|
{
|
||||||
$this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
|
$this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
|
||||||
|
if (isset($this->realtime_log_file) && is_resource($this->realtime_log_file)) {
|
||||||
|
fclose($this->realtime_log_file);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1953,12 +1984,10 @@ class Net_SSH2 {
|
|||||||
$this->get_seq_no++;
|
$this->get_seq_no++;
|
||||||
|
|
||||||
if (defined('NET_SSH2_LOGGING')) {
|
if (defined('NET_SSH2_LOGGING')) {
|
||||||
$temp = isset($this->message_numbers[ord($payload[0])]) ? $this->message_numbers[ord($payload[0])] : 'UNKNOWN (' . ord($payload[0]) . ')';
|
$message_number = isset($this->message_numbers[ord($payload[0])]) ? $this->message_numbers[ord($payload[0])] : 'UNKNOWN (' . ord($payload[0]) . ')';
|
||||||
$this->message_number_log[] = '<- ' . $temp .
|
$message_number = '<- ' . $message_number .
|
||||||
' (' . round($stop - $start, 4) . 's)';
|
' (' . round($stop - $start, 4) . 's)';
|
||||||
if (NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX) {
|
$this->_append_log($message_number, $payload);
|
||||||
$this->_append_log($payload);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->_filter($payload);
|
return $this->_filter($payload);
|
||||||
@ -2255,12 +2284,10 @@ class Net_SSH2 {
|
|||||||
$stop = strtok(microtime(), ' ') + strtok('');
|
$stop = strtok(microtime(), ' ') + strtok('');
|
||||||
|
|
||||||
if (defined('NET_SSH2_LOGGING')) {
|
if (defined('NET_SSH2_LOGGING')) {
|
||||||
$temp = isset($this->message_numbers[ord($data[0])]) ? $this->message_numbers[ord($data[0])] : 'UNKNOWN (' . ord($data[0]) . ')';
|
$message_number = isset($this->message_numbers[ord($data[0])]) ? $this->message_numbers[ord($data[0])] : 'UNKNOWN (' . ord($data[0]) . ')';
|
||||||
$this->message_number_log[] = '-> ' . $temp .
|
$message_number = '-> ' . $message_number .
|
||||||
' (' . round($stop - $start, 4) . 's)';
|
' (' . round($stop - $start, 4) . 's)';
|
||||||
if (NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX) {
|
$this->_append_log($message_number, $data);
|
||||||
$this->_append_log($data);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
@ -2274,15 +2301,60 @@ class Net_SSH2 {
|
|||||||
* @param String $data
|
* @param String $data
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
function _append_log($data)
|
function _append_log($message_number, $message)
|
||||||
{
|
{
|
||||||
$this->_string_shift($data);
|
switch (NET_SSH2_LOGGING) {
|
||||||
$this->log_size+= strlen($data);
|
// useful for benchmarks
|
||||||
$this->message_log[] = $data;
|
case NET_SSH2_LOG_SIMPLE:
|
||||||
while ($this->log_size > NET_SSH2_LOG_MAX_SIZE) {
|
$this->message_number_log[] = $message_number;
|
||||||
$this->log_size-= strlen(array_shift($this->message_log));
|
break;
|
||||||
array_shift($this->message_number_log);
|
// the most useful log for SSH2
|
||||||
}
|
case NET_SSH2_LOG_COMPLEX:
|
||||||
|
$this->message_number_log[] = $message_number;
|
||||||
|
$this->_string_shift($message);
|
||||||
|
$this->log_size+= strlen($message);
|
||||||
|
$this->message_log[] = $message;
|
||||||
|
while ($this->log_size > NET_SSH2_LOG_MAX_SIZE) {
|
||||||
|
$this->log_size-= strlen(array_shift($this->message_log));
|
||||||
|
array_shift($this->message_number_log);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
// dump the output out realtime; packets may be interspersed with non packets,
|
||||||
|
// passwords won't be filtered out and select other packets may not be correctly
|
||||||
|
// identified
|
||||||
|
case NET_SSH2_LOG_REALTIME:
|
||||||
|
echo "<pre>\r\n" . $this->_format_log(array($message), array($message_number)) . "\r\n</pre>\r\n";
|
||||||
|
flush();
|
||||||
|
ob_flush();
|
||||||
|
break;
|
||||||
|
// basically the same thing as NET_SSH2_LOG_REALTIME with the caveat that NET_SSH2_LOG_REALTIME_FILE
|
||||||
|
// needs to be defined and that the resultant log file will be capped out at NET_SSH2_LOG_MAX_SIZE.
|
||||||
|
// the earliest part of the log file is denoted by the first <<< START >>> and is not going to necessarily
|
||||||
|
// at the beginning of the file
|
||||||
|
case NET_SSH2_LOG_REALTIME_FILE:
|
||||||
|
if (!isset($this->realtime_log_file)) {
|
||||||
|
// PHP doesn't seem to like using constants in fopen()
|
||||||
|
$filename = NET_SSH2_LOG_REALTIME_FILE;
|
||||||
|
$fp = fopen($filename, 'w');
|
||||||
|
$this->realtime_log_file = $fp;
|
||||||
|
}
|
||||||
|
if (!is_resource($this->realtime_log_file)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$entry = $this->_format_log(array($message), array($message_number));
|
||||||
|
if ($this->realtime_log_wrap) {
|
||||||
|
$temp = "<<< START >>>\r\n";
|
||||||
|
$entry.= $temp;
|
||||||
|
fseek($this->realtime_log_file, ftell($this->realtime_log_file) - strlen($temp));
|
||||||
|
}
|
||||||
|
$this->realtime_log_size+= strlen($entry);
|
||||||
|
if ($this->realtime_log_size > NET_SSH2_LOG_MAX_SIZE) {
|
||||||
|
fseek($this->realtime_log_file, 0);
|
||||||
|
$this->realtime_log_size = strlen($entry);
|
||||||
|
$this->realtime_log_wrap = true;
|
||||||
|
}
|
||||||
|
fputs($this->realtime_log_file, $entry);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user