主機 A 需在備機 B 上創建目錄、拷貝文件。程序運行在 A,操作作用於 B。
構造命令流:(sleep; echo user; sleep; echo pass; sleep; echo "cmd"; sleep) | telnet IP
sleep 留出登錄提示時間。echo 發送用戶名/密碼/命令。cd/mkdir/cp 等。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void remote_op_system(void) {
char cmd[1024];
snprintf(cmd, sizeof(cmd),
"(sleep 0.5; echo user; sleep 1; echo pass; sleep 5; "
"echo \"cd /home/user/test; mkdir -p backup; cp test.txt backup/\"; sleep 2) "
"| telnet 10.10.10.10");
system(cmd);
}
void remote_op_popen(void) {
char cmd[1024], buf[1024];
snprintf(cmd, sizeof(cmd),
"(sleep 0.5; echo user; sleep 1; echo pass; sleep 5; "
"echo \"cd /home/user/test; mkdir -p backup; cp test.txt backup/\"; sleep 2) "
"| telnet 10.10.10.10");
FILE *fp = popen(cmd, "r");
if (!fp) return;
while (fgets(buf, sizeof(buf), fp)) {
buf[strcspn(buf, "\n")] = 0;
printf("远程输出: %s\n", buf);
}
pclose(fp);
}
scp/rsync/ssh 命令。telnet 傳輸明文,易被竊聽,現代系統多已禁用。system/popen 注入風險:命令拼接若含用戶輸入,需嚴格轉義或用 execve 族函數。expect 工具或 libssh2 庫更健壯。
// 推薦:libssh2 或調用 ssh/scp 命令(免密鑰登錄)
// system("scp test.txt user@10.10.10.10:/home/user/test/backup/");
// system("ssh user@10.10.10.10 'mkdir -p /home/user/test/backup'");