最简单的端口转发,反向通道

╄→尐↘猪︶ㄣ 提交于 2020-01-21 01:18:36

#pragma comment( lib, "ws2_32.lib" )
#include <windows.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include <stdio.h>
#include <winuser.h>

DWORD WINAPI  hrcv(LPVOID);
DWORD WINAPI  hsnd(LPVOID);

SOCKET sock,new_fd;
SOCKET sock2,new_fd2;
int APIENTRY _tWinMain(HINSTANCE hInstance,
                       HINSTANCE hPrevInstance,
                       LPTSTR    lpCmdLine,
                       int       nCmdShow)
{
    struct sockaddr_in server,server2;
    DWORD  threadid;
    WSADATA ws;
    struct hostent * iipp;
    WSAStartup( MAKEWORD(2, 2),&ws);
    if ((iipp=gethostbyname("xxxxxx.9966.org"))==0)return 0;//////////////////

    sock = socket(AF_INET, SOCK_STREAM,0);
    server.sin_family = AF_INET;
    server.sin_port = htons(3389);
    server.sin_addr.s_addr = inet_addr ("127.0.0.1"); 
    if ((connect(sock, (struct sockaddr *)&server, sizeof(server)))==SOCKET_ERROR) 
    {    int fff=WSAGetLastError();
    char buffer[50];
    _gcvt(fff, 20, buffer );
//    MessageBox(0,buffer,"aa",0);  
    } 

    
    sock2 = socket(AF_INET, SOCK_STREAM,0);
    server2.sin_family = AF_INET;
    server2.sin_port = htons(9900);
    server2.sin_addr= *((struct in_addr *)iipp->h_addr); 
    if ((connect(sock2, (struct sockaddr *)&server2, sizeof(server2)))==SOCKET_ERROR) 
    {    int fff=WSAGetLastError();
    char buffer[50];
    _gcvt(fff, 20, buffer );
//    MessageBox(0,buffer,"bind错误码",0);  
    }   
    

    
    CreateThread(0,0,hrcv,0,0,&threadid);
    CreateThread(0,0,hsnd,0,0,&threadid);

 

 

//////////////////////////////////////////////////////////////////////////////////////以下是服务端

 

#pragma comment( lib, "ws2_32.lib" )
#include <windows.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include <stdio.h>
#include <winuser.h>

DWORD WINAPI  hrcv(LPVOID);
DWORD WINAPI  hsnd(LPVOID);

SOCKET sock,new_fd;
SOCKET sock2,new_fd2;
int APIENTRY _tWinMain(HINSTANCE hInstance,
                       HINSTANCE hPrevInstance,
                       LPTSTR    lpCmdLine,
                       int       nCmdShow)
{
    struct sockaddr_in server,server2;
    DWORD  threadid;
    WSADATA ws;
    
    WSAStartup( MAKEWORD(2, 2),&ws);
    
    sock = socket(AF_INET, SOCK_STREAM,0);
    server.sin_family = AF_INET;
    server.sin_port = htons(33896);
    server.sin_addr.s_addr = inet_addr ("0.0.0.0"); 
    if ((bind(sock, (struct sockaddr *)&server, sizeof(server)))==SOCKET_ERROR) 
    {    int fff=WSAGetLastError();
    char buffer[50];
    _gcvt(fff, 20, buffer );
    MessageBox(0,buffer,"bind错误码",0);  
    } 
    listen(sock,10);    
    
    
    sock2 = socket(AF_INET, SOCK_STREAM,0);
    server2.sin_family = AF_INET;
    server2.sin_port = htons(9900);
    server2.sin_addr.s_addr = inet_addr ("0.0.0.0"); 
    if ((bind(sock2, (struct sockaddr *)&server2, sizeof(server2)))==SOCKET_ERROR) 
    {    int fff=WSAGetLastError();
    char buffer[50];
    _gcvt(fff, 20, buffer );
    MessageBox(0,buffer,"bind错误码",0);  
    }   
    
    
    
    listen(sock2,10);
    
    new_fd = accept(sock,0,0);
    
    
    new_fd2 = accept(sock2,0,0);
    
    
    CreateThread(0,0,hrcv,0,0,&threadid);
    CreateThread(0,0,hsnd,0,0,&threadid);
    
    
    
    
    while(1)
    {
        Sleep(1000);
    };
    
};


DWORD WINAPI hrcv(LPVOID lp)
{
    int  iResult;
    char strBuffersss[1024];
    while(1)
    {
        iResult = recv(new_fd,strBuffersss,sizeof(strBuffersss),0); 
        if(iResult<=0)ExitProcess(0);
        send(new_fd2,strBuffersss,iResult,0);
    };
};

DWORD WINAPI hsnd(LPVOID lp)
{
    int  iResult;
    char strBuffersss[1024];
    while(1)
    {
        iResult = recv(new_fd2,strBuffersss,sizeof(strBuffersss),0); 
        if(iResult<=0)ExitProcess(0);
        send(new_fd,strBuffersss,iResult,0);
    };
};

 

 

 

 


    
    

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!