你需要读读RFC1928发你的EMAIL地址给我,附上你的问题。

解决方案 »

  1.   

    我只用过这样的软件,可不知道如何实现,谁会也教脚我。
    [email protected]
    [email protected]
      

  2.   

    如代理是透明的,和原来一样操作就可以了(只是不能当服务器)。如果是用sock4/5代理,则:1、向服务器的1080端口建立tcp连接
    2、向服务器发送  05 01 00
    3、如果接到 05 00 则是可以代理
    4、发送 05 03 00 01 00 00 00 00 + 本地UDP端口(2字节)
    5、服务器返回 05 00 00 01 +服务器地址+端口
    6、断开连接
    7、发送UDP数据报:格式变为
    00 00 01 +目的地址IP(4字节)+目的端口 +所要发送的信息
    8、接受与原来相同 
      

  3.   

    如果我想 bind 一个端口,进行监听,怎么办?
      

  4.   

    是不是标准代理?如果是标准代理需要知道具体的代理协议如果是自己写代理协议,应该比较简单,主要是通过端口转换,和代理服务器建立代理端口上的连接,将请求包再度封装,主要是加上请求目标地址的IP和Port以及内容,在通过代理发送到目标地址,好了!
      

  5.   

    我看了一下rfc1928文档, 客户端的请求命令有三种:connect
      

  6.   

    Kronus(Kronus) 请问:第5步中, 服务器返回的 服务器地址和端口 (BND.ADDRESS 和 BND.PORT)是干什么用的?第7步中的 目的地址和目的端口是不是就是上面的两个端口?rfc1928 中说:返回的该 BND.ADDRESS 可能是 proxy的其他网段的地址。
    (因为proxy一般是多宿的,绑定了多个IP)
      

  7.   

    5返回了代理的ip和分配的端口;我是这样的:我通过我们局域网的代理(肯定是好用的)连接我自己的机器,当代理tcp 请求时,已经测试通过了;可是udp却总是阻塞在recefrom();(我在本地bind了一个端口):程序如下:发送请求之前先绑定本地端口: // bind the local port
    struct sockaddr_in localAddr;
    int len = sizeof(sockaddr);
    memset(&localAddr,0,len);
    localAddr.sin_family = AF_INET;

    localAddr.sin_addr.s_addr  = inet_addr("0.0.0.0");
    localAddr.sin_port = htons(localPort);

    udp_sockfd = socket(AF_INET,SOCK_DGRAM,0);
    if (udp_sockfd == -1)
    {
    AfxMessageBox("SOCKET INITISLIZE ERROR!");
    return FALSE;
    } result = bind(udp_sockfd,(sockaddr*)&localAddr,len);
    if (result == -1)
    {
    closesocket(udp_sockfd);
    AfxMessageBox(_T("绑定本地端口失败!"));
    return FALSE;
    }发送请求接受代理的 REP         result = send(tcp_sockfd,buffer,10,0);
    result = recv(tcp_sockfd,buffer,MAX_BUFFER,0);
    closesocket(tcp_sockfd);

    if ( (buffer[0] != 5) || (buffer[1] != 0) )
    return FALSE; memcpy(&Bndip,buffer+4,4);
    int pp;
    memcpy(&BndPort,buffer+8,2);
    pp = ntohs(BndPort);
    BndPort = pp;
    tcp_Close();
    (注: 此时返回了代理在局域网段的网址以及分配的一个端口)
    发送数据报:
            //DATAGRAM HEADER buffer[0]=0x00;
    buffer[1]=0x00;
    buffer[2]=0x00; //FRAG  this datagram is alone
    buffer[3]=0x01; // ipv4

    memcpy(&buffer+4,&ip,4); //目标ip
    memcpy(buffer+8,&port,2) ;  //目的端口,均为网络字节顺序
    memcpy(buffer+10,buff,len); struct sockaddr_in proxyAddr;
    int socklen = sizeof(sockaddr);
    memset(&proxyAddr,0,socklen);
    proxyAddr.sin_family = AF_INET; proxyAddr.sin_addr.s_addr  = Bndip;
    proxyAddr.sin_port = htons(BndPort);
    result = sendto(udp_sockfd,buffer,len+10,0,(struct sockaddr*)&proxyAddr,socklen);
    return result;接受数据报:
             int result = 0;
    struct sockaddr_in sourAddr;
    int len = sizeof(sockaddr);
    memset(&sourAddr,0,len);
    sourAddr.sin_family = AF_INET;
    sourAddr.sin_addr.s_addr = inet_addr("0.0.0.0");
    sourAddr.sin_port = htons(localPort);
    result = recvfrom(udp_sockfd,buffer,MAX_BUFFER,0,(sockaddr*)&sourAddr,&len);  // (总是阻塞在这儿!)
    return result;谢谢 Kronus(Kronus)!
      

  8.   

    我在本机 bind 一个udp 端口,结果还真的 收不到代理转发的 数据报?(但是tcp可以)Kronus(Kronus)你觉得可能的原因是什么?能不能把你的代码给我参考一下:)
      

  9.   

    现在本机bind的端口能收到了,发射的时候也发出去了,我单步跟踪的时候recvfrom()中的 sockaddr 参数中填的数据也是代理的 ip,现在问题是发射的内容,客户端却收不到。好像代理把我反射回的报丢弃了。服务器段:      result = recvfrom(udp_sockfd,buffer,1000,0,(struct sockaddr*)&sourAddr,&len);
         buffer[result] = '\n';
         result = sendto(udp_sockfd,buffer,result,0,(struct sockaddr*)&sourAddr,len);
    客户端:         int result = 0;
              struct sockaddr_in sourAddr;
    int len = sizeof(sourAddr);
    result = recvfrom(udp_sockfd,buffer,MAX_BUFFER,0,(sockaddr*)&sourAddr,&len);  //阻塞在此处!!!!!!!!!!!!!!!!!
    哪位大侠快出手!!
      

  10.   

    为什么我的也不行呢?
    同样的.
    CString strProxy("10.0.0.103");
    UINT nProxyPort = 1080;
    CString strUserName("caijs");
    CString strPassword("caijs"); struct sockaddr_in proxy_addr;
    proxy_addr.sin_family =  AF_INET;
    proxy_addr.sin_addr.s_addr = 0;
    proxy_addr.sin_port = 0;
    CProxy proxy;
    CTCPSocket* pSockProxy = new CTCPSocket();
    pSockProxy->Create();
    //Socks5认证
    proxy.TCPProxyReqAuth5(
    pSockProxy,
    strProxy,
    nProxyPort,
    strUserName,
    strPassword
    );
    //
    proxy.Socks5Udp(pSockProxy,proxy_addr); //
    struct sockaddr_in remote_address;// 主机地址.
    remote_address.sin_family =  AF_INET;
    remote_address.sin_addr.s_addr = inet_addr("10.0.0.103");;
    remote_address.sin_port = proxy_addr.sin_port;//htons(6779); char buf[20];
    buf[0] = 0;
    buf[1] = 0;
    buf[2] = 0;//不分片为0,分片为1。
    buf[3] = 1;//IPV4为1。
    memcpy(&buf[4],&remote_address.sin_addr.s_addr,4);
        memcpy(&buf[8],&remote_address.sin_port,2);
        memcpy(&buf[10],"abcd",5); SOCKET sUdp =  socket(AF_INET, SOCK_DGRAM, 0);
    bind(sUdp,(struct sockaddr FAR *)&remote_address,sizeof(remote_address));
    //
    int iRet =  sendto(sUdp,buf,15,0,(sockaddr*)&proxy_addr,sizeof(proxy_addr));
    memset(buf,0,20);
    int addrLen = sizeof(remote_address);
    iRet = recvfrom(sUdp,buf,15,0,(sockaddr*)&remote_address,&addrLen);
    //在这不行了.
    //
    closesocket(sUdp);
    delete pSockProxy;
      

  11.   

    http://www.csdn.net/expert/topic/491/491928.shtm各位,帮我看看怎么做?
      

  12.   

    http://www.csdn.net/Expert/topic/493/493600.shtm
    帮忙看看
      

  13.   

    http://www.csdn.net/expert/topicview1.asp
    来吧,来吧!