背景
前段时间,因为个人兴趣,想自己部署一个FTP服务器,然后骚情的用Docker部署一下,但是在启动的时候,使用了如下命令启动:
docker run -u root -it -d --name ftp_server -p 21:21 -p 20:20 ftp:latest
初始并没有发现有什么问题,直到后来,使用ftplib模块时,发现一直无法连接至此服务器,然后开始追踪“元凶”,才发现踩了主动模式和被动模式的坑,记录一下,提醒自己~
-
python 示例代码:
def client():
ftp = ftplib.FTP()
ftp.set_debuglevel(2)
ftp.connect(HOST, PORT)
ftp.login(USERNAME, PASSWORD)
ftp.encoding = 'utf-8'
ftp.set_pasv(1)
return ftp
if __name__ == '__main__':
ftp = client()
file = 'min.xlsx'
f = open(file, 'rb')
path = REPORT_SERVER_PATH
ftp.cwd(REPORT_SERVER_PATH)
ftp.storbinary('STOR %s' % f.name, f, 1024)
ftp.quit()
-
PORT(主动模式)
PORT中文称为主动模式,工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据.
-
PASV(被动模式)
PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输.
网友评论