Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

17.04.2007, 07:27
|
|
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме: 4172659
Репутация:
646
|
|
Помогите отыскать сорцы простого http прокси, реализованного на WinSock. Или документацию о протоколе прокси, сам напишу...
|
|
|

17.04.2007, 08:19
|
|
Banned
Регистрация: 13.09.2006
Сообщений: 523
Провел на форуме: 2869410
Репутация:
925
|
|
Не забивай форум тупыми мессагами =\
Вот,самый простой http://slil.ru/24247196 Зыыыы Плюсеги мне )) 
|
|
|

17.04.2007, 12:11
|
|
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме: 4172659
Репутация:
646
|
|
zl0y, премного благодарен. Все же хотелось бы где то почитать о работе прокси, самому интересно
|
|
|

17.04.2007, 19:17
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
2726
|
|
ну почитай
берешь слушаешь какой-нибудь порт, получаешь туда коннект и http-запрос читаешь
берешь поле Host: из него и резольвишь айпи. коннектишься туда.
передаешь весь запрос как он был. получаешь ответ и передаешь его обратно.
только при получение коонекта надо создавать отдельный поток, который будет обслужить клиентский запрос.
сокс - получаешь запрос в виде структуры - там команда, адрес и данные
все это описано, как ни странно =\
коннектишься, передаешь
|
|
|

18.04.2007, 09:23
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Сообщение от KEZ
ну почитай
берешь слушаешь какой-нибудь порт, получаешь туда коннект и http-запрос читаешь
берешь поле Host: из него и резольвишь айпи. коннектишься туда.
передаешь весь запрос как он был. получаешь ответ и передаешь его обратно.
только при получение коонекта надо создавать отдельный поток, который будет обслужить клиентский запрос.
сокс - получаешь запрос в виде структуры - там команда, адрес и данные
все это описано, как ни странно =\
коннектишься, передаешь
Что самое странное, описание ВСЕХ протоколов есть в RFC. Народ ленится читать?
|
|
|

24.04.2007, 03:29
|
|
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме: 4172659
Репутация:
646
|
|
Не, не ленюсь. Просил лишь помочь - подсказать хде эт найти.
|
|
|

28.04.2007, 18:28
|
|
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме: 4172659
Репутация:
646
|
|
zl0y, а есть такой же, консольный, но тока сокс?
|
|
|

28.04.2007, 18:40
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
сложно переписать да?
|
|
|

30.04.2007, 06:13
|
|
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме: 4172659
Репутация:
646
|
|
Пишу курсовик по сетям, неохота переключаться на другой код. Думал, мож есть у кого-нибудь велосипед...
З.Ы. Ладно, будет время, перепишу и выложу.
|
|
|

