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

2015-09-28 16:06:25 +08:00
 oska874
先上代码
```
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.。 这个怎么解决?
2709 次点击
所在节点    Python
4 条回复
oott123
2015-09-28 16:25:37 +08:00
配置成 0.0.0.0
oska874
2015-09-28 16:36:08 +08:00
@oott123 想起来,和 socket 一样。第一个问题解决了,但是第二个还是不行。
题外话,原始的 tftp 客户端(如 ie )不能访问 ftp server ,原始的 ftp 客户端(如 linux 的 ftp 命令)不能访问 tftp server 吗?
BOYPT
2015-09-28 17:05:25 +08:00
1. 基础的 socket bind 问题,你要绑定到 0.0.0.0 上才能所有地址访问到。
2. FTP 工作模式问题。默认情况下 ftp 客户端是主动模式的,需要服务器主动链接客户端发送数据。
你虚拟机的 ip 是经过了 NAT , 数据链接无法建立;因此你需要让客户端发送被动模式指令,让服务器端在一个新建数据端口监听,然后客户端重新建立数据连接。(其实你只需让客户端用被动模式即可)
BOYPT
2015-09-28 17:06:15 +08:00
@oska874 tftp 和 ftp 是两种不同的协议,不能兼容。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/224279

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX