// vctelnetserver.cpp : Defines the entry point for the console application.
//这是从网上找的代码,相当于从解读代码的角度来分析这个“利用匿名管道实现的远程CMD”来学习我们这周的内容咯
//也算是半个晚上的成果,牛掰大神们不要笑话某渣
//by 司空徵

#include "stdio.h"
#include <Winsock2.h>
#include <Windows.h>
#include <Winbase.h>
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "kernel32.lib")
 
void main()
{
 WSADATA zi;//该结构被用来储存调用AfxSocketInit全局函数返回的Windows Sockets初始化信息。
 SOCKET telnetan;//TCP协议什么的telnet命令有关?!╮(╯_╰)╭
 int pcport = 3300;
 int ret;
 if ((ret = WSAStartup(MAKEWORD(2,2),&zi)) != 0)//初始化差错报错系列
 
//windows初始化socket网络库申请2.2版本,从而使得高版本的Winsock可以使用
//winsock基础 如下
//http://wenku.baidu.com/link?url=Rvhc48n-iTPvXyndf2V-AyHd6pK39_H4ZQf8qlOd1Fkrb4NOmKC0Irf7uM6lXMDLM6iHsiP68-AVJiIrWHYNL4i5O3zDNNqdqKNfpo8hpbi


 {
  printf("WSAStartup failed with error %d\n", ret);
  return;
 }
 if ((telnetan = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)//如果socket被设置成无效套接字
 { 
  printf("socket failed with error %d\n", WSAGetLastError());//从而使得高版本的Winsock可以使用
  WSACleanup();
  return;
 }
 
 SOCKADDR_IN telnet_server;
 //sockaddr_in和sockaddr是并列的结构,指向sockaddr_in的结构体的指针也可以指向
//sockaddr的结构体,并代替它。也就是说,你可以使用sockaddr_in建立你所需要的信息,
 
 
 telnet_server.sin_family = AF_INET;//Address family 一般来说 AF_INET(地址族)PF_INET(协议族 )
 telnet_server.sin_port = htons(pcport);//Port number (必须要采用网络数据格式,普通数字可以用htons()函数转换成网络数据格式的数字) 
 telnet_server.sin_addr.s_addr = htonl(INADDR_ANY);// Internet address
    if (bind(telnetan, (SOCKADDR *)&telnet_server, sizeof(telnet_server))== SOCKET_ERROR)
            //bind()——将本端sockaddr_in(赋值后)强制转换成sockaddr 类型,绑定到socket 句柄上
 {
  printf("bind failed with error %d\n", WSAGetLastError());
  closesocket(telnetan);
  WSACleanup();
  return;
 }
 if (listen(telnetan, 5) == SOCKET_ERROR)//末尾处有socket error一览表。。。原谅我的储物癖~\(≧▽≦)/~
 {
  printf("listen failed with error %d\n", WSAGetLastError());
  closesocket(telnetan);
  WSACleanup();
  return;
 }
 int telnetsize=sizeof(telnet_server);
 SOCKET clientaccept; 
 while (true)
 {
         if((clientaccept = accept(telnetan, (SOCKADDR *) &telnet_server,&telnetsize)) != INVALID_SOCKET)
  {
     //建立匿名管道
     SECURITY_ATTRIBUTES pipeline1,pipeline2;
     HANDLE hReadPipe,hWritePipe,hWriteFile,hReadFile;
 
     pipeline1.nLength = sizeof(SECURITY_ATTRIBUTES);
     pipeline1.lpSecurityDescriptor = NULL;
     pipeline1.bInheritHandle = true;
 
     if((ret = CreatePipe(&hReadPipe,&hWriteFile,&pipeline1,0)) = 0)        
     {
      printf("建立cmd管道失败! ::d%",GetLastError());
      WSACleanup();
     }
 
     pipeline2.nLength = sizeof(SECURITY_ATTRIBUTES);
     pipeline2.lpSecurityDescriptor = NULL;
     pipeline2.bInheritHandle = true;
 
     if((ret = CreatePipe(&hReadFile,&hWritePipe,&pipeline2,0)) = 0)         
     {
      printf("建立cmd管道失败! ::d%",GetLastError());
      WSACleanup();    
     }
     //进程结构体 CMD来啦~(~o ̄▽ ̄)~o ~。。。 
     STARTUPINFO cmdpos;
     ZeroMemory(&cmdpos,sizeof(cmdpos));//将结构体里的所有成员初始值置为0
 
     GetStartupInfo(&cmdpos);
     cmdpos.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
     cmdpos.wShowWindow = SW_HIDE;
     cmdpos.hStdInput = hReadPipe;
     cmdpos.hStdOutput = hWritePipe;
     cmdpos.hStdError = hWritePipe;
 
     PROCESS_INFORMATION processinformation;
 
     //正式建立进程
     char szAPP[256];
     char recv_buff[1024];
     char send_buff[1024];
     DWORD nByteToWrite, nByteWritten,len;//至此 分享一个06的人写的“编程实现远程Shell的获取”
                                                                                        //http://hi.baidu.com/olhack/item/76aa411487891e0b8fbde40e                                         
     GetSystemDirectory(szAPP,MAX_PATH+1);
     strcat(szAPP,"\\cmd.exe");
     ret=CreateProcess(NULL,szAPP,NULL,NULL,1,0,NULL,NULL,&cmdpos,&processinformation);
         //WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件
 
       while(true)
       {
          ReadFile(hReadFile,send_buff,1024,&len,NULL);
          send(clientaccept,send_buff,len,0);
          printf("%s",send_buff);
          Sleep(1);
          nByteToWrite = recv(clientaccept,recv_buff,1024,0);
          WriteFile(hWriteFile,recv_buff,nByteToWrite,&nByteWritten,NULL);
                                     Sleep(1);
     }
  }
 }
}
 
 
 
 /*************************************socket错误一览***********************************************
  
 
Socket error 0 - Directly send error 
Socket error 10004 - Interrupted function call 
 Socket error 10013 - Permission denied(权限被拒绝)
Socket error 10014 - Bad address 
 Socket error 10022 - Invalid argument 
Socket error 10024 - Too many open files 
Socket error 10035 - Resource temporarily unavailable 
Socket error 10036 - Operation now in progress 
Socket error 10037 - Operation already in progress 
Socket error 10038 - Socket operation on non-socket 
Socket error 10039 - Destination address required 
Socket error 10040 - Message too long 
Socket error 10041 - Protocol wrong type for socket 
Socket error 10042 - Bad protocol option 
Socket error 10043 - Protocol not supported 
Socket error 10044 - Socket type not supported 
Socket error 10045 - Operation not supported 
Socket error 10046 - Protocol family not supported 
Socket error 10047 - Address family not supported by protocol family 
Socket error 10048 - Address already in use 
Socket error 10049 - Cannot assign requested address 
Socket error 10050 - Network is down 
Socket error 10051 - Network is unreachable 
Socket error 10052 - Network dropped connection on reset 
Socket error 10053 - Software caused connection abort 
Socket error 10054 - Connection reset by peer 
Socket error 10055 - No buffer space available 
Socket error 10056 - Socket is already connected 
Socket error 10057 - Socket is not connected 
Socket error 10058 - Cannot send after socket shutdown  
Socket error 10060 - Connection timed out  
Socket error 10061 - Connection refused  
Socket error 10064 - Host is down  
Socket error 10065 - No route to host 
Socket error 10067 - Too many processes 
Socket error 10091 - Network subsystem is unavailable 
Socket error 10092 - WINSOCK.DLL version out of range 
Socket error 10093 - Successful WSAStartup not yet performed 
Socket error 10094 - Graceful shutdown in progress 
Socket error 11001 - Host not found 
Socket error 11002 - Non-authoritative host not found 
Socket error 11003 - This is a non-recoverable error  
Socket error 11004 - Valid name, no data record of requested type  
WSAEADDRINUSE (10048) Address already in use 
WSAECONNABORTED (10053) Software caused connection abort  
WSAECONNREFUSED (10061) Connection refused 
WSAECONNRESET (10054) Connection reset by peer  
WSAEDESTADDRREQ (10039) Destination address required  
WSAEHOSTUNREACH (10065) No route to host  
WSAEMFILE (10024) Too many open files 
WSAENETDOWN (10050) Network is down  
WSAENETRESET (10052) Network dropped connection  
WSAENOBUFS (10055) No buffer space available 
WSAENETUNREACH (10051) Network is unreachable  
WSAETIMEDOUT (10060) Connection timed out 
WSAHOST_NOT_FOUND (11001) Host not found 
WSASYSNOTREADY (10091) Network sub-system is unavailable 
WSANOTINITIALISED (10093) WSAStartup() not performed 
WSANO_DATA (11004) Valid name, no data of that type 
WSANO_RECOVERY (11003) Non-recoverable query error 
WSATRY_AGAIN (11002) Non-authoritative host found 
WSAVERNOTSUPPORTED (10092) Wrong WinSock DLL version 
 
************************************socket错误一览***********************************************/

利用匿名管道实现远程CMD---我的解读相关推荐

  1. 利用匿名管道向Android手机发送adb命令

    第一次使用匿名管道,还很不熟练,哪里不完善的地方请评论指正,不胜感激.工作中需要写一个dll,实现对android手机的操作,并将此函数作为接口导出.手机连接电脑的时候,用adb命令可以直接在控制台对 ...

  2. 进程间通信 - 匿名管道实现

    引子 前面的两篇博文分别介绍了通过剪贴板和通过邮槽来实现进程之间的通信, 其中剪贴板呢,是用来实现本地两个进程之间的通信, 而邮槽则既可以实现本地两个进程之间的通信,也可以实现本地进程和服务器进程的通 ...

  3. MFC匿名管道原理详解、函数总结、调用实例(用MFC的匿名管道读取CMD输出内容)(C++语言)

    本博客主要总结MFC中匿名管道的原理和具体调用实例,以及调用匿名管道三个核心函数各个参数用法详解,具体的如下所述. 博主在做项目时,遇到一个问题.用程序调用一个进程,然后读取进程输出信息.但是,博主用 ...

  4. [系统安全] 十.Windows漏洞利用之SMBv3服务远程代码执行漏洞(CVE-2020-0796)及防御详解

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  5. php+管道+pipe管道,C++ 匿名管道执行DOS命令

    最近在开发一个项目.需要PHP Sock连接到服务器中执行DOS 命令 , 所以想到了命名管道 CreatePipe 其函数原型BOOL CreatePipe( PHANDLE hReadPipe, ...

  6. windows获取系统补丁+匿名管道

    void CSstemPatchDlg::OnBnClickedOk() { // TODO:  在此添加控件通知处理程序代码 // TODO: Add extra validation here   ...

  7. Linux系统编程:pipe匿名管道的使用,实现linux命令下管道命令

    pipe函数介绍 函数原型int pipe(int pipefd[2]) 来创建匿名管道; 传出2个fd 文件描述符,pipefd[0]表示匿名管道的读端,pipefd[1]表示匿名管道的写端.有这个 ...

  8. 【编撰】linux IPC 002 - 匿名管道PIPE和有名管道FIFO的概念和实例,以及应用比较

    前言:上一节提到IPC的概述,本一节,原文作者比较详细的讨论了,管道的概念和实例和使用场景: 原文作者:郑彦兴 (mlinux@163.com)国防科大计算机学院 http://www.ibm.com ...

  9. 进程间通信(匿名管道、命名管道、共享内存)

    进程间通信 进程间通信的作用 管道 匿名管道 命令感受匿名管道 从内核角度去解释匿名管道 代码创建匿名管道 从PCB角度去分析匿名管道 匿名管道的非阻塞读写特性 创建管道,获取管道读写两端文件描述符的 ...

最新文章

  1. linux ssh 登录后 空闲断开 解决方法
  2. 快速排序 ——双游标、单游标实现
  3. 文本文件如何在其他地方打开
  4. Java Review - 并发编程_Unsafe
  5. 2能不用cuda_洗洁精不用花钱买,自己在家就能做,成本2毛钱,比买的更好用
  6. SqlHelper模板
  7. ES6笔记 -- 变量/语句声明
  8. 10个奇葩的代码注释,笑出声!
  9. HTTP错误500.30——ANCM进程内启动失败——.NET Core
  10. VScode 环境 配置
  11. #pragma的用法
  12. Java系统属性/环境变量
  13. 为什么家里pm25比外面高_夫妻感情很好,男人为什么还会找情人?这是我听过最好的答案...
  14. 怎么删除映射网络里的计算机,win10系统删除右键中“映射网络驱动器和断开网络驱动器”选项的详细办法...
  15. imx 290 支持25fps
  16. 网站制作的流程是什么?网站制作的流程包括哪些步骤?
  17. 网络安全基础(十二)
  18. 工商管理专业知识与实务(中级)【6】
  19. 全志a10 Android,全志A10 android平台CVBS效果调试
  20. 揭开卓越供应链的秘密,走近人机协同的智能决策

热门文章

  1. MATLAB 线性回归多项式拟合+预测区间、置信区间的绘制
  2. Oracle表分区.
  3. OLAP和OLTP的介绍
  4. Druid配置好之后sql监控界面不显示sql语句的可能原因
  5. Debian8.8开发环境(四)个人设置之bashrc
  6. 赠书活动 | 万亿级市场:大家都能看到的机会谈不上机会
  7. JavaScript实现输入数值判断是否为质数、合数的代码
  8. 二维数组名、二维数组名取地址、二级指针
  9. C语言:利用函数输出PI值
  10. linux下chmod命令