Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.03.2020, 00:07
Gareth Gareth вне форума
Начинающий
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 164
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Проблема с проверкой прокси на валидность в потоках

Доброе время суток...
Спаял я прокси чекер по уроку на ютабе..
У человека на видео всё работает. Рабочие прокси помечаются good, плохие bad..
У меня же все прокси помечаются как bad.
Не могли бы вы мне помочь, где я допустил ошибку?
Прокси - SOCKS. Нашёл в интернете, из разных источников, всего их у меня 115 шт.
И все без исключений помечаются как bad.
В потоках стоит условие, если гет запрос сработал, значит прокся валидная, и переменной rez присваивается 1.
В противном случае rez = -1

На форме 2 кнопки(старт, стоп), 1 трэкбар(количество потоков) и 1 мемо, в который выводится прокси, без пометки - гуд, с пометкой - бэд.
В общем вот весь код программы:
Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, sMemo, Vcl.ComCtrls, sTrackBar, Vcl.Buttons,
  sSpeedButton, httpsend, System.SyncObjs;

type
  TForm1 = class(TForm)
    sSpeedButton1: TsSpeedButton;
    sSpeedButton2: TsSpeedButton;
    sSpeedButton3: TsSpeedButton;
    sTrackBar1: TsTrackBar;
    sMemo1: TsMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure sSpeedButton2Click(Sender: TObject);
    procedure sSpeedButton3Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;


type
  th = class(TThread) // поток
  private
    { Private declarations }
    IP, Port: string;
    rez: Integer; // результат, принимает либо 1-гуд, либо -1-бэд
  public
    CurProxy: Integer; // переменная, для передачи потоку номера строки в стринглисте
    http: THTTPSend;
    { Public declarations }
    procedure Sync;
  protected
    procedure execute; override;

  end;


var
  Form1: TForm1;
  Proxys: TStringList;  // стринглист
  Proxy, thread: Integer; 
  WORK: Boolean;
  CS: TCriticalSection; // критическая секция
  

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Proxys := TStringList.Create;
  CS := TCriticalSection.Create;
  Proxys.LoadFromFile('c:/ProxySocks5.txt'); // загружаю прокси в стринглист
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(Proxys);
  FreeAndNil(CS);
end;

procedure TForm1.sSpeedButton2Click(Sender: TObject);
begin
  Proxy := -1; // -1, так как в потоке она будет увеличиваться, и начнется с 0
  WORK := True; // для работы потока
  for thread := 1 to sTrackBar1.Position do // количество потоков
  begin
    th.Create(False);
  end;
end;

procedure TForm1.sSpeedButton3Click(Sender: TObject);
begin
WORK := False; // остановить потоки
end;

{ TMyThread }

procedure th.execute;
begin
  while WORK do
  begin
    CS.Enter;
    Inc(Proxy);
    if Proxy < Proxys.Count then
    begin
      CurProxy := Proxy;
    end
    else
    begin
      WORK := False;
    end;
    CS.Leave;
    { ----------------------------------- }
    if WORK then
    begin
      http := THTTPSend.Create;
      IP := Copy(Proxys[CurProxy], 1, Pos(':', Proxys[CurProxy]) - 1);   // копируем айпи из строки в стринглисте
      Port := Copy(Proxys[CurProxy], Pos(':', Proxys[CurProxy]) + 1, Length(Proxys[CurProxy])); // копируем порт из строки в стринглисте
      http.Sock.SocksIP := IP; 
      http.Sock.SocksPort := Port;
      http.Document.Clear;
      http.Headers.Clear;
      http.Sock.SocksTimeout := 2000;
      http.Sock.SocksResolver := false;
      http.Protocol := '1.1';
      if http.HTTPMethod('get', 'https://google.ru') then  // если запрос прошёл, значит прокся валидная
      begin
        rez := 1; // если валидная то присваиваем 1
      end
      else
      begin
        rez := -1;  // если не валидная то -1
      end;
      http.Free;
      Synchronize(Sync); 
    end;

  end;

end;

procedure th.Sync;
begin
  case rez of
    1:
      begin
        Form1.sMemo1.Lines.Add(IP + ':' + Port);  // валид
      end;
    -1:
      begin
       Form1.sMemo1.Lines.Add('BAD  ' + IP + ':' + Port); // не валид
      end;
  end;
end;

end.

Мои прокси - ProxySocks5.txt

Последний раз редактировалось Gareth, 11.03.2020 в 00:11.
Ответить с цитированием
  #2  
Старый 11.03.2020, 16:45
Gareth Gareth вне форума
Начинающий
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 164
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

помогитее)
Ответить с цитированием
  #3  
Старый 11.03.2020, 19:46
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,560
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, для начала убираем установку проксей и проверяем, что код вообще работает.
Потом смотрим, а у тебя действительно SOCKS прокси в списке? А порты у тебя открыты соответсвующие (на компе и на роутере)? Т.е. берем ручками один адрем и пробуем telnet'ом зайти по нужному порту.
Если все ок, то взгляни вот тут: https://stackoverflow.com/questions/...-tidwhois?rq=1
Не уверен, что это для той версии, там были изменения, но попробовать стоит.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Gareth (11.03.2020)
  #4  
Старый 11.03.2020, 21:07
Gareth Gareth вне форума
Начинающий
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 164
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Ну, для начала убираем установку проксей и проверяем, что код вообще работает.
Потом смотрим, а у тебя действительно SOCKS прокси в списке? А порты у тебя открыты соответсвующие (на компе и на роутере)? Т.е. берем ручками один адрем и пробуем telnet'ом зайти по нужному порту.
Если все ок, то взгляни вот тут: https://stackoverflow.com/questions/...-tidwhois?rq=1
Не уверен, что это для той версии, там были изменения, но попробовать стоит.
Эмм... я искал именно соксы, socks5.
а какой именно порт нужно открыть?

Я немного не понял, мне что нужно открыть все порты, которые юзаются в проксях? их же может быть тысячи...

Последний раз редактировалось Gareth, 11.03.2020 в 23:56.
Ответить с цитированием
  #5  
Старый 12.03.2020, 18:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,560
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Скорее всего нет. Просто надо проверить, для того, что бы быть увереным, что ничего не мешает. Попробуй подключиться через telnet. Если подключение проходит, то ничего не мешает и можно уже проверять свой код. На эту тему см вот этот пост: https://stackoverflow.com/questions/...p-socks-socks5
Там, вроде, у чувака все работает (у него проблема в другом).
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Gareth (12.03.2020)
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:04.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2020

ВКонтакте   Facebook   Twitter