30.04.2007, 14:06
|
|
Участник форума
Регистрация: 25.11.2006
Сообщений: 291
Провел на форуме: 1537850
Репутация:
536
|
|
Сообщение от Joker-jar
zl0y, а есть такой же, консольный, но тока сокс?
Вот те на делфях исходники сокс4. Нашел в нете, на работоспособность не тестил:
Код:
program dproxy;
uses
windows,
WinSock;
type TSOCKS4_REQUEST=record
ucVersion : byte;
ucCommand : byte;
wDestPort : word;
dwDestIp : dword;
end;
var
wsaData : TWSADATA;
sport : string;
iport : word;
l_sock : TSocket;
sock4 : SOCKADDR_IN;
Client : TSockAddr;
Size : integer;
h1 : THandle;
procedure FlushRecvBufferUntil(s:TSOCKET;condition:Char);
var
iReceiveRes : integer;
cDummy : char;
begin
repeat
iReceiveRes := recv(s, cDummy, sizeof(cDummy), 0);
until NOT ((iReceiveRes<>SOCKET_ERROR) and (iReceiveRes<>0) and (cDummy<>condition));
end;
procedure SocksHandlerTreadProc(pParam:pointer); stdcall;
var
s : TSocket;
tunnelSock : TSocket;
iConnectResult : integer;
iReceiveRes : integer;
iSocketsSet : integer;
socks4Request : TSOCKS4_REQUEST;
socks4Response : TSOCKS4_REQUEST;
remoteAddr : SOCKADDR_IN;
fds_read : TFDset;//fd_set;
tv : TTimeval;
cSocksVersion : byte;
iSelectResult : integer;
loop : integer;
ulVal : u_long;
swapBuffer : array[0..4096*16-1] of char;
iRecvResult : integer;
begin
s := TSOCKET(pParam);
tunnelSock := 0;
loop := 0;
while loop=0 do
begin
inc(loop);
iConnectResult := 0;
iReceiveRes := 0;
iSocketsSet := 0;
FD_ZERO(fds_read);
FD_SET(s, fds_read);
tv.tv_sec := 30;
cSocksVersion := 0;
iSelectResult := select(0, @fds_read, nil, nil, @tv);
if (iSelectResult=SOCKET_ERROR) or (not iSelectResult>0) then break;
ulVal := 0;
ioctlsocket(s, FIONBIO , ulVal);
iReceiveRes := recv(s, cSocksVersion, 1, MSG_PEEK);
if cSocksVersion=4 then // 3333333333333333333
begin
iReceiveRes := recv(s, socks4Request, sizeof(socks4Request), 0);
if iReceiveRes=SOCKET_ERROR then break;
ulVal := 1;
ioctlsocket(s, FIONBIO , ulVal);
FlushRecvBufferUntil(s, #0);
if socks4Request.ucCommand = 1 then
begin // 2222222222222222222
ulVal := 0;
ioctlsocket(s, FIONBIO, ulVal);
remoteAddr.sin_family := AF_INET;
move(socks4Request.dwDestIp,remoteAddr.sin_addr,sizeof(remoteAddr.sin_addr));
remoteAddr.sin_port := socks4Request.wDestPort;
tunnelSock := socket(AF_INET, SOCK_STREAM, 0);
iConnectResult := connect(tunnelSock, remoteAddr, sizeof(remoteAddr));
if (iConnectResult<>SOCKET_ERROR) then
begin // 1111111111
socks4Response.ucCommand := 90;
socks4Response.ucVersion := 0;
send(s, socks4Response, sizeof(socks4Response), 0);
end else break; // 1111111111
end else break;// 2222222222222222222
end else break;// 3333333333333333333
ulVal := 0;
ioctlsocket(tunnelSock, FIONBIO, ulVal);
ioctlsocket(s, FIONBIO, ulVal);
fillchar(swapBuffer,sizeof(swapBuffer),0);
tv.tv_sec := 2;
while true do // 4444444444444444
begin
FD_ZERO(fds_read);
FD_SET(s, fds_read);
FD_SET(tunnelSock, fds_read);
iSocketsSet := select(0, @fds_read, nil, nil, @tv); //if (iSocketsSet == SOCKET_ERROR) _leave;
if iSocketsSet > 0 then // 5555555555555555
begin
if FD_ISSET(s, fds_read) then
begin
iRecvResult := recv(s, swapBuffer, sizeof(swapBuffer), MSG_PEEK);
if (iRecvResult=0)
then break
else iRecvResult := recv(s, swapBuffer, sizeof(swapBuffer), 0);
if (iRecvResult <> SOCKET_ERROR) and (iRecvResult > 0)
then send(tunnelSock, swapBuffer, iRecvResult, 0)
else BREAK;
end;
if (FD_ISSET(tunnelSock, fds_read)) then
begin
iRecvResult := recv(tunnelSock, swapBuffer, sizeof(swapBuffer), MSG_PEEK);
if iRecvResult = 0
then break
else iRecvResult := recv(tunnelSock, swapBuffer, sizeof(swapBuffer), 0);
if (iRecvResult <> SOCKET_ERROR) and (iRecvResult > 0)
then send(s, swapBuffer, iRecvResult, 0)
else break;
end;
end; // 5555555555555555
end; // 4444444444444444
end; // while loop=0 do
closesocket(s);
closesocket(tunnelSock);
end;
begin
WSAStartup(MAKEWORD(2,0), wsaData);
l_sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sock4.sin_family := AF_INET;
sock4.sin_port := htons(1080);
sock4.sin_addr.s_addr := INADDR_ANY;
Size := SizeOf(Client);
if (Bind(l_sock,sock4,SizeOf(sock4))=0) and (Listen(l_sock,$FF)=0) then
while true do CreateThread(nil,0,@SocksHandlerTreadProc,Pointer(accept(l_sock, @Client, @Size)),0,h1);
end.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|