кто работал с Socks4/5?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by sn0w, 24 Jun 2008.

  1. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,032
    Likes Received:
    1,320
    Reputations:
    327
    всем привет! есть кто работал с носками? нужно написать прогу которая бы использовала сокс-сервера, а опыта по сабжу нет :(, язык - c/c++
     
    #1 sn0w, 24 Jun 2008
    Last edited: 24 Jun 2008
  2. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    Тебе надо тунель через нескольок носков или работа с 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

    Там линки на класс
     
    #2 spider-intruder, 24 Jun 2008
    Last edited: 24 Jun 2008
    1 person likes this.
  3. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    http://ru.wikipedia.org/wiki/SOCKS - доки, тут все придельно просто

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

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,032
    Likes Received:
    1,320
    Reputations:
    327
    только не забудь ;)
     
  5. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    вот, когдато писал

    socks4
    Code:
    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
    Code:
    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;
    }
    
     
    2 people like this.
  6. ElteRUS

    ElteRUS Elder - Старейшина

    Joined:
    11 Oct 2007
    Messages:
    367
    Likes Received:
    460
    Reputations:
    93
    2 people like this.