|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проблема с проверкой прокси на валидность в потоках
Доброе время суток...
Спаял я прокси чекер по уроку на ютабе.. У человека на видео всё работает. Рабочие прокси помечаются 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
|
|||
|
|||
помогитее)
|
#3
|
|||
|
|||
Ну, для начала убираем установку проксей и проверяем, что код вообще работает.
Потом смотрим, а у тебя действительно SOCKS прокси в списке? А порты у тебя открыты соответсвующие (на компе и на роутере)? Т.е. берем ручками один адрем и пробуем telnet'ом зайти по нужному порту. Если все ок, то взгляни вот тут: https://stackoverflow.com/questions/...-tidwhois?rq=1 Не уверен, что это для той версии, там были изменения, но попробовать стоит. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Gareth (11.03.2020)
|
#4
|
|||
|
|||
Цитата:
а какой именно порт нужно открыть? Я немного не понял, мне что нужно открыть все порты, которые юзаются в проксях? их же может быть тысячи... Последний раз редактировалось Gareth, 11.03.2020 в 23:56. |
#5
|
|||
|
|||
Скорее всего нет. Просто надо проверить, для того, что бы быть увереным, что ничего не мешает. Попробуй подключиться через telnet. Если подключение проходит, то ничего не мешает и можно уже проверять свой код. На эту тему см вот этот пост: https://stackoverflow.com/questions/...p-socks-socks5
Там, вроде, у чувака все работает (у него проблема в другом). |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Gareth (12.03.2020)
|