Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Не получается соединиться через SOCKS5 FTP


Автор: TechnoMag 22.7.2012, 10:41
Выполнение FTPClient.Sock.SocksOpen; приводит к выдаче таких сообщений.

Код

10038,Socket operation on nonsocket
10022,Invalid argument
10060,Connection timed out


Пробовал соединиться через Total Commander - все работает.
Еще не понятно в каком порядке производить соединение: сначала socks5 потом FTP, или FTP потом socks5?

Код

procedure TForm1.checkBoxConnectClick(Sender: TObject);
// подключение/отключение к серверу
begin
  LoggedOn := checkBoxConnect.Checked;
 
  ClearAllEdits;
  if LoggedOn=false then
  begin
  // отключение от сервера
      FTPClient.Logout;
      FTPClient.Username := '';
      FTPClient.Password := '';
      FTPClient.TargetHost := '';
      //LoggedOn:=false;
      checkBoxConnect.Caption := 'Подключиться к серверу';
      StatusBar1.SimpleText:='Отключен.';
      //checkBoxConnect.Enabled := true;
  end
  else
  begin
    // подключение к серверу
      Memo1.Lines.Clear;
      FTPClient.Username := editUserName.Text;
      FTPClient.Password := editPassword.Text;
      FTPClient.TargetHost := editHostName.Text;
      FTPClient.PassiveMode := UsePassiveMode;
 
      if checkBoxUseProxy.Checked then
        begin
//        FTPClient.FWHost:=editProxyHostName.Text;
//        FTPClient.FWPort:=editProxyPort.Text;
        FTPClient.Sock.OnStatus := OnSocketStatus;
        FTPClient.Sock.SocksType := ST_Socks5;
        FTPClient.Sock.SocksIP := editProxyHostName.Text;
        FTPClient.Sock.SocksPort := editProxyPort.Text;
        FTPClient.Sock.SocksResolver := true;
        FTPClient.Sock.SocksUsername := '';
        FTPClient.Sock.SocksPassword := '';
        FTPClient.Sock.SocksOpen;
        //FTPClient.Sock.Connect(editProxyHostName.Text, editProxyPort.Text);
      end;
 
      if FTPClient.Login=true then
      begin
        //LoggedOn:=true;
 
        StatusBar1.SimpleText:='Подключен.';
        checkBoxConnect.Caption := 'Отключиться от сервера';
      end
      else
      begin
        //LoggedOn:=false;
        StatusBar1.SimpleText:='Отключен.';
        checkBoxConnect.Caption := 'Подключиться к серверу';
      end;
  end;
end;

Автор: TechnoMag 22.7.2012, 17:44
Дополнение к вопросу:
Тестирую на локальном FTP-сервере FileZilla. Socks5 создаю при помощи консольной утилиты bouncer.exe с такими аргументами: --port 1080 --socks5 --bind 127.0.0.2 --s_user user --s_password password
 При выполнении метода FTPClient.Sock.SocksOpen программа выдает ошибку:
Код

10038,Socket operation on nonsocket
10022,Invalid argument
10060,Connection timed out

127.0.0.2:1080
127.0.0.2:1080
IPv4
127.0.0.2:1080
4
2
15
2
10
158
127.0.0.1:21
220-FileZilla Server version 0.9.41 beta
220-written by Tim Kosse ([email protected])
220 Please visit http://sourceforge.net/projects/filezilla/
16
USER TechnoMag
37
331 Password required for technomag
12
PASS 31337
15
230 Logged on
8
TYPE I
19
200 Type set to I
8
STRU F
33
200 Using file structure 'File'
8
MODE S
20
200 MODE set to S.
8
REST 0
37
350 Rest supported. Restarting at 0
8
REST 1
37
350 Rest supported. Restarting at 1
8
REST 0
37
350 Rest supported. Restarting at 0


При этом bouncer.exe в консоль пишет:
Код

[17:39.53] [1] Accepted Connection From 127.0.0.1:53000
[17:39.53] [1] Attempting To Connect To 127.0.0.1:21
[17:39.53] [1] Successfully Connected To 127.0.0.1:21


Если закомментировать FTPClient.Sock.SocksOpen; вывод такой:

Вывод в консоль bouncer.exe
Код

[17:37.06] [1] Accepted Connection From 127.0.0.1:52985
[17:37.06] [1] Attempting To Connect To 127.0.0.1:21
[17:37.06] [1] Successfully Connected To 127.0.0.1:21


Вывод моего FTP-клиента
Код

127.0.0.2:1080
127.0.0.2:1080
IPv4
127.0.0.2:1080
4
2
15
2
10
158
127.0.0.1:21
220-FileZilla Server version 0.9.41 beta
220-written by Tim Kosse ([email protected])
220 Please visit http://sourceforge.net/projects/filezilla/
16
USER TechnoMag
37
331 Password required for technomag
12
PASS 31337
15
230 Logged on
8
TYPE I
19
200 Type set to I
8
STRU F
33
200 Using file structure 'File'
8
MODE S
20
200 MODE set to S.
8
REST 0
37
350 Rest supported. Restarting at 0
8
REST 1
37
350 Rest supported. Restarting at 1
8
REST 0
37
350 Rest supported. Restarting at 0


Не знаю чему верить.
Для получения сообщений от FTP-сервера использовались обработчики:
FTPClient.Sock.OnStatus := OnSocketStatus;
FTPClient.OnStatus := OnStatus;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)