Показать сообщение отдельно

  #4  
Старый 10.06.2007, 10:36
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

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 - порт прокси сервера.
 
Ответить с цитированием