ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Как правильно работать с http прокси?
  #1  
Старый 26.01.2009, 15:50
Аватар для _nic
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию Как правильно работать с http прокси?

Допустим http заголовок отсылается через сокет а в сокете задается и и порт хттп прокси.Как в этом случае обрабатывать исключительные ситуации возникающие с проксей?
к примеру если прокси берутся из списка и какая то прокся в этом списке уже сдохла,или это просто не прокся, как это отловить?
Или я вот недавно пытался получать содержимое хтмл страницы через прокси ,только получалось в 3 из 5 раз.Иногда бывало такое запрос отослался recv вроде как что принимает но в буффере пусто Почему так случается и как это можно предупредить?
И где можно посмотреть ошибки которые может возвращять прокся?
 
Ответить с цитированием

  #2  
Старый 26.01.2009, 16:40
Аватар для RaX
RaX
Познающий
Регистрация: 07.06.2008
Сообщений: 48
Провел на форуме:
247923

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

На то, сдохла прокся или нет, можешь тупо проверку соединения делать. Чтобы узнать, что это проксик попробуй отсылать http запросы с различными методами для проверки типа OPTIONS, вроде должно помочь
 
Ответить с цитированием

  #3  
Старый 26.01.2009, 17:01
Аватар для slesh
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


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

Вообще перед юзаньем прокси попробуй пинговать её, чтобы не терять много времяни на коннект(код пинга - простой очень). Если пингуется то юзаешь её пока нужно. если вдруг connect не прошел то пингуй снова. если не пингуется то удаляй из списка.
На счет прокси или нет - Удобно очень проверять по контрольной странице. К примеру твой какойнить твой скрипт в инете котоырй будет говорить ОК. Ну или яндекс или подобные вещи. Главное чтобы ты точно знал что смог подключиться.

На счет recv принимает но буфер пуской. Может ты не правильно загружаешь данные? Или может возникнуть проблема с проверкой буфера если там попадется символ \0

НА счет кода ответа HTTP прокси то первое что шлет он это будет типа
HTTP/1.0 404 Not Found
Сам код можешь получить выбрав среднее слово. типа
s:='HTTP/1.0 404 Not Found....';
code:=inttostr(copy(s,pos(' ',s)+1,3));

Коды ответов сервера ищи в RFC2616 и RFC3143
 
Ответить с цитированием

  #4  
Старый 28.01.2009, 16:46
Аватар для _nic
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию

Цитата:
Сообщение от slesh  
Вообще перед юзаньем прокси попробуй пинговать её, чтобы не терять много времяни на коннект(код пинга - простой очень).
Простой ?Это тот который на сырых сокетах?
 
Ответить с цитированием

  #5  
Старый 28.01.2009, 17:09
Аватар для slesh
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


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

нет. стандартными функциями. В более развернутом виде это выглядит так:
Нижеследующий код с легкостью можно переписать в несколько десятков строк, без дополнительного использования левых модулей.
Код:
unit raw_ping;

interface
uses
  Windows, SysUtils, Classes;
// Типы данных для настройки пингования
type
TSunB = packed record
s_b1, s_b2, s_b3, s_b4: byte;
end;
TSunW = packed record
s_w1, s_w2: word;
end;
PIPAddr = ^TIPAddr;
TIPAddr = record
case integer of
 0: (S_un_b: TSunB);
 1: (S_un_w: TSunW);
 2: (S_addr: longword);
end;
IPAddr = TIPAddr;

type
 ip_option_information = record
  Ttl : byte;
  Tos : byte;
  Flags : byte;
  OptionsSize : byte;
  OptionsData : pointer;
end;

type
ICMP_ECHO_REPLY =
record
 Address : IPAddr;
 Status : ULONG;
 RoundTripTime : ULONG;
 DataSize : Word;
 Reserved : Word;
 Data : Pointer;
 Options : IP_OPTION_INFORMATION;
 PingBuf: array[0..31] of char;
end;


