扭曲的DTPFactory超时

问题描述 投票:0回答:1

我正在尝试使用twisted 设置一个简单的 FTP 服务器:

sudo venv/bin/twistd ftp -p 21 -r /home/ftpuser/ftproot/ --auth file:/home/ftpuser/pass.dat

当我从 Mac 上运行它时,它运行得很好。但是当我在 ubuntu 机器上运行twisted FTP 时遇到这个错误。知道可能是什么原因造成的吗?

[twisted.scripts._twistd_unix.UnixAppLogger#info] reactor class: twisted.internet.epollreactor.EPollReactor.
[-] FTPFactory starting on 21
[twisted.protocols.ftp.FTPFactory#info] Starting factory <twisted.protocols.ftp.FTPFactory instance at 0x7f5d31173f80>
[FTP (ProtocolWrapper),0,100.35.194.233] DTPFactory.setTimeout set to 10 seconds
[FTP (ProtocolWrapper),0,100.35.194.233] DTPFactory starting on 38688
[twisted.protocols.ftp.DTPFactory#info] Starting factory <twisted.protocols.ftp.DTPFactory instance at 0x7f5d311712d8>
[-] timed out waiting for DTP connection
[-] Unexpected FTP error
[-] Unhandled Error
    Traceback (most recent call last):
    Failure: twisted.protocols.ftp.PortConnectionError: DTPFactory timeout
python ftp twisted
1个回答
0
投票

我在 docker 容器内运行时遇到了同样的问题,并通过向 FTP 工厂添加被动端口范围找到了解决方案。

p = Portal(CustomFTPRealm(root), [AllowAnonymousAccess()])
f = FTPFactory(p)

f.passivePortRange = range(50000, 50010) # add port range

reactor.listenTCP(port, f)
reactor.run()

此外,我需要在

Dockerfile

中声明暴露的端口
EXPOSE 21
EXPOSE 50000-50010

如果您使用

docker-compose.yml
,请不要忘记传递端口范围。

ports:
      - "2121:2121"
      - "50000-50010:50000-50010"
© www.soinside.com 2019 - 2024. All rights reserved.