Проблемы пассивного FTP в Ruby (Windows NT Server - Net :: FTPReplyError, Net :: FTPProtoError)

У меня проблемы с использованием net / ftp для подключения к ftp-серверу Windows NT.

Кажется, у некоторых других клиентов возникают проблемы с подключением к этому серверу, но FileZilla не имеет никаких проблем.

Вот результаты отладки попытки подключения ruby:

[151] pry(main):1> ftp = Net::FTP.new(ftp_address)
=> #<Net::FTP:0x0000010e236fe0
 @binary=true,
 @debug_mode=false,
 @last_response="220 Microsoft FTP Service\n",
 @last_response_code="220",
 @logged_in=false,
 @mon_count=0,
 @mon_mutex=#<Mutex:0x0000010e236f90>,
 @mon_owner=nil,
 @open_timeout=nil,
 @passive=false,
 @read_timeout=60,
 @resume=false,
 @sock=#<Net::FTP::BufferedSocket io=#<TCPSocket:0x0000010e236f18>>>
[152] pry(#<Site>):1> ftp.debug_mode = true
=> true
[153] pry(#<Site>):1> ftp.passive = true      
=> true
[154] pry(#<Site>):1> ftp.login(ftp_user, ftp_password)      
put: USER <redacted>
get: 331 Password required for <redacted>.
put: PASS ********
get: 230 User logged in.
put: TYPE I
get: 200 Type set to I.
=> true
[155] pry(#<Site>):1> ftp.chdir("/")
put: CWD /
get: 250 CWD command successful.
=> nil
[156] pry(main):1> ftp.putbinaryfile("/Users/home/Desktop/testupload.csv")
put: PASV
get: 27 Entering Passive Mode (0,1,2,3,192,119)
Net::FTPReplyError: 27 Entering Passive Mode (0,1,2,3,192,119)
from /Users/home/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/net/ftp.rb:978:in `parse227'
[157] pry(main):1> ftp.putbinaryfile("/Users/home/Desktop/testupload.csv")
put: PASV
get: 
Net::FTPProtoError: 
from /Users/home/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/net/ftp.rb:329:in `getresp'

А вот результат работы filezilla:

Status: Resolving address of <redacted host>
Status: Connecting to <redacted ip>:21...
Status: Connection established, waiting for welcome message...
Response: 220 Microsoft FTP Service
Command:  USER <redacted>
Response: 331 Password required for <redacted>.
Command:  PASS ********
Response: 230 User logged in.
Command:  OPTS UTF8 ON
Response: 200 OPTS UTF8 command successful - UTF8 encoding now ON.
Status: Connected
Status: Retrieving directory listing...
Command:  PWD
Response: 257 "/" is current directory.
Status: Directory listing successful
Status: Resolving address of <redacted host>
Status: Connecting to <redacted ip>:21...
Status: Connection established, waiting for welcome message...
Response: 220 Microsoft FTP Service
Command:  USER <redacted>
Response: 331 Password required for <redacted>.
Command:  PASS ********
Response: 230 User logged in.
Command:  OPTS UTF8 ON
Response: 200 OPTS UTF8 command successful - UTF8 encoding now ON.
Status: Connected
Status: Starting upload of /Users/home/Desktop/testupload.csv
Command:  CWD /
Response: 250 CWD command successful.
Command:  TYPE I
Response: 200 Type set to I.
Command:  PASV
Response: 27 Entering Passive Mode (0,1,2,3,192,121)
Command:  STOR testupload.csv
Response: 150 Opening BINARY mode data connection.
Response: 226 Transfer complete.
Status: File transfer successful, transferred 97 bytes in 1 second
Status: Retrieving directory listing...
Command:  PASV
Response: 27 Entering Passive Mode (0,1,2,3,192,122)
Command:  LIST
Response: 150 Opening BINARY mode data connection.
Response: 226 Transfer complete.
Status: Directory listing successful

(обратите внимание, что в приведенных выше 27 строках входа в пассивный режим (0,1,2,3,192,122) 0,1,2,3 был IP-адресом сервера, к которому мы подключаемся).

Есть идеи, что может вызвать это? Я получал похожие (на ответ ruby) странные ответы FTP при использовании CyberDuck в качестве клиента.


person Jon    schedule 25.06.2014    source источник


Ответы (1)


FTP-сервер отправляет недопустимый ответ 27 Entering passive mode.... Ответ должен начинаться с 3-значного кода ответа, например правильный ответ в этом случае будет 227 Entering passive mode.... FileZilla просто лениво проверяет правильный ответ и поэтому принимает неправильный. Но сама проблема вызвана сервером.

person Steffen Ullrich    schedule 25.06.2014