int iRet, ret=-1,//select 返回值 iLeft, idx, iSTCBCS=0;//STCBCS=SendToClientBuffCurrentSize char szRecvFromTargetBuff[BuffSize]=, szSendToClientBuff[BuffSize]=; fd_set fdread,fdwrite;
while(1) { FD_ZERO(&fdread); FD_ZERO(&fdwrite); FD_SET(sock[0],&fdwrite); FD_SET(sock[1],&fdread); if((ret=select(0,&fdread,&fdwrite,NULL,NULL))==SOCKET_ERROR) { printf("\nselect() failed:%d",GetLastError()); break; } if(ret>0) { //sTarget可读,从target接收数据 if(FD_ISSET(sock[1],&fdread)) { //接收target返回数据 iRet=recv(sock[1],szRecvFromTargetBuff,BuffSize,0); if(iRet==SOCKET_ERROR) { printf("\nrecv() from target failed:%d",GetLastError()); break; } else if(iRet==0) break; printf("\nrecv %d bytes from target",iRet); //把从target接收到的数据添加到发送到client的缓冲区 memcpy(szSendToClientBuff+iSTCBCS,szRecvFromTargetBuff,iRet); //清空接收target返回数据缓冲区 memset(szRecvFromTargetBuff,0,BuffSize); //刷新发送到client的数据缓冲区当前大小 iSTCBCS+=iRet; } //client可写,发送target返回数据到client if(FD_ISSET(sock[0],&fdwrite)) { //发送target返回数据到client iLeft=iSTCBCS; idx=0; while(iLeft>0) { iRet=send(sock[0],&szSendToClientBuff[idx],iLeft,0); if(iRet==SOCKET_ERROR) { printf("\nsend() to Client failed:%d",GetLastError()); break; } printf("\nsend %d bytes to Client",iRet); iLeft-=iRet; idx+=iRet; } //清空缓冲区 memset(szSendToClientBuff,0,BuffSize); iSTCBCS=0; } }//end of select ret Sleep(1); }//end of while return 0; }
利用TCP socket转发和反弹TCP端口进入有防火墙保护的内网 事实上很多内网没有第一部分所说的那么简单啦,我们来看一个有防火墙保护的内网,前提是这个防火墙对反弹TCP端口不做限制,限制了的话,又另当别论了。假 上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页 |