我的服务器装了CCProxy.exe这个软件,需要帐号密码验证
我想在客户机上通过监听一个端口把数据包通过CCProxy服务器转发出去
求类似的VC源码  控制台/mfc都可以
邮箱:jifeng520#yahoo.cn  请讲#替换成@

解决方案 »

  1.   

    http://www.koders.com/cpp/fid8EB202FB22C3B4326805D6E368D1365705435801.aspx?s=socks5
    http://www.koders.com/cpp/fid35160C548233B1F63A7FDC54004F18635E4C2441.aspx?s=socks5
    http://www.koders.com/cpp/fid0329AB19D66F7D45FE32EFD651D1004E695A5BA0.aspx?s=socks5
    http://www.koders.com/cpp/fidC12057F7D3AE6777E4906ABE812A28E1EBE4B83D.aspx?s=socks5
      

  2.   

    SOURCE CODE:
    http://www.vckbase.com/code/listcode.asp?mclsid=9&sclsid=901
    http://www.vchelp.net/vchelp/type.asp?class_id=1&type_id=36
      

  3.   

    http://www.codeproject.com/internet/casyncproxysocket.asp
    http://www.codeproject.com/internet/casyncsocketex.asp
      

  4.   

    http://www.codeproject.com/internet/casyncproxysocket.asp 
    这个是代理到FTP服务器撒
    我要得不是这样的哦
    内网主机A:192.168.0.1   用CCProxy开放socks5代理 8080端口(这台机有外网)
    在内网的   192.168.0.X   都要通过192.168.0.1开放socks5代理上外网
    是在192.168.0.X 每台电脑上到安装一个客户端监听端口例如监听1080  QQ代理设置127.0.0.1:1080然后客户端转发到 CCProxy上然后在转发出去 
    我要这样的VC代码
      

  5.   

    可能是我没有表达清楚
    我求CCProxy客户端的VC源代码
    谢谢
      

  6.   

    是不是这个:
    http://topic.csdn.net/t/20011120/13/379218.html
      

  7.   

    楼主是要二级代理的客户端吧?本地监听某个端口,再通过CCProxy的代理服务器转发
    这样的工具很多,包括CCProxy也可以做前台的代理。你在客户端安装CCProxy,开启Sock5服务,监听某端口
    然后在高级设置中设置二级代理就可以了,二级代理的地址就输入你的Sock5服务器地址即可
    实际上你要的源码应该是支持二级代理的Sock5或者HTTP协议的代理源码。
      

  8.   

    开发;卓越呼叫中心、三农热线”语音农业综合信息服务平台、卓越办公自动化软件、卓越电厂MIS系统、卓越客户关系管理系统、卓越网站制作、卓越医疗信息管理系统;沈阳卓越科技有限公司;http://www.excellence-tech.com
      

  9.   

    问大家一个问题:
    我用sock5做了个客户端的程序:
    代理服务器的IP:67.151.147.66 端口1080
    unsigned int g_sock;
    int err;
    struct sockaddr_in addr;
    g_sock = socket (AF_INET, SOCK_STREAM, 0);
    if(g_sock == INVALID_SOCKET)
    {
    return 0;
    }
    memset (&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr("67.151.147.66");   
    addr.sin_port = htons(1080);          
    err = connect(g_sock, (struct sockaddr*) &addr, sizeof(addr));  char buff[600];
    struct sock5req1 *m_proxyreq1;
    m_proxyreq1 = (struct sock5req1 *)buff;
    m_proxyreq1->Ver = 5;
    //m_proxyreq1->nMethods = 0;
    m_proxyreq1->nMethods = 2;    //后面数据包的长度
    m_proxyreq1->Methods[0] = 0;  //无验证请求
    m_proxyreq1->Methods[1] = 2;
    int rc = 0;
    rc = send(g_sock,buff,4,0); //g_sock.Send(buff,4);
    struct sock5ans1 *m_proxyans1;
    m_proxyans1 = (struct sock5ans1 *)buff;
    memset(buff,0,600);
    //g_sock.Receive(buff,600);
    rc = recv(g_sock,buff,4,0); if(m_proxyans1->Ver != 5 || (m_proxyans1->Method!=0 && m_proxyans1->Method!=2))
    {
    return FALSE;
    }
    char chuser[32] = {0};
    char chpass[32] = {0};
    if(m_proxyans1->Method == 2)
    { }
    struct sock5req2 *m_proxyreq2;
    m_proxyreq2 = (struct sock5req2 *)buff;
    m_proxyreq2->Ver = 5; //-----------------------------------------------
    //TCP
    m_proxyreq2->Cmd = 1;  //tcp连接
    m_proxyreq2->Rsv = 0;
    m_proxyreq2->Atyp = 1; //address type:Ip V4 ;  unsigned long tmpLong = inet_addr("202.165.102.205");  yahoo的WEB服务器的地址
    unsigned short port = ntohs(80);
    memcpy(m_proxyreq2->other,&tmpLong,4);
    memcpy(m_proxyreq2->other+4,&port,2);
            rc = send(g_sock,buff,sizeof(struct sock5req2)+5,0);
    struct sock5ans2 *m_proxyans2;
    memset(buff,0,600);
    m_proxyans2 = (struct sock5ans2 *)buff;
    rc = recv(g_sock,buff,600,0);
    if(m_proxyans2->Ver != 5 || m_proxyans2->Rep != 0)
    {
    return FALSE;
    }
        //认证成功 int iResult; 
    long lResult; 
    char strSubAddr[100], strBuffer[100]; 
    strcpy(strSubAddr, "GET /08-05-/1037/2j4l6.html \r\n"); 
            iResult = send(g_sock, strSubAddr,strlen(strSubAddr),0);  do 
    {
    iResult = recv(g_sock,strBuffer,100,0); 如果我用代理就收不到数据 如果我直接用连到远端的就能收到数据
    }while (iResult != 0);
      

  10.   

    我用的是联代理服务器的SOCK句柄 发的实际数据
    看文档说有绑定的ip和port但我没有看到
      

  11.   

    #ifndef _BASESOCKET_H
    #define _BASESOCKET_H#include <WinSock.h>#pragma pack(push)  
    #pragma pack (1) /*指定按1字节对齐*/
    typedef struct _sock4req1
    {
    char VN;
    char CD;
    unsigned short Port;
    unsigned long IPAddr;
    char other[1];
    }sock4req1;typedef struct _sock4ans1
    {
    char VN;
    char CD;
    }sock4ans1;typedef struct _sock5req1
    {
    char Ver;
    char nMethods;
    char Methods[255];
    }sock5req1;typedef struct _sock5ans1
    {
    char Ver;
    char Method;
    }sock5ans1;typedef struct _sock5req2
    {
    char Ver;
    char Cmd;
    char Rsv;
    char Atyp;
    unsigned long IPAddr;
    unsigned short Port;
    }sock5req2;typedef struct _sock5ans2
    {
    char Ver;
    char Rep;
    char Rsv;
    char Atyp;
    unsigned long IPAddr;
    unsigned short Port;
    }sock5ans2;typedef struct _authans
    {
    char Ver;
    char Status;
    }authans;
    #pragma pack(pop)
      

  12.   

    #include "BaseSocket.h"#include "LogSys.h"
    #include "Common.h"#pragma comment(lib, "ws2_32.lib")BaseSocket::BaseSocket()
    {
        m_ConnectSocket = INVALID_SOCKET ;    WSADATA wsaData ;
        WSAStartup(MAKEWORD(2,2), &wsaData) ;
    }BaseSocket::~BaseSocket()
    {
        if (m_ConnectSocket != INVALID_SOCKET)
        {
            closesocket(m_ConnectSocket) ;
        }
        WSACleanup() ;
    }bool BaseSocket::Create()
    {
        m_bOpen = false ;    m_ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) ;
        if (m_ConnectSocket == INVALID_SOCKET)
        {
            return false ;
        }    int nNetTimeout = 5000 ;
        setsockopt(m_ConnectSocket, SOL_SOCKET, SO_SNDTIMEO, (char *)&nNetTimeout, sizeof(int)) ;    return true ;
    }bool BaseSocket::Connect(const char* szHostName, const unsigned short u16Port)
    {
        memset(&m_peer, 0, sizeof(sockaddr_in)) ;
        m_peer.sin_family = AF_INET ;
        m_peer.sin_addr.s_addr = inet_addr(szHostName) ;
        m_peer.sin_port = htons(u16Port) ;    if (connect(m_ConnectSocket, (SOCKADDR*)&m_peer, sizeof(m_peer)) == SOCKET_ERROR)
        {
            return false ;
        }    m_bOpen = true ;    return true ;
    }bool BaseSocket::Socks4Connect(const char *szHostAddress,unsigned short nHostPort,const char *szPoxyIP,unsigned short usPoxyPort)
    {
    int rc;
    SOCKADDR_IN addr;
    memset(&addr,0,sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr(szPoxyIP);
    addr.sin_port = htons(usPoxyPort);
    rc = connect(m_ConnectSocket,(SOCKADDR *)&addr, sizeof(addr));
    if(rc == SOCKET_ERROR)
    {
    closesocket(m_ConnectSocket);
    return false;
    } char buff[256];
    memset(buff,0,sizeof(buff));
    sock4req1 *m_proxyreq;
    m_proxyreq = (sock4req1 *)buff;
    m_proxyreq->VN = 4;
    m_proxyreq->CD = 1;
    m_proxyreq->Port = ntohs(nHostPort);
    m_proxyreq->IPAddr = inet_addr("szHostAddress");
    strcpy(m_proxyreq->other , "");
    rc = send(m_ConnectSocket,(const char*)buff,9,0);
    if(rc == SOCKET_ERROR)
    {
    closesocket(m_ConnectSocket);
    return false;
    }
    sock4ans1 *m_proxyans;
    m_proxyans = (sock4ans1 *)buff;
    memset(buff,0,sizeof(buff));
    rc = recv(m_ConnectSocket,(char*)buff,sizeof(buff),0);
    if(rc == SOCKET_ERROR)
    {
    closesocket(m_ConnectSocket);
    return false;
    }
    if(m_proxyans->VN != 0 || m_proxyans->CD != 90)
    {
    closesocket(m_ConnectSocket);
    return false;
    }
    return true;
    }bool BaseSocket::Socks5Connect(const char *szHostAddress,unsigned short nHostPort,const char *szPoxyIP,unsigned short usPoxyPort,
      const char *szUserName,const char *szPassWord,unsigned int iUserNameLongth,unsigned int iPassWordLongth)
    {
    // TODO: Add your control notification handler code here
    int rc;
    SOCKADDR_IN addr;
    memset(&addr,0,sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr(szPoxyIP);
    addr.sin_port = htons(usPoxyPort);
    rc = connect(m_ConnectSocket,(SOCKADDR *)&addr, sizeof(addr));
    if(rc == SOCKET_ERROR)
    {
    closesocket(m_ConnectSocket);
    return false;
    }
    char buff[512];
    memset(buff,0,sizeof(buff));
    sock5req1 *m_proxyreq1;
    m_proxyreq1 = (sock5req1 *)buff;
    m_proxyreq1->Ver = 5;
    m_proxyreq1->nMethods = 2;
    m_proxyreq1->Methods[0] = 0;
    m_proxyreq1->Methods[1] = 2;
    rc = send(m_ConnectSocket,(const char*)buff,4,0);
    if(rc == SOCKET_ERROR)
    { closesocket(m_ConnectSocket);
    return false;
    }
    sock5ans1 *m_proxyans1;
    m_proxyans1 = (sock5ans1 *)buff;
    memset(buff,0,sizeof(buff));
    rc = recv(m_ConnectSocket,(char*)buff,sizeof(buff),0);
    if(rc == SOCKET_ERROR)
    { closesocket(m_ConnectSocket);
    return false;
    }
    if(m_proxyans1->Ver != 5 || (m_proxyans1->Method!=0 && m_proxyans1->Method!=2))
    { closesocket(m_ConnectSocket);
    return false;
    }
    if(m_proxyans1->Method == 2)
    {
    memset(buff,0,sizeof(buff));
    buff[0] = 5;
    buff[1] = iUserNameLongth;
    memcpy( &buff[2], szUserName, iUserNameLongth);
    buff[2+ iUserNameLongth] = iPassWordLongth;
    memcpy( &buff[3 + iUserNameLongth], szPassWord, iPassWordLongth );
    if( send( m_ConnectSocket, (const char*)buff, (3+ iUserNameLongth + iPassWordLongth ), 0 ) == SOCKET_ERROR )
    { closesocket(m_ConnectSocket);
    return false;
    } authans *m_authans;
    m_authans = (authans *)buff;
    memset(buff,0,sizeof(buff));
    rc = recv(m_ConnectSocket,(char*)buff,sizeof(buff),0);
    if(rc == SOCKET_ERROR)
    { closesocket(m_ConnectSocket);
    return false;
    }
    if(m_authans->Ver != 5 || m_authans->Status != 0)
    { closesocket(m_ConnectSocket);
    return false;
    }
    }
    sock5req2 *m_proxyreq2;
    m_proxyreq2 = (sock5req2 *)buff;
    m_proxyreq2->Ver = 5;
    m_proxyreq2->Cmd = 1;
    m_proxyreq2->Rsv = 0;
    m_proxyreq2->Atyp = 1;
    m_proxyreq2->IPAddr = inet_addr(szHostAddress);
    m_proxyreq2->Port = ntohs(nHostPort);
    if( send( m_ConnectSocket, (const char*)buff, sizeof(sock5req2), 0 ) == SOCKET_ERROR )
    { closesocket(m_ConnectSocket);
    return false;
    }
    sock5ans2 *m_proxyans2;
    memset(buff,0,sizeof(buff));
    m_proxyans2 = (sock5ans2 *)buff;
    rc = recv(m_ConnectSocket,(char*)buff,sizeof(buff),0);
    if(rc == SOCKET_ERROR)
    { closesocket(m_ConnectSocket);
    return false;
    }
    if(m_proxyans2->Ver != 5 || m_proxyans2->Rep != 0)
    { closesocket(m_ConnectSocket);
    return false;
    }
    m_bOpen = true ;
    return true;
    }
    int  BaseSocket::Close()
    {
        m_bOpen = false ;
        return closesocket(m_ConnectSocket) ;
    }int  BaseSocket::Send(const unsigned char* pBuf, const unsigned u32Len)
    {
        int ret = send(m_ConnectSocket, (const char*)pBuf, u32Len, 0) ;
        if (ret <= 0)
        {
    #if DEBUG_DATA_OUT
            LogSys::Instance().LOG_FILE("Send error : %d\r\n", WSAGetLastError()) ;
    #endif
            Close() ;
        }
        return ret ;
    }int  BaseSocket::Receive(unsigned char* pBuf, const unsigned u32Len)
    {
        int ret = recv(m_ConnectSocket, (char*)pBuf, u32Len, 0) ;
        if (ret <= 0)
        {
    #if DEBUG_DATA_OUT
            LogSys::Instance().LOG_FILE("Recv error : %d\r\n", WSAGetLastError()) ;
    #endif
            Close() ;
        }
        return ret ;
    }
    bool BaseSocket::GetIPBySocket( char* strIP )
    {
     
    struct   sockaddr_in localAddr;
    int  namelen = sizeof( localAddr ); if( getsockname( m_ConnectSocket, (struct   sockaddr   *)&localAddr, &namelen ) == SOCKET_ERROR )
    return false; memcpy(strIP,inet_ntoa((struct in_addr )localAddr.sin_addr),namelen);
    return true;
    }
    bool BaseSocket::GetPortBySocket(unsigned short *port )
    {
     
    struct   sockaddr_in localAddr;
    int  namelen = sizeof( localAddr ); if( getsockname( m_ConnectSocket, (struct   sockaddr   *)&localAddr, &namelen ) == SOCKET_ERROR )
    return false;
    *port = ntohs(localAddr.sin_port);
    return true;
    }
      

  13.   

    简单呀.在本机装个ccproxy,做成串联代理,下一层代理设置为网关的ccproxy代理就是你想要的了.