From 21027a79be9765acd13e0536c55cc667b34a7664 Mon Sep 17 00:00:00 2001 From: "QCQCQC@wsl" <1220204124@zust.edu.cn> Date: Sun, 7 Dec 2025 20:37:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dsocket=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E4=B8=8D=E4=B8=80=E8=87=B4=EF=BC=8C=E6=8F=90=E4=BE=9B?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 14 ++- src/client.h | 2 +- test_log.stderr.log | 6 + tests/README.md | 43 +++++++ tests/a.out | Bin 16368 -> 0 bytes tests/forkpty | Bin 17112 -> 0 bytes tests/makefault | Bin 16840 -> 0 bytes tests/socket-client/Makefile | 18 --- tests/socket-client/client-tests | Bin 22984 -> 0 bytes tests/socket-client/client-tests.c | 30 ----- tests/socket-client/client-tests.o | Bin 4816 -> 0 bytes tests/socket-client/client.c | 181 ----------------------------- tests/socket-client/client.h | 21 ---- tests/socket-client/client.o | Bin 16040 -> 0 bytes tests/socket-client/test.log | 1 - tests/test_client.c | 69 +++++++++++ 16 files changed, 132 insertions(+), 253 deletions(-) create mode 100644 test_log.stderr.log create mode 100644 tests/README.md delete mode 100755 tests/a.out delete mode 100755 tests/forkpty delete mode 100755 tests/makefault delete mode 100644 tests/socket-client/Makefile delete mode 100755 tests/socket-client/client-tests delete mode 100644 tests/socket-client/client-tests.c delete mode 100644 tests/socket-client/client-tests.o delete mode 100644 tests/socket-client/client.c delete mode 100644 tests/socket-client/client.h delete mode 100644 tests/socket-client/client.o delete mode 100644 tests/socket-client/test.log create mode 100644 tests/test_client.c diff --git a/Makefile b/Makefile index 3566a30..d1a6990 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,7 @@ HOOK_NAME = hook_write.so BUILD_DIR = build SRC_DIR = src +TESTS_DIR = tests SRC = $(wildcard $(SRC_DIR)/*.c) SRC := $(filter-out $(SRC_DIR)/hook_write.c, $(SRC)) # 排除 hook_write.c @@ -19,6 +20,11 @@ HOOK_SRC = $(SRC_DIR)/hook_write.c HOOK_OBJ = $(BUILD_DIR)/hook_write.o HOOK_TARGET = $(BUILD_DIR)/$(HOOK_NAME) +# 测试客户端 +TEST_CLIENT = $(BUILD_DIR)/test_client +TEST_CLIENT_SRC = $(TESTS_DIR)/test_client.c +TEST_CLIENT_DEPS = $(BUILD_DIR)/client.o $(BUILD_DIR)/debug.o + # 如果需要开启 debug,只需执行 make DEBUG=1 ifeq ($(DEBUG),1) CFLAGS += -DDEBUG -g @@ -34,10 +40,12 @@ ifeq ($(NO_CONFIG_CHECK),1) CFLAGS += -DNO_CONFIG_CHECK endif -.PHONY: all clean debug hook rebuild pre_build +.PHONY: all clean debug hook rebuild pre_build test_client all: pre_build $(TARGET) $(HOOK_TARGET) +test_client: pre_build $(TEST_CLIENT) + pre_build: ifeq ($(DEBUG),1) @echo "Building with debug flags..." @@ -65,6 +73,10 @@ $(HOOK_OBJ): $(HOOK_SRC) @mkdir -p $(BUILD_DIR) $(CC) $(CFLAGS) -Wno-error=unused-result -c $< -o $@ +$(TEST_CLIENT): $(TEST_CLIENT_SRC) $(TEST_CLIENT_DEPS) + @mkdir -p $(BUILD_DIR) + $(CC) -Wall -Wextra -o $@ $(TEST_CLIENT_SRC) $(TEST_CLIENT_DEPS) + clean: rm -rf $(BUILD_DIR) diff --git a/src/client.h b/src/client.h index 61c7e9a..be6cab8 100644 --- a/src/client.h +++ b/src/client.h @@ -12,7 +12,7 @@ #include // for PATH_MAX #include -#define SOCKET_PATH "/etc/exec_hook/exec.sock" +#define SOCKET_PATH "/var/run/bash-smart.sock" #define MAX_BUF_SIZE 4096 // 函数声明 diff --git a/test_log.stderr.log b/test_log.stderr.log new file mode 100644 index 0000000..8c1f6a2 --- /dev/null +++ b/test_log.stderr.log @@ -0,0 +1,6 @@ +pip is not installed. Please install pip to proceed. +Installing required Python packages... +Successfully installed click-8.1.3 +Finished installing Python packages. + +This is a test error log file for testing the client functionality. \ No newline at end of file diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000..d3604ac --- /dev/null +++ b/tests/README.md @@ -0,0 +1,43 @@ +# 客户端测试程序 + +## 编译 + +```bash +make test_client +``` + +## 运行测试 + +确保 Go 服务端正在运行,然后执行: + +```bash +./build/test_client /tmp/test_error.log +``` + +## 测试说明 + +测试程序会: +1. 连接到 Unix socket (`/etc/exec_hook/exec.sock`) +2. 发送模拟的执行参数(命令、参数、环境变量、日志路径) +3. 接收并显示服务端返回的所有消息 +4. 等待 socket 关闭后退出 + +## 创建测试日志文件 + +如果需要自定义测试日志内容: + +```bash +cat > /tmp/test_error.log << 'EOF' +This is a test error log file. + +Error: command not found +Usage: test_script.py [OPTIONS] + +Exit code: 127 +EOF +``` + +## 预期行为 + +- 成功情况: 显示服务端返回的所有消息,最后输出 "✓ 测试成功" +- 失败情况: 输出错误信息,返回非零退出码 diff --git a/tests/a.out b/tests/a.out deleted file mode 100755 index 487d2abbaa8fc6a25f26511c0743d6568fda8de3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16368 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 ba@Z&2c9oQ#HOkw6daKf){n*~(W5s^}olGDW diff --git a/tests/makefault b/tests/makefault deleted file mode 100755 index 72d0e26ee0414bf35809b1731e0b3822a14a05ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16840 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 VK25ha5w7^-wLrH2 diff --git a/tests/socket-client/client-tests.c b/tests/socket-client/client-tests.c deleted file mode 100644 index 808c800..0000000 --- a/tests/socket-client/client-tests.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "client.h" - -int main() { - // 测试参数 - const char *filename = "/usr/bin/ls"; - char *const argv[] = { - "ls", - "-l", - "/home", - NULL - }; - - char *const envp[] = { - "PATH=/usr/local/bin:/usr/bin:/bin", - "HOME=/home/user", - "LANG=en_US.UTF-8", - NULL - }; - - // 调用socket发送函数 - int result = send_exec_params(filename, argv, envp, "./test.log"); - - if(result == 0) { - printf("Parameters sent successfully\n"); - } else { - printf("Failed to send parameters\n"); - } - - return 0; -} \ No newline at end of file diff --git a/tests/socket-client/client-tests.o b/tests/socket-client/client-tests.o deleted file mode 100644 index 479ec47d6248f8293cdfc0f05817d37026148699..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4816 zcmb_fU2GIp6uz^&LtC~jEiL~Fi;kVcF#>+E#8yLLNMW@e!f zu@59jMI%joAW@?xB%+B16HN#&lBhv^Fd859!3SfalHiLmF$7HToIB_24wv;sy=CW~ z^PTUUd*$bqc_L08#`s%Y^7j0vysVY}=!3ya@ zYsCEL;p2XMMB8@}MQdz8O-qDb=%&R;lm1#vE>%N9FF64OmRe#8y!3H&)g((tfQ%G0 zaTFk#N326X1oB7li@k^sDOFXGm;kT|enN{&CW_cNRqgd9@LF+%^mdF8pF1}r)p_mf z&@%T{sJ2KoHa8%Ri<)rQ_}r^AVm=Om)TDus&@rIU9u&#sj%2(Qa?-_c2UvPUytQw& z_Hc4ra=0V5REWd^kzCz~Hhrz6%xl-yw00!pt5&RP*A_OkEfJ!D;=tQB8rsff5F&{Y z)-4^g;%d|)+H9KTd>pb$~nvwt)-*u6E?-EH(3n^Nh?pyJs51>3Q` zk_D>iS;hY8-Yw}ZJ*jjdl^!?!V~$nyT*s~W>56l-l)%lAv!`tw21axii!xI9E0W0_lVq9{aAY;>x9}wDfo3^64q46wK=6!(S z51Xv;q1LujvB8#kv9Ev;;`N?b)CuwXoqD!--J448{CafAQ66LW*y7;{RtLv@dT)!1 z$YmHY#|4}*O2fHY7|D}&_aea2rna>J)WbLa1Fn`!Sdr?Mn5qQ6$mQg=%2~yU+&J7V za_E(m03HvxhJW1&TbF|K67?uJ&(KZ<=b1R5;9MV1EBF@Dp(JJFe0G!mf`UIm`YY69 z4bF!j=l>?*94AluJJcf|b7%fV!kIrqy8K1}S>=C2cEp?E$8mU`Fc*1?5|1kealCm~ z5WbLl#L;&v>5CPdRI!`{+!vTDw+$pj`82TYs!OjCohBfWDLldIRKW z)ysdHE?V}-{PC64{14ZO36OY?#(x%-NK?lzgRS297ij!x z^2PBHQpd;h2V-)cAj;N>L80wY24t1{)4-|c{}f%O=Vg@IgZ;S2^{MB7hy3}x -#include -#include -#include -#include -#include -#include - -#define BUFFER_SIZE 4096 - -// 读取完整消息 -ssize_t readMessage(int sock, char *buffer, size_t maxSize) { - uint32_t messageLen; - // 先读取消息长度 - if (read(sock, &messageLen, sizeof(messageLen)) != sizeof(messageLen)) { - return -1; - } - - // 检查buffer大小是否足够 - if (messageLen >= maxSize) { - return -1; - } - - // 读取完整消息 - size_t totalRead = 0; - while (totalRead < messageLen) { - ssize_t n = read(sock, buffer + totalRead, messageLen - totalRead); - if (n <= 0) return -1; - totalRead += n; - } - buffer[messageLen] = '\0'; - return messageLen; -} - -int send_exec_params(const char *filename, char *const argv[], - char *const envp[], const char *logPath) { - char abs_path[PATH_MAX]; - char pwd[PATH_MAX]; - - // 获取当前工作目录 - if (getcwd(pwd, sizeof(pwd)) == NULL) { - perror("getcwd"); - return -1; - } - - if (logPath[0] != '/') { // 相对路径 - size_t pwd_len = strlen(pwd); - size_t log_len = strlen(logPath); - if (pwd_len + log_len + 2 > PATH_MAX) { - errno = ENAMETOOLONG; - perror("path too long"); - return -1; - } - - strncpy(abs_path, pwd, PATH_MAX - 1); - abs_path[PATH_MAX - 1] = '\0'; - strncat(abs_path, "/", PATH_MAX - strlen(abs_path) - 1); - strncat(abs_path, logPath, PATH_MAX - strlen(abs_path) - 1); - - char real_path[PATH_MAX]; - if (realpath(abs_path, real_path) == NULL) { - perror("realpath"); - return -1; - } - strncpy(abs_path, real_path, PATH_MAX - 1); - abs_path[PATH_MAX - 1] = '\0'; - } else { - strncpy(abs_path, logPath, PATH_MAX - 1); - abs_path[PATH_MAX - 1] = '\0'; - } - - size_t path_len = strlen(abs_path); - - int sock = socket(AF_UNIX, SOCK_STREAM, 0); - if (sock == -1) { - perror("socket"); - return -1; - } - - // 设置TCP_NODELAY - // int flag = 1; - // setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int)); - - struct sockaddr_un addr; - memset(&addr, 0, sizeof(addr)); - addr.sun_family = AF_UNIX; - strncpy(addr.sun_path, SOCKET_PATH, sizeof(addr.sun_path) - 1); - addr.sun_path[sizeof(addr.sun_path) - 1] = '\0'; - - if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == -1) { - perror("connect"); - close(sock); - return -1; - } - - // 发送文件名 - size_t filename_len = strlen(filename); - write(sock, &filename_len, sizeof(size_t)); - write(sock, filename, filename_len); - - // 发送当前工作目录 - size_t pwd_len = strlen(pwd); - write(sock, &pwd_len, sizeof(size_t)); - write(sock, pwd, pwd_len); - - // 发送argv - int argc = 0; - while (argv[argc] != NULL) argc++; - write(sock, &argc, sizeof(int)); - - for (int i = 0; i < argc; i++) { - size_t arg_len = strlen(argv[i]); - write(sock, &arg_len, sizeof(size_t)); - write(sock, argv[i], arg_len); - } - - // 发送envp - int envc = 0; - while (envp[envc] != NULL) envc++; - write(sock, &envc, sizeof(int)); - - for (int i = 0; i < envc; i++) { - size_t env_len = strlen(envp[i]); - write(sock, &env_len, sizeof(size_t)); - write(sock, envp[i], env_len); - } - - // 发送logPath - write(sock, &path_len, sizeof(size_t)); - write(sock, abs_path, path_len); - - // 接收服务器响应 - char buffer[BUFFER_SIZE]; - char display_buffer[BUFFER_SIZE]; - ssize_t bytes_read; - int started = 0; - - // 等待接收[sthttp]标记 - while (!started) { - bytes_read = readMessage(sock, buffer, BUFFER_SIZE); - if (bytes_read <= 0) { - perror("Failed to read start marker"); - close(sock); - return -1; - } - - if (strstr(buffer, "[sthttp]")) { - started = 1; - } - } - - // 持续读取消息直到收到[end] - while (1) { - bytes_read = readMessage(sock, buffer, BUFFER_SIZE); - if (bytes_read <= 0) { - break; - } - - if (strstr(buffer, "[end]")) { - break; - } - - // 处理[res]...[wait]消息 - char *res_start = strstr(buffer, "[res]"); - char *wait_end = strstr(buffer, "[wait]"); - - if (res_start && wait_end) { - size_t content_len = wait_end - (res_start + strlen("[res]")); - if (content_len < BUFFER_SIZE) { - strncpy(display_buffer, res_start + strlen("[res]"), content_len); - display_buffer[content_len] = '\0'; - printf("%s\n", display_buffer); - fflush(stdout); - } - } - } - - close(sock); - return 0; -} diff --git a/tests/socket-client/client.h b/tests/socket-client/client.h deleted file mode 100644 index 61c7e9a..0000000 --- a/tests/socket-client/client.h +++ /dev/null @@ -1,21 +0,0 @@ -// exec_socket.h - -#ifndef EXEC_SOCKET_H -#define EXEC_SOCKET_H - -#include -#include -#include -#include -#include -#include -#include // for PATH_MAX -#include - -#define SOCKET_PATH "/etc/exec_hook/exec.sock" -#define MAX_BUF_SIZE 4096 - -// 函数声明 -int send_exec_params(const char *filename, char *const argv[], char *const envp[], const char *logPath); - -#endif // EXEC_SOCKET_H diff --git a/tests/socket-client/client.o b/tests/socket-client/client.o deleted file mode 100644 index da99897d55f416b033ee504cbc8c378a4fee23d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16040 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 Ym40G*_JG55p!_{-|EG2`#P$6D3+Ug#fdBvi diff --git a/tests/socket-client/test.log b/tests/socket-client/test.log deleted file mode 100644 index 803d89e..0000000 --- a/tests/socket-client/test.log +++ /dev/null @@ -1 +0,0 @@ -我是一段标准错误输出 \ No newline at end of file diff --git a/tests/test_client.c b/tests/test_client.c new file mode 100644 index 0000000..a0cc64e --- /dev/null +++ b/tests/test_client.c @@ -0,0 +1,69 @@ +#include "../src/client.h" +#include +#include +#include + +/** + * 测试客户端 - 用于测试 send_exec_params 函数 + * + * 用法: + * ./test_client + * + * 示例: + * ./test_client /tmp/test_error.log + */ + +int main(int argc, char *argv[]) { + if (argc < 2) { + fprintf(stderr, "用法: %s \n", argv[0]); + fprintf(stderr, "示例: %s /tmp/test_error.log\n", argv[0]); + return 1; + } + + const char *log_path = argv[1]; + + // 模拟要执行的命令 + const char *filename = "/usr/bin/python3"; + + // 模拟命令行参数 + char *test_argv[] = { + "python3", + "test_script.py", + "--arg1", + "value1", + NULL + }; + + // 模拟环境变量 + char *test_envp[] = { + "PATH=/usr/bin:/bin", + "HOME=/home/test", + "USER=test", + "SHELL=/bin/bash", + NULL + }; + + printf("===== 客户端测试开始 =====\n"); + printf("socket地址:%s\n", SOCKET_PATH); + printf("文件名: %s\n", filename); + printf("日志路径: %s\n", log_path); + printf("参数:\n"); + for (int i = 0; test_argv[i] != NULL; i++) { + printf(" argv[%d]: %s\n", i, test_argv[i]); + } + printf("\n正在发送请求到服务端...\n\n"); + printf("--- 服务端响应 ---\n"); + + // 调用客户端函数 + int result = send_exec_params(filename, test_argv, test_envp, log_path); + + printf("\n--- 响应结束 ---\n"); + + if (result == 0) { + printf("\n✓ 测试成功\n"); + return 0; + } else { + fprintf(stderr, "\n✗ 测试失败: send_exec_params 返回 %d\n", result); + return 1; + } +}