Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #71, НОЯБРЬ 2004 г.

Live Update в X-стиле

[RU].Ban0K! (www.int3.net)

Хакер, номер #071, стр. 071-106-2


1). InternetGetConnectedState. Для начала мы должны узнать факт наличия и тип текущего соединения. На эти вопросы нам и ответит данная функция.

function InternetGetConnectedState(lpdwFlags: LPDWORD; dwReserved: DWORD): BOOL; stdcall;

Параметры:

lpdwFlags - комбинация флагов, которые дают полную картину подключения.

dwReserved - зарезервировано на будущее, must be zero.

Особо ленивые могут проверять только значение, возвращаемое функцией, это либо TRUE - онлайн, либо FALSE - оффлайн.

Пример вызова:

Status := InternetGetConnectedState(dwFlags,0);

2). InternetOpen. Эта функция открывает сессию связи и возвращает дескриптор соединения.

function InternetOpen(lpszAgent: PChar; dwAccessType: DWORD; lpszProxy, lpszProxyBypass: PChar; dwFlags: DWORD): HINTERNET; stdcall;

Параметры:

lpszAgent - имя браузера, который будет юзать этот дескриптор, к примеру MSIE или Opera. Я использую собственное имя агента для корректной идентификации PHP-скриптом (см. выше).

dwAccessType - тип требуемого доступа.

Функция будет вызываться следующим образом:

hSession:= InternetOpenA('AutoUpdate browser',INTERNET_OPEN_TYPE_PRECONFIG,0,0,0);

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

3). InternetOpenUrl. Данная функция отдаст нам дескриптор определенного Url.

function InternetOpenUrl(hInet: HINTERNET; lpszUrl: PChar; lpszHeaders: PChar; dwHeadersLength: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;

Параметры:

hInet - дескриптор интернет-сессии, открытый предыдущей функцией.

lpszUrl - собственно Url, должен начинаться на http:// в нашем случае (поддерживается еще ftp://, https://, gopher://)

lpszHeaders - набор заголовков, очень полезный параметр... который мы использовать не будем.

dwHeadersLength - длина lpszHeaders.

dwFlags и dwContext – очень обширные, судя по документации, параметры, но нам они сегодня не пригодятся. В нашем примере эта функция будет иметь вот такой вид:

hUrl := InternetOpenUrlA(hSes,'http://localhost/?q=GetVersion',0,0,0,0);

4). InternetReadFile. Функция читает файл, на который указывает передаваемый ей дескриптор.

function InternetReadFile(hFile: HINTERNET; lpBuffer: Pointer;

dwNumberOfBytesToRead: DWORD; var lpdwNumberOfBytesRead: DWORD): BOOL; stdcall;

Параметры:

hFile – дескриптор некого Url, полученный нами с помощью предыдущей функции.

lpBuffer - указатель на буфер, в который будет считан файл или часть файла.

dwNumberOfBytesToRead - количество считываемых байт.

lpdwNumberOfBytesRead - указатель на переменную, в которую будет помещено число считанных байт.

Назад на стр. 071-106-1  Содержание  Вперед на стр. 071-106-3