带有错误配置的被动连接的Python ftplib

时间:2019-05-20 16:33:25

标签: python ftp ftplib ftps

我正在使用python3 ftplib.FTP_TLS类连接到外部FTP / FTPS服务器。在被动模式下建立连接后,服务器将使用内部网络IP地址(例如10.10.XX.XX)进行响应。

由于我不在网络内,因此无法使用提供的IP地址访问服务器,并且ftplib挂断。将FTPS连接设置为活动状态无效。

强制ftplib使用原始主机名或外部IP地址的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我使用的解决方案来自this article。您可以覆盖makepasv()方法以忽略返回的IP地址并使用原始主机:

class FTP_TLS_IgnoreHost(ftplib.FTP_TLS):
    def makepasv(self):
        _, port = super().makepasv()
        return self.host, port

ftp = FTP_TLS_IgnoreHost('host', 'user', 'password')

可能还有其他好的解决方案,但是我认为这很巧妙。