美文网首页
【Docker】部署vsftpd之主动模式、被动模式

【Docker】部署vsftpd之主动模式、被动模式

作者: minhelloworld | 来源:发表于2018-12-24 19:48 被阅读0次

    背景

    前段时间,因为个人兴趣,想自己部署一个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端口和客户端开放的端口连接,发送数据.
    image.png
    • PASV(被动模式)
      PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输.
    image.png

    参考:https://www.jianshu.com/p/2381e0b6ecb4

    相关文章

      网友评论

          本文标题:【Docker】部署vsftpd之主动模式、被动模式

          本文链接:https://www.haomeiwen.com/subject/hcqtlqtx.html