V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
oska874
V2EX  ›  Python

访问 pyftpdlib 搭建的 ftp server 遇到些问题

  •  
  •   oska874 · 2015-09-28 16:06:25 +08:00 · 2705 次点击
    这是一个创建于 3143 天前的主题,其中的信息可能已经有所发展或是发生改变。
    先上代码
    ```
    def main():
    # Instantiate a dummy authorizer for managing 'virtual' users
    authorizer = DummyAuthorizer()
    # Define a new user having full r/w permissions
    authorizer.add_user('', '','d:/dd/cc', perm='elradfmwM')
    # Define a read-only anonymous user
    authorizer.add_anonymous('d:/dd/cc')

    # Instantiate FTP handler class
    handler = FTPHandler
    handler.authorizer = authorizer

    # Define a customized banner (string returned when client connects)
    handler.banner = "Welcome to Jayvic's FTP."

    # Instantiate FTP server class and listen on 127.0.0.1:21
    address = ('192.168.0.159', 21)
    server = FTPServer(address, handler)

    # set a limit for connections
    server.max_cons = 256
    server.max_cons_per_ip = 5

    # start ftp server
    server.serve_forever()
    ```
    遇到两个问题:
    1. address = ('192.168.0.159', 21) 这里面的 ip 配置成啥,就必须用对应的 ip 访问,如果设置成了 127.0.0.1 就不能用 192 的 ip 访问,反之亦然,这个怎么回事?有什么办法解决

    2. 我试过在 windows 下搭建,然后在 192 网内( linux/win )访问都正常,但是在虚拟机( ip 是 10.0.0.15 )可以访问到,但是不能连接,提示错误: 501 Rejected data connection to foreign address 10.0.2.15:36606.。 这个怎么解决?
    4 条回复    2015-09-28 17:06:15 +08:00
    oott123
        1
    oott123  
       2015-09-28 16:25:37 +08:00 via Android
    配置成 0.0.0.0
    oska874
        2
    oska874  
    OP
       2015-09-28 16:36:08 +08:00
    @oott123 想起来,和 socket 一样。第一个问题解决了,但是第二个还是不行。
    题外话,原始的 tftp 客户端(如 ie )不能访问 ftp server ,原始的 ftp 客户端(如 linux 的 ftp 命令)不能访问 tftp server 吗?
    BOYPT
        3
    BOYPT  
       2015-09-28 17:05:25 +08:00
    1. 基础的 socket bind 问题,你要绑定到 0.0.0.0 上才能所有地址访问到。
    2. FTP 工作模式问题。默认情况下 ftp 客户端是主动模式的,需要服务器主动链接客户端发送数据。
    你虚拟机的 ip 是经过了 NAT , 数据链接无法建立;因此你需要让客户端发送被动模式指令,让服务器端在一个新建数据端口监听,然后客户端重新建立数据连接。(其实你只需让客户端用被动模式即可)
    BOYPT
        4
    BOYPT  
       2015-09-28 17:06:15 +08:00
    @oska874 tftp 和 ftp 是两种不同的协议,不能兼容。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4142 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 05:14 · PVG 13:14 · LAX 22:14 · JFK 01:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.