function IcmpCreateFile : THandle; stdcall; external 'icmp.dll';
function IcmpCloseHandle (icmpHandle : THandle) : boolean; stdcall; external 'icmp.dll'
function IcmpSendEcho (IcmpHandle : THandle; DestinationAddress : IPAddr;
    RequestData : Pointer; RequestSize : Smallint;
    RequestOptions : pointer;
    ReplyBuffer : Pointer;
    ReplySize : DWORD;
    Timeout : DWORD) : DWORD; stdcall; external 'icmp.dll';


function Ping(InetAddress : string) : boolean;// Пингует заданный адрес
procedure TranslateStringToTInAddr(AIP: string; var AInAddr);// Конвертирование адреса.

implementation

uses
  WinSock;

procedure TranslateStringToTInAddr(AIP: string; var AInAddr);// Конвертирование адреса
var
phe:PHostEnt;
pac:PChar;
GInitData:TWSAData;// для работы с библиотекой сокетов
begin
WSAStartup($101, GInitData);// Инит библиотеки сокетов
try
 phe:=GetHostByName(PChar(AIP));// получить адресс сервера по имени
 if Assigned(phe) then
   begin
    pac:=phe^.h_addr_list^;
    if Assigned(pac) then  // Конвертирование
      begin
        with TIPAddr(AInAddr).S_un_b do begin
          s_b1 := Byte(pac[0]);
          s_b2 := Byte(pac[1]);
          s_b3 := Byte(pac[2]);
          s_b4 := Byte(pac[3]);
        end;
      end
      else
      begin
        raise Exception.Create('Error getting IP from HostName');// если ошибка
      end;
    end
    else
    begin
      raise Exception.Create('Error getting HostName');
    end;
  except
    FillChar(AInAddr, SizeOf(AInAddr), #0);
  end;
  WSACleanup;
end;


function Ping(InetAddress : string) : boolean;// пингование
var
 Handle : THandle;// дискриптор
 InAddr : IPAddr;// Адресс для пингования
 DW:DWORD;//результат пингования
 Reply  : ICMP_ECHO_REPLY;// Буфер для получения ответа ответа
 PingBuf: array[0..31] of char;// Буфер для отправки
begin
  result := false;// установка что сервер не пингуется
  Handle := IcmpCreateFile;// Создание ICMP
  if Handle = INVALID_HANDLE_VALUE then exit; // Если ошибка, то выход
  TranslateStringToTInAddr(InetAddress, InAddr);// Конвертирование адреса
  Reply.Data := @pingBuf;// Естановка адреса буфера
  Reply.DataSize := 32;// Установка размера бофера
  DW:=IcmpSendEcho(Handle, InAddr, @PingBuf, 32, nil, @reply, SizeOf(icmp_echo_reply)+32  , 3000);// Полыска эхо запроса
  if DW <> 0 then result:=true;// Если !=0 то значит сервак пингуется. Установки пингуеости
  exit;// выход
 // IcmpCloseHandle(Handle); // только для win 9x
end;

end.
 
Ответить с цитированием

  #6  
Старый 28.01.2009, 17:23
Аватар для _nic
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию

Цитата:
Сообщение от slesh  
нет. стандартными функциями. В более развернутом виде это выглядит так:
Нижеследующий код с легкостью можно переписать в несколько десятков строк, без дополнительного использования левых модулей.
А на С примерчик есть?
 
Ответить с цитированием

  #7  
Старый 28.01.2009, 18:18
Аватар для slesh
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


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

функцию резолва (TranslateStringToTInAddr) можеш найти где угодно на Сях.
А функцию Ping перевести на Си не составит труда. Она и так маленькая и там не используется некаких дельфийских прибамбасов
 
Ответить с цитированием

  #8  
Старый 28.01.2009, 19:05
Аватар для _nic
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию

IcmpCreateFile и IcmpSendEcho в потоках можно юзать без проблем?
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кому и как правильно пить воду!!! bobob Болталка 6 19.05.2009 18:09
Как обойти лимит и поиметь прокси сервер? cric.cric Безопасность 3 12.02.2009 18:05
[Linux] Как заставить работать произвольное приложение через прокси? pento Анонимность 7 04.12.2008 19:24



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


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




ANTICHAT.XYZ