Подключиться к серверу(например IRC), Через прокси или сокс.

Тема в разделе "WASM.BEGINNERS", создана пользователем barberan, 23 апр 2007.

  1. barberan

    barberan New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2006
    Сообщения:
    5
    Есть необходимость не светить свой АйПИ..Поэтому надо подключиться к ИРЦ серву через прокси. Скаэжите, как это реализовать на Сях???
     
  2. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Берёшь в руки rfc socks4 socks5 и дописываешь сокс функцию к своему клиенту.
     
  3. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    Или берешь программу-socks'изатор (например SocksCap) и запускаешь через нее...
     
  4. barberan

    barberan New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2006
    Сообщения:
    5
    Странно, что ничего не происходит...т.е. коннет происходит, но вот общение с соксом как-то неверно...На канал никакой бот не заходит и тишина вообще полная. и в файл записывается два байта, а не столько,колько было-бы похоже что там все данные...Помогите.
    Код (Text):
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3.  
    4. #include <winsock2.h>
    5. #include <windows.h>
    6. #include "resource.h"
    7.  
    8. #pragma comment(lib,"ws2_32.lib")
    9.  
    10. //--------------------------------------------------
    11. struct server
    12. {
    13.     char address[32];
    14.     unsigned short port;
    15. };
    16. int ConnectSocks(SOCKET sock, server *i,server *s)
    17. {
    18.     WSAData wsa;
    19.     WSAStartup(MAKEWORD(2,2),&wsa);
    20.  
    21.     SOCKADDR_IN sin;
    22.     memset(&sin,0,sizeof(sin));
    23.  
    24.     char req[256];
    25.     char ans[1024];
    26.     int n = 0;
    27.  
    28.     if( (strlen(s->address)!= 0) && (s->port != 0))
    29.     {
    30.         sin.sin_addr.S_un.S_addr = inet_addr(s->address);
    31.         sin.sin_family = AF_INET;
    32.         sin.sin_port = htons(s->port);
    33.     }
    34.     else
    35.         return 1;
    36.  
    37.     sock = socket(AF_INET,SOCK_STREAM,0);
    38.     if(sock != INVALID_SOCKET)
    39.     {
    40.         if(!connect(sock,(struct sockaddr*)&sin,sizeof(sin)))
    41.         {
    42.             req[0] = 5;
    43.             req[1] = 1;
    44.             req[2] = 0;
    45.             n = send(sock,req,3,0);
    46.             if(n==0) return 1;
    47.  
    48.             n = recv(sock,ans,2,0);
    49.             if(n != 2) return 1;
    50.             if(ans[1] !=0) return 1;
    51.  
    52.             int m = strlen(i->address);
    53.             req[0] = 5;
    54.             req[1] = 1;
    55.             req[2] = 0;
    56.             req[3] = 3;
    57.             req[4] = m;
    58.             memcpy(req+5,i->address,m);
    59.             *((unsigned short*)(req+5+m)) = htons(i->port);
    60.             n = send(sock,req,m+7,0);
    61.             if(n==0) return 1;
    62.             n = recv(sock,ans,10,0);
    63.             if(n != 10) return 1;
    64.             if(ans[1] != 0) return 1;
    65.             if(ans[3] != 1) return 1;
    66.         }
    67.         else
    68.         {
    69.             MessageBox(HWND_DESKTOP,"Connection failed","",MB_ICONERROR);
    70.             return 1;
    71.         }
    72.     }
    73.  
    74.     return 0;
    75. }
    76. int WINAPI WinMain(HINSTANCE hi,HINSTANCE,LPSTR,int)
    77. {
    78.     char *socks_address = "83.228.105.117";
    79.     int socks_port = 3128;
    80.  
    81.     char *irc_address = "80.92.100.184";
    82.     int irc_port = 6667;
    83.     //------------------------------
    84.  
    85.     server irc = {0};
    86.     server socks = {0};
    87.     SOCKET s = INVALID_SOCKET;
    88.     char tmp[256];
    89.  
    90.     wsprintf(socks.address,"%s",socks_address);
    91.     socks.port = socks_port;
    92.  
    93.     wsprintf(irc.address,"%s",irc_address);
    94.     irc.port = irc_port;
    95.  
    96.     if( ConnectSocks(s,&irc,&socks) == 1)
    97.     return 0;
    98.     else
    99.     {
    100.         wsprintf(tmp,"PASS %s\r\n","password");
    101.                send(s,tmp,strlen(tmp)+1,0);
    102.         wsprintf(tmp,"NICK %s\r\n","thriouss");
    103.         send(s,tmp,strlen(tmp)+1,0);
    104.         wsprintf(tmp,"USER ID 127.0.0.1 Server :%s\r\n","username");
    105.         send(s,tmp,strlen(tmp)+1,0);
    106.         wsprintf(tmp,"JOIN #%s\r\n","development");
    107.         send(s,tmp,strlen(tmp)+1,0);
    108.         wsprintf(tmp,"PRIVMSG #%s :\x03\x32 %s \r\n","development","message");
    109.         send(s,tmp,strlen(tmp)+1,0);
    110.     }
    111.     return 0;
    112. }