
10.06.2007, 10:36
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
2 [krot] НУ дык если инет браузер - это жестоко, т.к. траф идет хороший, да и скорость не очень. Winsock и всю будет рульно. Сори за юзанье WS2 (просто тупая привычка со времен написания снифера) Вот кусок кода:
Код:
uses winsock2;
var
WSAData:TWSAData;
socket_id:array[1..100] of dword;
tout:array[1..100] of boolean;
procedure timeouts(wnd:hwnd;uMsg:UINT;id:UINT;dwtime:dword);stdcall;
begin
tout[id]:=true;
closesocket(socket_id[id]);
end;
function send_packs(id:dword;ip:string; port:word; send_buf:string; var recv_buf:string):integer;
var
SockAddrIn: TSockAddrIn;
tmp_buf:array[1..1024] of char;
len:longint;
begin
result:=-10;
socket_id[id]:=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if socket_id[id]=WINDOWS.INVALID_HANDLE_VALUE then exit;
SockAddrIn.sin_family := AF_INET;
SockAddrIn.sin_port := htons(port);
SockAddrIn.sin_addr.s_addr := inet_addr(Pansichar(ip));
result:=-20;
if Connect(socket_id[id], @SockAddrIn, SizeOf(SockAddrIn))<>0 then exit;
tout[id]:=false;
windows.SetTimer(form1.Handle,id,timeout,@timeouts);
send(socket_id[id],send_buf[1],length(send_buf),0);
recv_buf:='';
repeat
len:=recv(socket_id[id],tmp_buf,1024,0);
recv_buf:=recv_buf+copy(tmp_buf,1,len);
until len<=0;
killtimer(form1.Handle,id);
result:=-30;
if tout[id]=true then exit;
result:=length(recv_buf);
closesocket(socket_id[id]);
end;
-.-.-.-.-.-.-.-
procedure hz;
var
buf_send,buf_recv:string;
proxy_port:word;
proxy_ip:string;
begin
if WSAStartup($202, WSAData)=-1 then
begin
memolog.Lines.Add('Ошибка WSAStarup');
exit;
end;
buf_send:=
'GET http://kuk.ru/login.php HTTP/1.0'+#13#10+
'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*'+#13#10+
'Accept-Language: ru'+#13#10+
'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.8 (build 01705))'+#13#10+
'Host: kuku.ru'+#13#10+
'Proxy-Connection: close'+#13#10#13#10;
case send_packs(id,proxy_ip,proxy_port,buf_send,buf_recv) of
-10:begin
form1.memolog.Lines.Add('ID: '+inttostr(id)+' Ошибка создания сокета');
end;
-20:begin
form1.memolog.Lines.Add('ID: '+inttostr(id)+' '+proxy_ip+' > дохлый');
proxy[bp].bad:=true;
end;
-30:begin
if length(buf_recv)<1000 then begin
proxy[bp].bad:=true;
form1.memolog.Lines.Add('ID: '+inttostr(id)+' '+proxy_ip+' > TIME OUT');
end;
end;
0:begin
proxy[bp].bad:=true;
form1.MemoLog.Lines.Add('ID: '+inttostr(id)+' '+proxy_ip+' > Ошибка прокси');
end;
end;
end;
Код простой. Подогнан специально под многопаточность.
id - номер потока
максимум потоков - 100
proxy_ip - ip адресс HTTP прокси сервера
proxy_port - порт прокси сервера.
|
|
|