[英]FTP over different networks in python
我和我的朋友已经完成了一个小型项目,作为我们夏季的计划,并且我们正在尝试使用python作为项目的一部分使用FTP。 我们可以在同一网络上成功传输文件,但是对于通过互联网(通过不同网络)连接时如何传输文件,我们一无所知。 我已添加代码供您参考。 我是FTP和python的新手,如果有人可以帮助我们,那就太好了。
服务器端程序:
#server.py
from pyftpdlib.ftpserver import DummyAuthorizer
from pyftpdlib.ftpserver import FTPHandler
from pyftpdlib.ftpserver import FTPServer
authorizer = DummyAuthorizer()
authorizer.add_user("user", "12345", "/", perm="elradfmw")
authorizer.add_anonymous("/")
handler = FTPHandler
handler.authorizer = authorizer
server = FTPServer(("xxx.xxx.x.x", 2121), handler)
server.serve_forever()
和客户端程序:
#client.py
import ftplib
fileTransfer = ftplib.FTP()
fileTransfer.connect("xxx.xxx.x.x",2121)
fileTransfer.login('user','12345')
fileTransfer.retrlines('LIST')
fileTransfer.cwd('/home/royal/MyPrograms/Python')
fileTransfer.retrbinary('RETR Florida.mp3',open('club.mp3','wb').write)
我正在使用NAT。
您可能会遇到防火墙问题; 使用被动模式FTP应该会有所帮助。 该链接有一个很好的解释,但简短的版本是FTP默认情况下使用“活动”模式,其中客户端创建与服务器的连接以发出请求,然后服务器创建与客户端的新连接以响应。 大多数防火墙都配置为阻止“自发”入站连接,除非将防火墙专门配置为查看来自客户端的出站连接的内容并看到“啊哈,一个FTP请求,否则我应该期望来自该服务器的入站连接”很快”,它将阻止连接。
另一方面,被动模式使客户端创建两个出站连接,一个用于请求,另一个用于服务器(用于在另一个随机选择的端口上),服务器将用于发送响应。 在默认配置下,现成的路由器+防火墙解决方案将允许所有出站连接通过,因此这将使客户端的防火墙允许连接通过。 不过,在服务器端配置防火墙会更加困难,因为数据的传入连接可以在任何端口上-除非您缩小被动数据端口范围。
因此,您应该做的是:
如果您遇到的问题是防火墙问题,那应该可以为您解决。 如果仍然无法正常工作; 您可能还有其他问题,请继续提出一个新问题! (或者,如果与防火墙问题明显相关,请更新此文件)。
我认为您的问题的解决方案是端口转发
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.