Как исправить ошибки сброса соединения в Python3 с помощью ftplib при попытке выполнить операции ftp - PullRequest
0 голосов
/ 28 июня 2019

Когда я вручную пытаюсь использовать ftp с теми же учетными данными, я могу успешно копировать файлы.Тем не менее, при попытке использовать любые FTP-команды ftplib я получаю ошибки сброса соединения ... Кто-нибудь знает почему?Процесс ниже.

Код Python:

from ftplib import FTP
ftp = FTP('10.10.10.10')
ftp.set_debuglevel(5)
ftp.set_pasv('false') #false by default
ftp.login('user','pass')
ftp.dir()
ftp.close()

log с уровнем отладки 5:

python3 ftp.py
*get* '230 Login successful.\n'
*resp* '230 Login successful.'
*cmd* 'TYPE A'
*put* 'TYPE A\r\n'
*get* '200 Switching to ASCII mode.\n'
*resp* '200 Switching to ASCII mode.'
*cmd* 'PASV'
*put* 'PASV\r\n'
Traceback (most recent call last):
  File "ftp.py", line 8, in <module>
    ftp.dir()
  File "C:\Users\\AppData\Local\Programs\Python\Python37\lib\ftplib.py", line 575, in dir
    self.retrlines(cmd, func)
  File "C:\Users\\AppData\Local\Programs\Python\Python37\lib\ftplib.py", line 468, in retrlines
    with self.transfercmd(cmd) as conn, \
  File "C:\Users\\AppData\Local\Programs\Python\Python37\lib\ftplib.py", line 399, in transfercmd
    return self.ntransfercmd(cmd, rest)[0]
  File "C:\Users\\AppData\Local\Programs\Python\Python37\lib\ftplib.py", line 359, in ntransfercmd
    host, port = self.makepasv()
  File "C:\Users\\AppData\Local\Programs\Python\Python37\lib\ftplib.py", line 337, in makepasv
    host, port = parse227(self.sendcmd('PASV'))
  File "C:\Users\\AppData\Local\Programs\Python\Python37\lib\ftplib.py", line 273, in sendcmd
    return self.getresp()
  File "C:\Users\\AppData\Local\Programs\Python\Python37\lib\ftplib.py", line 236, in getresp
    resp = self.getmultiline()
  File "C:\Users\\AppData\Local\Programs\Python\Python37\lib\ftplib.py", line 222, in getmultiline
    line = self.getline()
  File "C:\Users\\AppData\Local\Programs\Python\Python37\lib\ftplib.py", line 204, in getline
    line = self.file.readline(self.maxline + 1)
  File "C:\Users\\AppData\Local\Programs\Python\Python37\lib\socket.py", line 589, in readinto
    return self._sock.recv_into(b)
ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host

Вывод Windows ftp ниже ..

ftp -d -n 10.10.10.10
Connected to 10.10.10.10.
220 (vsFTPd 2.2.2)
---> OPTS UTF8 ON
200 Always in UTF8 mode.
ftp> user user
---> USER user
331 Please specify the password.
Password:
---> PASS pass
230 Login successful.
ftp> dir
---> PORT 172,24,198,16,5,52
200 PORT command successful. Consider using PASV.
---> LIST
150 Here comes the directory listing.
drwx--x--x    2 502      503         26624 Jul 01 17:00 dir1
drwx--x--x    2 502      503          6144 Jul 01 12:00 dir2
drwxr-xr-x    2 502      503          6144 Jul 02  2018 dir3
226 Directory send OK.
ftp: 205 bytes received in 0.01Seconds 17.08Kbytes/sec.
ftp> get dir1/file
---> PORT 172,24,198,16,5,77
200 PORT command successful. Consider using PASV.
---> RETR dir1/file
150 Opening BINARY mode data connection for dir1/file (55106 bytes).
226 Transfer complete.
ftp: 55106 bytes received in 0.17Seconds 318.53Kbytes/sec.
...