Прочитал, что определить тип прокси можно подключившись по ип и порту, отправив следующею комбинацию: 0x05 0x01 0x00 Тогда мол, если это сокс прокси, он вернет в ответе версию и другую информацию. Если вернет что-то другое, то это не сокс. Посылаю эту комбинацию таким образом: Code: socket1:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); FillChar(addr, SizeOf(sockaddr_in), 0); addr.sin_family:=AF_Inet; addr.sin_port:=htons(port); addr.sin_addr.S_addr:=inet_addr(Pchar(ip)); block:=true; ioctlsocket(socket1, FIONBIO, cardinal(block)); err:=0; while err<3 do begin if Connect(socket1,addr,SizeOf(TSockAddrin))=SOCKET_ERROR then begin if WSAGetLastError=WSAEWOULDBLOCK then begin FD_ZERO(fds); FD_SET(socket1, fds); tv.tv_sec := time; tv.tv_usec := 0; er:=select(0, nil, @fds, nil, @tv); end; end; block:=false; ioctlsocket(socket1, FIONBIO, cardinal(block)); if er>=1 then break else inc(err); end; if err<>3 then begin data:='0x05'+#13#10+ '0x01'+#13#10+ '0x00'; send(socket1, data[1] ,length(data), 0); rep:=reply(socket1); closesocket(socket1); end else closesocket(socket1); Но сервер никак на нее не реагирует и ничего не возвращает. Прошу помощи, как правильно сделать или подскажите что почитать.
Sifon110, для начала хотя бы RFC1928 (en | ru) прочитал, тогда вопросы чего и как отправлять отпали сразу =) а так упрощенно, конкретно для твоего способа: Code: type TSocks = packed record ver: Byte; nMethods: Byte; Methods: Byte; end; procedure _sendSocks(); var hdr: TSocks; ............ begin ............ hdr.ver:= 5; hdr.nMethods:= 1; hdr.Methods:= 0; iResult:= send(hSocket, hdr, sizeof(TSocks), 0); if (iResult = SOCKET_ERROR) then begin ............ end;