ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Загрузка файла из инета.
  #1  
Старый 26.11.2009, 17:26
Proger10
Познающий
Регистрация: 19.12.2008
Сообщений: 78
Провел на форуме:
184907

Репутация: 13
Отправить сообщение для Proger10 с помощью ICQ
По умолчанию Загрузка файла из инета.

Вопрос конечно не первый раз задается, но что нашел или не работает или еше что-нибудь. Ну так как сделать сабж, IdHTTP не предлагать!!
 
Ответить с цитированием

  #2  
Старый 26.11.2009, 17:36
Nightmarе
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме:
5749763

Репутация: 1680


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

Код:
// Закачка файла на комп
function DownloadToComp(const fileURL, FileName: string): boolean;
const
  BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array[1..BufferSize] of Byte;
  BufferLen: DWORD;
  f: file;
begin
  Result := False;
  hSession := InternetOpen(nil, INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
  try
    hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
    try
      AssignFile(f, FileName);
      Rewrite(f,1);
      repeat
        InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
        BlockWrite(f, Buffer, BufferLen);
      until
        BufferLen = 0;
      CloseFile(f);
      Result := True;
    finally
      InternetCloseHandle(hURL);
    end;
  finally
    InternetCloseHandle(hSession);
  end;
end;
вызываешь так:
DownloadToComp('http://lol.ru/file.exe','C:\file.exe');
И не забудь в uses вписать APIшку WinInet
 
Ответить с цитированием

  #3  
Старый 27.11.2009, 00:35
Ins3t
Участник форума
Регистрация: 18.07.2009
Сообщений: 272
Провел на форуме:
2083691

Репутация: 330
По умолчанию

2Nightmarе, не проще ли воспользоваться API функцией UrlDownloadToFile()
 
Ответить с цитированием

  #4  
Старый 27.11.2009, 06:14
Nightmarе
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме:
5749763

Репутация: 1680


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

можно и так, но антивири будут ругаться на апишку urlmon.
вот подумай ©
 
Ответить с цитированием

  #5  
Старый 27.11.2009, 15:45
Proger10
Познающий
Регистрация: 19.12.2008
Сообщений: 78
Провел на форуме:
184907

Репутация: 13
Отправить сообщение для Proger10 с помощью ICQ
По умолчанию

2Ins3t, в моем случае не проще.
2Nightmarе, спасибо, то что надо!
А еше некто не поделится как проверить наличие возможности подключения к серверу по определенному порту(80)?? Желетельно через WinInet.
 
Ответить с цитированием

  #6  
Старый 27.11.2009, 20:20
Nightmarе
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме:
5749763

Репутация: 1680


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

вот как раз через WinInet помоему и невозможно (хотя скорее всего нагло вру), ибо там функция проверки DialUp соединения, а если у юзверя через сетевую карту, то он активность всегда будет показывть онлайн.
 
Ответить с цитированием

  #7  
Старый 28.11.2009, 10:55
Proger10
Познающий
Регистрация: 19.12.2008
Сообщений: 78
Провел на форуме:
184907

Репутация: 13
Отправить сообщение для Proger10 с помощью ICQ
По умолчанию

Вот попытался сделать через winsAck:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  WSAData: TWSAData;
  S: TSocket;
  SockAddrIn: TSockAddr;
  Timeout: TTimeVal;
begin
  if WSAStartup($101, WSAData)<>0 then
    exit;
  SockAddrIn.sin_family:=AF_INET;
  SockAddrIn.sin_addr.S_addr:=inet_addr(pchar(Edit1.Text));
  S:=socket(AF_INET,SOCK_STREAM,0);
  if S=INVALID_SOCKET then
    Exit;
  Timeout.tv_usec := 0;
  Timeout.tv_sec := 1000;
  setsockopt(S, SOL_SOCKET, SO_RCVTIMEO, @Timeout, sizeof(TTimeVal));
  SockAddrIn.sin_port:=htons(StrToInt(Edit2.Text));
  if connect(S, SockAddrIn, sizeof(SockAddrIn))=0 Then
  begin
    ShowMessage('Тут кто-то есть!');
  end
  else
  begin
    ShowMessage('Никого нет!');
  end;
end;
Если на порте кто-то есть, то все отлично программа вполне быстро сообщает об этом, а если там никого нет, то проходит секунд десять до соответствующего сообшения, попытался добаввить таймаут - нифига не получилось.. Что не так??
 
Ответить с цитированием

  #8  
Старый 29.11.2009, 09:19
Proger10
Познающий
Регистрация: 19.12.2008
Сообщений: 78
Провел на форуме:
184907

Репутация: 13
Отправить сообщение для Proger10 с помощью ICQ
По умолчанию

Где то прочитал что в Индюке эта проблема решается с помощю второго потока, сделал - вроде получилось.
Unit1:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, WinSock, ExtCtrls, Unit2;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    CanConnect: boolean;
    CanConnectChanged: boolean;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  CanConnect:=False;
  Ping:= TPingThread.Create(True);
  Ping.IP:=Edit1.Text;
  Ping.Port:=StrToInt(Edit2.Text);
  Ping.Suspended:=False;
  for I := 1 to 1000 do
  begin
    Sleep(1);
    Application.ProcessMessages;
  end;
  if not CanConnectChanged then
  begin
    Ping.Suspended:=True;
    CanConnect:=False;
  end;
  if Canconnect then
    ShowMessage('We are TRUE!!')
  else
    ShowMessage('We are FALSE!!');
end;


end.
Unit2:
Код:
unit Unit2;

interface

uses
  Classes, WinSock;

type
  TPingThread = class(TThread)
    IP: string;
    Port: integer;
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;

var
  Ping: TPingThread;

implementation

uses Unit1;

{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure TPingThread.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ TPingThread }

procedure TPingThread.Execute;
var
  WSAData: TWSAData;
  S: TSocket;
  SockAddrIn: TSockAddr;
begin
  if WSAStartup($101, WSAData)<>0 then
    exit;
  SockAddrIn.sin_family:=PF_INET;
  SockAddrIn.sin_addr.S_addr:=inet_addr(pchar(IP));
  S:=socket(AF_INET,SOCK_STREAM,0);
  if S=INVALID_SOCKET then
    Exit;
  SockAddrIn.sin_port:=htons(Port);
  if connect(S, SockAddrIn, sizeof(SockAddrIn))=0 Then
  begin
    Form1.CanConnectChanged:=True;
    Form1.CanConnect:=True;
  end
  else
  begin                           
    Form1.CanConnectChanged:=True;
    Form1.CanConnect:=False;
  end;
end;

end.
Низнаю правельно ли так делать!
 
Ответить с цитированием

  #9  
Старый 29.11.2009, 13:32
Nightmarе
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме:
5749763

Репутация: 1680


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

Вот тебе правильный и рабочий код на индюке:

В uses добавляешь: IdMultipartFormData, IdHTTP
А далее функция:
Код:
function DownloadToComp(const fileURL, FileName: string):string;
var
postdownloadhttp:TidHTTP;
d:TIdMultiPartFormDataStream;
begin
postdownloadhttp:=TidHTTP.create(nil);
d:=TIdMultiPartFormDataStream.Create;
d.AddFile('userfile',FileName,'file');
try
postdownloadhttp.Post(fileURL+'?',d);
d.Free;
except
postdownloadhttp.Disconnect;
d.Free;
end;
postdownloadhttp.Free;
end;
работает по аналогии с вин инетом, только через пернатого.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процесс создания программного обеспечения для распределенных вычислений (С++). c0n Difesa Авторские статьи 9 09.06.2009 16:33
[php] загрузка файла через fsockopen Don1=2 Болталка 3 13.02.2009 04:35
ядовитый нуль в PHP или загрузка произвольного файла в PunBB, phpBB ShAnKaR Форумы 19 13.09.2006 17:46



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