Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   кто работал с Socks4/5? (https://forum.antichat.xyz/showthread.php?t=74805)

sn0w 24.06.2008 10:57

кто работал с Socks4/5?
 
всем привет! есть кто работал с носками? нужно написать прогу которая бы использовала сокс-сервера, а опыта по сабжу нет :(, язык - c/c++

spider-intruder 24.06.2008 12:06

Тебе надо тунель через нескольок носков или работа с 1 ?

http://www.cyberguru.ru/cpp-sources/network/csocksifiedsocket-ili-kak-ustanovit-konnekt-tcherez-socks4/5-proksi.html

Может поможет?

http://forum.sources.ru/index.php?showtopic=167593

Там линки на класс

nc.STRIEM 24.06.2008 13:16

http://ru.wikipedia.org/wiki/SOCKS - доки, тут все придельно просто

Вечером когда прийду домой скину функции для socks 4/5

sn0w 24.06.2008 14:37

Цитата:

Сообщение от nc.STRIEM
http://ru.wikipedia.org/wiki/SOCKS - доки, тут все придельно просто

Вечером когда прийду домой скину функции для socks 4/5

только не забудь ;)

nc.STRIEM 24.06.2008 18:17

вот, когдато писал

socks4
Код:

SOCKET socks4(char *socks, int sockport, char *server, int srvport)
{
        struct hostent *Ip = gethostbyname(socks);
        if(Ip == NULL)
                return 0;

        sockaddr_in sa;
        sa.sin_family = AF_INET;
        sa.sin_port = htons(sockport);
        sa.sin_addr.s_addr = inet_addr(inet_ntoa(*((struct in_addr *)Ip->h_addr)));

        char pack[12];
        pack[0] = 0x04;
        pack[1] = 0x01;
        pack[2] = srvport/256;
        pack[3] = srvport%256;
       
        Ip = gethostbyname(server);
        if(Ip == NULL)
                return 0;
        char ip[16];
        strcpy(ip, inet_ntoa(*((struct in_addr *)Ip->h_addr)));
        char *p = ip;
        int i, j = strlen(ip), k=4;
        for(i = 0; i<j; i++)
                if(ip[i] == '.')
                {
                        ip[i] = 0;
                        pack[k] = atoi(p);
                        k++;
                        p = ip+i+1;
                }
        pack[k] = atoi(p);

        pack[8] = rand()%255;
        pack[9] = rand()%255;
        pack[10] = rand()%255;
        pack[11] = 0x00;

        SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if(s == SOCKET_ERROR)
                return SOCKET_ERROR;

        if(connect(s, (SOCKADDR *)&sa, sizeof(sa)) == SOCKET_ERROR)
                return SOCKET_ERROR;

        if(send(s, pack, 12, 0) == SOCKET_ERROR)
                return SOCKET_ERROR;
       
        i = recv(s, pack, 4, 0);
        if(i == 0 || i == SOCKET_ERROR)
                return SOCKET_ERROR;
        if(pack[1] == 0x5a)
                return s;
        return 0;
}


socks5
Код:

SOCKET socks5(char *socks, int sockport, char *server, int srvport)
{
        struct hostent *Ip = gethostbyname(socks);
        if(Ip == NULL)
                return 0;
       
        sockaddr_in sa;
        sa.sin_family = AF_INET;
        sa.sin_port = htons(sockport);
        sa.sin_addr.s_addr = inet_addr(inet_ntoa(*((struct in_addr *)Ip->h_addr)));
       
        char pack[12];
        SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if(s == SOCKET_ERROR)
                return SOCKET_ERROR;
       
        if(connect(s, (SOCKADDR *)&sa, sizeof(sa)) == SOCKET_ERROR)
                return SOCKET_ERROR;
       
        if(send(s, pack, 3, 0) == SOCKET_ERROR)
                return SOCKET_ERROR;
       
        int i = recv(s, pack, 2, 0);
        if(i == 0 || i == SOCKET_ERROR)
                return SOCKET_ERROR;
        if(pack[0] != 0x05 || pack[1] == 0xFF)
                        return 0;

        pack[0] = 0x05;
        pack[1] = 0x01;
        pack[2] = 0x00;
        pack[3] = 0x01;
       
        Ip = gethostbyname(server);
        if(Ip == NULL)
                return 0;
        char ip[16];
        strcpy(ip, inet_ntoa(*((struct in_addr *)Ip->h_addr)));
        int  j = strlen(ip), k=4;
        char *p = ip;
        for(i = 0; i<j; i++)
                if(ip[i] == '.')
                {
                        ip[i] = 0;
                        pack[k] = atoi(p);
                        k++;
                        p = ip+i+1;
                }
        pack[k] = atoi(p);
        pack[8] = srvport/256;
        pack[9] = srvport%256;

        if(send(s, pack, 10, 0) == SOCKET_ERROR)
                return SOCKET_ERROR;
       
        i = recv(s, pack, 10, 0);
        if(i == 0 || i == SOCKET_ERROR)
                return SOCKET_ERROR;
        if(pack[0] == 0x05 && pack[1] == 0x00)
                        return s;
        return 0;
}


ElteRUS 24.06.2008 18:30

Вот еще по сабжу: объясняется принцип работы соксов + пример на пхп (думаю зная принцип работы переделать под что угодно не проблема)

Организация работы php скрипта через socks5 сервер

PHP + socks5(авторизация по методу username/password)

Socks5 изучение продолжается:BIND


Время: 07:03