c++ - 如何以编程方式模拟与控制台的交互?

标签 c++ winapi visual-c++

我想知道如何在 Windows 的命令提示符 (CMD) 中以编程方式执行命令(如“dir C:\”或“shutdown -r”等)并检索结果输出,而不显示黑色的 CMD 窗口当然。

我怀疑->this link<-包含所需 API 的列表,但我不确定要选择哪些 API,因此需要您的帮助。

基本上这就是我需要它的目的:我想编写简单的客户端-服务器应用程序 (WinSock),用户可以在其中坐在客户端并在服务器的命令提示符中执行命令(并从中读取回复)。是的 - 就像 Telnet 一样工作,但没有 Telnet,只有 Win32 API。

假设用户想在服务器上执行“dir”命令。他在客户端应用程序上键入“dir”,客户端应用程序将请求发送到服务器应用程序,命令将在服务器应用程序中执行(就好像它是在服务器的命令提示符下物理键入的一样),输出文本将被发送回客户端应用程序。

最佳答案

您基本上是在尝试重新实现 netcat 的许多可能用途之一。 .通过在命令提示符下在windows系统上运行:

nc -l -L -e cmd -p 5555

然后从另一个系统运行

nc 192.168.1.xxx 5555

192.168.1.xxx 是 windows 机器的 IP 地址,你可以做你正在谈论的事情:无论你输入什么,都会在 windows 机器上“输入”,你会得到远程执行命令的输出。您还可以在隐藏窗口中运行 netcat。

请注意,由于此功能,某些防病毒软件会阻止 netcat 程序...它显然已被恶意软件用来将受害者的 PC 转换为奴隶机器人。

另请注意,将输入/输出直接路由到 cmd(XP shell)非常危险,因为没有任何类型的身份验证:任何人 都可以连接到端口 5555并在机器上执行命令,除非您处于非常受控的环境中,否则您真的不想允许这样做。

关于c++ - 如何以编程方式模拟与控制台的交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9893493/

相关文章:

C++ 17 std::filesystem 无法在其他(Windows 10)计算机上运行

c++ - 析构函数和构造函数

c++ - 从另一个命名空间访问标准命名空间数据成员

c++ - 有什么方法可以知道目录是否包含子目录?

windows - native x64 dll 不工作

c++ - 将自定义对象添加到 vector 时如何启用 move 语义?

c - 为什么当前目录改变

winapi - RmGetList 始终返回 0x5 ERROR_ACCESS_DNIED

c# - 如何使用 C# 获取第 3 方应用程序按钮的句柄?

c++ - 获取 LNK2005,我看不出我能做些什么来解决这个问题