mirror of https://github.com/tp4a/teleport
统一录像文件格式。
parent
763fdb11c8
commit
d71217d50f
|
@ -8,133 +8,43 @@
|
||||||
#include <ex.h>
|
#include <ex.h>
|
||||||
|
|
||||||
#define MAX_SIZE_PER_FILE 4194304 // 4M = 1024*1024*4
|
#define MAX_SIZE_PER_FILE 4194304 // 4M = 1024*1024*4
|
||||||
//#define MAX_SIZE_PER_FILE 40*1024
|
|
||||||
// #define SSH_DATA 1
|
|
||||||
// #define SSH_WINDOWS_SIZE 2
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
#pragma pack(push,1)
|
#pragma pack(push,1)
|
||||||
|
|
||||||
struct ts_replay_data_header
|
// 录像文件头
|
||||||
|
typedef struct TS_RECORD_HEADER
|
||||||
{
|
{
|
||||||
ex_u8 action;
|
ex_u32 magic; // "TPPR" 标志 TelePort Protocol Record
|
||||||
ex_u32 time;
|
ex_u16 ver; // 录像文件版本,目前为2
|
||||||
ex_u32 size;
|
ex_u16 protocol; // 协议:1=RDP, 2=SSH, 3=Telnet
|
||||||
//char* buf;
|
ex_u64 timestamp; // 本次录像的起始时间(UTC时间戳)
|
||||||
};
|
ex_u32 packages; // 总包数
|
||||||
struct ts_replay_header
|
ex_u32 time_ms; // 总耗时(毫秒)
|
||||||
|
ex_u16 width; // 初始屏幕尺寸:宽
|
||||||
|
ex_u16 height; // 初始屏幕尺寸:高
|
||||||
|
ex_u16 file_count; // 数据文件总数
|
||||||
|
ex_u32 file_size; // 所有数据文件的总大小(不包括每个数据文件的头,即4字节的每文件大小)
|
||||||
|
char account[16]; // teleport账号
|
||||||
|
char username[16]; // 远程主机用户名
|
||||||
|
char ip[18];
|
||||||
|
ex_u16 port;
|
||||||
|
|
||||||
|
// RDP专有
|
||||||
|
ex_u8 rdp_security; // 0 = RDP, 1 = TLS
|
||||||
|
|
||||||
|
ex_u8 reserve[128 - 4 - 2 - 2 - 8 - 4 - 4 - 2 - 2 - 2 - 4 - 16 - 16 - 18 - 2 - 1]; // 保留
|
||||||
|
}TS_RECORD_HEADER;
|
||||||
|
|
||||||
|
// 一个数据包的头
|
||||||
|
typedef struct TS_RECORD_PKG
|
||||||
{
|
{
|
||||||
char ID[16];
|
ex_u8 type; // 包的数据类型
|
||||||
char version[16];
|
ex_u32 size; // 这个包的总大小(不含包头)
|
||||||
ex_u8 total_size;
|
ex_u32 time_ms; // 这个包距起始时间的时间差(毫秒,意味着一个连接不能持续超过49天)
|
||||||
ex_u8 total_file_count;
|
ex_u8 reserve[3]; // 保留
|
||||||
ex_u32 total_time;
|
}TS_RECORD_PKG;
|
||||||
//数组,每个数组元素的内容是每个文件的播放时长
|
|
||||||
};
|
|
||||||
struct ssh_terms_data_header
|
|
||||||
{
|
|
||||||
char ID[16];
|
|
||||||
char version[16];
|
|
||||||
ex_u32 term_count;
|
|
||||||
//数组,每个数组元素的内容是每个文件的播放时长
|
|
||||||
};
|
|
||||||
struct ssh_terms_data {
|
|
||||||
//char term[16];
|
|
||||||
ex_u32 time;
|
|
||||||
ex_u32 w;
|
|
||||||
ex_u32 h;
|
|
||||||
//ex_u32 px;
|
|
||||||
//ex_u32 py;
|
|
||||||
};
|
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
typedef std::vector<ex_u32> file_time_list;
|
|
||||||
|
|
||||||
typedef std::vector<ssh_terms_data> windows_size_list;
|
|
||||||
|
|
||||||
class base_record
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
base_record();
|
|
||||||
~base_record();
|
|
||||||
public:
|
|
||||||
void begin(int record_id, int record_type);
|
|
||||||
void record(unsigned char* buf, int len, int cmd);
|
|
||||||
void windows_size(ssh_terms_data size_info);
|
|
||||||
void end();
|
|
||||||
ex_astr get_replay_path() {
|
|
||||||
return m_current_path;
|
|
||||||
}
|
|
||||||
protected:
|
|
||||||
bool open_next_file();
|
|
||||||
bool cached_buffer(ts_replay_data_header* header, unsigned char* buf,int len);
|
|
||||||
bool save_buffer_to_file(int internal_time);
|
|
||||||
bool save_to_file(int internal_time, ts_replay_data_header* header, unsigned char* buf, int len);
|
|
||||||
protected:
|
|
||||||
ex_u64 m_begin_time;
|
|
||||||
ex_u64 m_last_time;
|
|
||||||
|
|
||||||
int m_file_current_index;
|
|
||||||
|
|
||||||
ex_astr m_current_path;
|
|
||||||
FILE* m_current_file;
|
|
||||||
unsigned char* m_buf;
|
|
||||||
int m_buf_offset;
|
|
||||||
|
|
||||||
file_time_list m_timelist;
|
|
||||||
windows_size_list m_windows_size_list;
|
|
||||||
|
|
||||||
int m_totol_size;
|
|
||||||
//Json::Value m_ts_replay;
|
|
||||||
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//====================================================
|
|
||||||
// NEW INTERFACE
|
|
||||||
//====================================================
|
|
||||||
|
|
||||||
// #define TS_RECORD_TYPE_RDP_CURSOR_POS 0x10 // 鼠标坐标位置改变,用于绘制虚拟鼠标
|
|
||||||
// #define TS_RECORD_TYPE_RDP_SERVER_PKG 0x11 // 服务端返回的数据包,用于展示
|
|
||||||
|
|
||||||
// #pragma pack(push,1)
|
|
||||||
//
|
|
||||||
// // 录像文件头
|
|
||||||
// typedef struct TS_RECORD_HEADER
|
|
||||||
// {
|
|
||||||
// ex_u32 magic; // "TPPR" 标志 TelePort Protocol Record
|
|
||||||
// ex_u32 timestamp; // 本次录像的起始时间(UTC时间戳)
|
|
||||||
// ex_u32 packages; // 总包数
|
|
||||||
// ex_u32 time_ms; // 总耗时(毫秒)
|
|
||||||
// ex_u16 width; // 初始屏幕尺寸:宽
|
|
||||||
// ex_u16 height; // 初始屏幕尺寸:高
|
|
||||||
// ex_u8 security; // 0 = RDP, 1 = SSL
|
|
||||||
// ex_u16 file_count; // 数据文件总数
|
|
||||||
// ex_u32 file_size; // 所有数据文件的总大小(不包括每个数据文件的头,即4字节的每文件大小)
|
|
||||||
// char account[16]; // teleport账号
|
|
||||||
// char username[16]; // 远程主机用户名
|
|
||||||
// char ip[18];
|
|
||||||
// ex_u16 port;
|
|
||||||
//
|
|
||||||
// ex_u8 reserve[128 - 20 - 1 - 2 - 4 - 16 - 16 - 18 - 2]; // 保留
|
|
||||||
// }TS_RECORD_HEADER;
|
|
||||||
//
|
|
||||||
// // 一个数据包的头
|
|
||||||
// typedef struct TS_RECORD_PKG
|
|
||||||
// {
|
|
||||||
// ex_u8 type; // 包的数据类型(目前暂时保留未使用,必须为0)
|
|
||||||
// ex_u32 size; // 这个包的总大小
|
|
||||||
// ex_u32 time_ms; // 这个包距起始时间的时间差(毫秒,意味着一个连接不能持续超过49天)
|
|
||||||
// ex_u8 reserve[3]; // 保留
|
|
||||||
// }TS_RECORD_PKG;
|
|
||||||
//
|
|
||||||
// RDP鼠标移动
|
|
||||||
// typedef struct TS_RECORD_RDP_MOUSE_POS
|
|
||||||
// {
|
|
||||||
// ex_u16 x;
|
|
||||||
// ex_u16 y;
|
|
||||||
// }TS_RECORD_RDP_MOUSE_POS;
|
|
||||||
|
|
||||||
// #pragma pack(pop)
|
|
||||||
|
|
||||||
class TppRecBase
|
class TppRecBase
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "ssh_recorder.h"
|
#include "ssh_recorder.h"
|
||||||
|
|
||||||
static ex_u8 TPP_RECORD_MAGIC[4] = { 'T', 'P', 'R', 'R' };
|
static ex_u8 TPP_RECORD_MAGIC[4] = { 'T', 'P', 'P', 'R' };
|
||||||
|
|
||||||
TppSshRec::TppSshRec()
|
TppSshRec::TppSshRec()
|
||||||
{
|
{
|
||||||
|
@ -8,6 +8,8 @@ TppSshRec::TppSshRec()
|
||||||
|
|
||||||
memset(&m_head, 0, sizeof(TS_RECORD_HEADER));
|
memset(&m_head, 0, sizeof(TS_RECORD_HEADER));
|
||||||
memcpy((ex_u8*)(&m_head.magic), TPP_RECORD_MAGIC, sizeof(ex_u32));
|
memcpy((ex_u8*)(&m_head.magic), TPP_RECORD_MAGIC, sizeof(ex_u32));
|
||||||
|
m_head.ver = 0x02;
|
||||||
|
m_head.protocol = TS_PROXY_PROTOCOL_SSH;
|
||||||
}
|
}
|
||||||
|
|
||||||
TppSshRec::~TppSshRec()
|
TppSshRec::~TppSshRec()
|
||||||
|
|
|
@ -9,32 +9,32 @@
|
||||||
#pragma pack(push,1)
|
#pragma pack(push,1)
|
||||||
|
|
||||||
// 录像文件头
|
// 录像文件头
|
||||||
typedef struct TS_RECORD_HEADER
|
// typedef struct TS_RECORD_HEADER
|
||||||
{
|
// {
|
||||||
ex_u32 magic; // "TPPR" 标志 TelePort Protocol Record
|
// ex_u32 magic; // "TPPR" 标志 TelePort Protocol Record
|
||||||
ex_u64 timestamp; // 本次录像的起始时间(UTC时间戳)
|
// ex_u64 timestamp; // 本次录像的起始时间(UTC时间戳)
|
||||||
ex_u32 packages; // 总包数
|
// ex_u32 packages; // 总包数
|
||||||
ex_u32 time_ms; // 总耗时(毫秒)
|
// ex_u32 time_ms; // 总耗时(毫秒)
|
||||||
ex_u16 width; // 初始屏幕尺寸:宽
|
// ex_u16 width; // 初始屏幕尺寸:宽
|
||||||
ex_u16 height; // 初始屏幕尺寸:高
|
// ex_u16 height; // 初始屏幕尺寸:高
|
||||||
ex_u16 file_count; // 数据文件总数
|
// ex_u16 file_count; // 数据文件总数
|
||||||
ex_u32 file_size; // 所有数据文件的总大小(不包括每个数据文件的头,即4字节的每文件大小)
|
// ex_u32 file_size; // 所有数据文件的总大小(不包括每个数据文件的头,即4字节的每文件大小)
|
||||||
char account[16]; // teleport账号
|
// char account[16]; // teleport账号
|
||||||
char username[16]; // 远程主机用户名
|
// char username[16]; // 远程主机用户名
|
||||||
char ip[18];
|
// char ip[18];
|
||||||
ex_u16 port;
|
// ex_u16 port;
|
||||||
|
//
|
||||||
ex_u8 reserve[128 - 4 - 8 - 4 - 4 - 2 - 2 - 2 - 4 - 16 - 16 - 18 - 2]; // 保留
|
// ex_u8 reserve[128 - 4 - 8 - 4 - 4 - 2 - 2 - 2 - 4 - 16 - 16 - 18 - 2]; // 保留
|
||||||
}TS_RECORD_HEADER;
|
// }TS_RECORD_HEADER;
|
||||||
|
//
|
||||||
// 一个数据包的头
|
// // 一个数据包的头
|
||||||
typedef struct TS_RECORD_PKG
|
// typedef struct TS_RECORD_PKG
|
||||||
{
|
// {
|
||||||
ex_u8 type; // 包的数据类型
|
// ex_u8 type; // 包的数据类型
|
||||||
ex_u32 size; // 这个包的总大小(不含包头)
|
// ex_u32 size; // 这个包的总大小(不含包头)
|
||||||
ex_u32 time_ms; // 这个包距起始时间的时间差(毫秒,意味着一个连接不能持续超过49天)
|
// ex_u32 time_ms; // 这个包距起始时间的时间差(毫秒,意味着一个连接不能持续超过49天)
|
||||||
ex_u8 reserve[3]; // 保留
|
// ex_u8 reserve[3]; // 保留
|
||||||
}TS_RECORD_PKG;
|
// }TS_RECORD_PKG;
|
||||||
|
|
||||||
// 记录窗口大小改变的数据包
|
// 记录窗口大小改变的数据包
|
||||||
typedef struct TS_RECORD_WIN_SIZE
|
typedef struct TS_RECORD_WIN_SIZE
|
||||||
|
|
Loading…
Reference in New Issue