всем привет! есть кто работал с носками? нужно написать прогу которая бы использовала сокс-сервера, а опыта по сабжу нет , язык - c/c++
Тебе надо тунель через нескольок носков или работа с 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 Там линки на класс
http://ru.wikipedia.org/wiki/SOCKS - доки, тут все придельно просто Вечером когда прийду домой скину функции для socks 4/5
вот, когдато писал 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; }
Вот еще по сабжу: объясняется принцип работы соксов + пример на пхп (думаю зная принцип работы переделать под что угодно не проблема) Организация работы php скрипта через socks5 сервер PHP + socks5(авторизация по методу username/password) Socks5 изучение продолжается:BIND