OCK_STREAM,IPPROTO_IP); if(sock[1]==INVALID_SOCKET) { printf("\nsocket() failed:%d",GetLastError()); __leave; } //connect to target port if(connect(sock[1],(struct sockaddr *)&Target,sizeof(Target))==SOCKET_ERROR) { printf("\nconnect() failed:%d",GetLastError()); __leave; } printf("\nconnect to target 3389 success!"); //创建两个线程进行数据转发 hThreadC2T=CreateThread(NULL,0,TCPDataC2T,(LPVOID)sock,0,&dwThreadID); hThreadT2C=CreateThread(NULL,0,TCPDataT2C,(LPVOID)sock,0,&dwThreadID); //等待两个线程结束 WaitForSingleObject(hThreadC2T,INFINITE); WaitForSingleObject(hThreadT2C,INFINITE); CloseHandle(hThreadC2T); CloseHandle(hThreadT2C); closesocket(sock[1]); closesocket(sock[0]); printf("\n\n*****************Connection Close*******************\n\n"); }//end of sock外循环 }//end of try __finally { if(sListen!=INVALID_SOCKET) closesocket(sListen); if(sock[0]!=INVALID_SOCKET) closesocket(sock[0]); if(sock[1]!=INVALID_SOCKET) closesocket(sock[1]); if(hThreadC2T!=NULL) CloseHandle(hThreadC2T); if(hThreadT2C!=NULL) CloseHandle(hThreadT2C); WSACleanup(); } return 0; } /************************************************************** Module:TCPDataRedird.c Date:2001/4/16 CopyRight(c) eyas HomePage:www.patching.net Thanks to shotgun 说明:TCP socket数据转发,sock[0]==>sClient sock[1]==>sTarget ******************************************************************/ #define BuffSize 20*1024 //缓冲区大小20k //此函数负责从Client读取数据,然后转发给Target DWORD WINAPI TCPDataC2T(SOCKET* sock) { int iRet, ret=-1,//select 返回值 iLeft, idx, iSTTBCS=0;//STTBCS=SendToTargetBuffCurrentSize char szSendToTargetBuff[上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页 |