c++实现文件传输之一:框架结构和界面实现 在木马中文件管理的重要性,是无需质疑的,对于文件的管理,做到并不难,但做好却也不易在我们编写一个功能完整的“文件木马” 其实现效果如图所示。为了文章的完整性,我们将分为数篇来介绍,本文主要介绍程序的整体框架和界面实现,在以后的文章中将以此框架为基础实现详细的功能。 实现:枚举磁盘,枚举目录,获取文件信息 上传文件,下载文件,执行文件,创建目录,删除目录等 传输控制结构 要实现客户端与服务端的通信,设计一个合理的传输控制结构,会使后面的工作轻松很多,为了使代码易读 首先对要使用的命令进行预定义其各个命令定义如下 #define GetDriver 0x01 //磁盘信息 #define GetDirInfo 0x02 //目录信息 #define ExecFile 0x03 //执行文件 #define GetFile 0x04 //下载文件 #define PutFile 0x05 //上传文件 #define DelFile 0x06 //删除文件 #define DelDir 0x07 //删除目录 #define CreateDir 0x08 //创建目录 #define FileInfo 0x09 //文件信息 #define GetScreen 0x10 //查看屏幕 在程序的网络通信中主要有 操作命令 ,命令对像,和具体数据三部分,对于命令的传输定义如下结构 typedef struct { int ID; //操作命令 BYTE lparam[BUF_LEN*2]; //命令对像 }COMMAND; 因为在程序中打交道最多的就是文件,对文件的详细属性定义如下结构 typedef struct { char FileName[MAX_PATH]; //文件名称 int FileLen; //文件长度 char Time[50]; //时间信息 BOOL IsDir; //为目录否 BOOL Error; //错误信息 HICON hIcon; //图标句柄 }FILEINFO; 服务端结构 服务端还是比较简单的其整体思路如下 1.服务端循环接受连接,并把连接交给线程处理 2.线程接受"命令数据",并跟据命令 ID 将命令对像和 SOCKET 句柄传给处理函数 3.函数执行指定功能,并返回执行结果 对整体结构的描述,我们用伪代码表述如下 main() { /*初示化设置......*/ while(true) { if(client=accept(server,(sockaddr *)&clientaddr,&len))//循环接受连接 { CreateThread(NULL,NULL,SLisen,(LPVOID)client,NULL,NULL);//传递线程处理 } } /*清理释放资源......*/ WSACleanup(); } 服务端程序运行后循环接受连接,如果有新的连接就传递给新的线程处理,线程代码如下 DWORD WINAPI SLisen(LPVOID lparam) { SOCKET client=(SOCK...