热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

FTP基础与使用Docker搭建Vsftpd的FTP服务

FTP基础与使用Docker搭建Vsftpd的FTP服务前言最近的工作中,需要将手机上的文件发送到公司的FTP的服务器。按照从前的思路,自然是,先将文件传到电脑,再由电脑上传到FT

FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务

前言

最近的工作中,需要将手机上的文件发送到公司的 FTP 的服务器。按照从前的思路,自然是,先将文件传到电脑,再由电脑上传到 FTP 服务器上;经过一份搜索后找到了 质感文件 这个 Android 应用,这样就可以通过无线网直接连接 FTP 服务器了。

FTP 基础

  1. FTP 需要两个端口,一个是数据端口,一个是控制端口。在主动模式下,控制端口一般为21,数据端口一般为20(控制端口 - 1);在被动模式下,由服务器端和客户端协商决定
  2. FTP 地址为:ftp://用户名:密码@IP地址或域名:控制端口号
  3. FTP 的传输方式有两种:
    (1)ASCII传输方式,即假定用户正在拷贝的文件包含简单的ASCII码文本,通常传输时会自动调整格式
    (2)二进制传输模式,即逐位传输
  4. FTP 的工作模式有两种:
    (1)PORT主动模式,意为服务端主动从20端口连接客户端告知的端口
    (2)PASV被动模式,意为服务端 告知 客户端 地址和端口后,等待客户端连接
    (3)对比:主动模式需要客户端必须开放端口给服务器,服务器要可以连上客户端,这就要求客户端为公网 IP(经过 NAT 后地址就变化了)且防火墙打开。而实际情况下,公网 IP 比较少而且很多客户端都是在防火墙内,由路由器交换机进行着 NAT,还要协调开放端口。被动模式只需要服务器端开放端口给客户端连接就行了,而服务器为了便于访问,一般会放在公网,所以被动模式使用较多
  5. 主动被动模式选择权在客户端

此处比较奇怪,为什么服务器会告知客户端地址,直接让客户端使用访问服务器时的地址不可以吗?我的思考是,机器一般无法取得自己外网的地址,而且 FTP 协议中确有要求,要传输地址:

(图为 FileZilla 中被动模式传输文件)

这里可能就会好奇了,前面的地址好理解,后面的两个数字是什么意思。通过这篇文章得知,端口号为数字1 * 256 + 数字2,Wireshark 中的截图也印证了这一点:

(图为 Wireshark 中捕获的传输接口)

使用 Docker 搭建 Vsftpd 的 FTP 服务

我们使用的 Docker 镜像为 fauria/vsftpd

docker run -d -v /root/ftp:/home/vsftpd \
--p 60020:20 -p 60021:21 -p 61100-61105:61100-61105 \
-e FTP_USER=battor -e FTP_PASS=nihaonihao123123 \
-e PASV_ADDRESS=1.2.3.4 -e PASV_MIN_PORT=61100 -e PASV_MAX_PORT=61105 \
--name vsftpd --restart=always fauria/vsftpd

-v 意为将容器中的路径映射到本地文件系统(“冒号”前为 本地文件系统路径,“冒号”后为 容器中的文件系统路径)。
-p 意为将容器的端口号映射到本地,可以看到映射了一个范围的地址,这些端口是被动模式下开放给客户端的,要与后面的 PASV_MIN_PORT (被动模式最小端口)PASV_MAX_PORT (被动模式最大端口) 相对应。
--name 用于指定容器名称。
--restart 意为当 Docker 进程重启时,立刻启动该容器。

我们自己部署服务器时,应当尽量避免使用默认端口,以减少被黑客攻击的风险。故此处使用 60020 和 60021,以及 61100 至 61105 端口

此外需要注意的是,PASV_ADDRESS 需要配置为服务器对应的外网地址。否则无法连接:

(图为 质感文件 中连接时的情况)

然鹅在 FileZilla 客户端测试中发现,即使 配置为 127.0.0.1,某些客户端亦可以正常连接,猜测是因为客户端中存在类似的设置:

(图为 FileZilla 客户端的设置)

后记

由于 FTP 中的文件较为隐私,在这里就不展示配置成功后的效果了,实际使用起来还是很方便滴。

再次推荐下 质感文件 这个 APP 吧,界面 Material Design 风格,好看好用。支持 FTP 服务器,SFTP 服务器, SMB 服务器,还可作为 FTP 服务器使用。

参考

fauria/vsftpd

227 Entering Passive Mode 含义


推荐阅读
  • 体积小巧的vsftpd与pureftpd Docker镜像在Unraid系统中的详细配置指南:支持TLS加密及IPv6协议
    本文详细介绍了如何在Unraid系统中配置体积小巧的vsftpd和Pure-FTPd Docker镜像,以支持TLS加密和IPv6协议。通过这些配置,用户可以实现安全、高效的文件传输服务,适用于各种网络环境。配置过程包括镜像的选择、环境变量的设置以及必要的安全措施,确保了系统的稳定性和数据的安全性。 ... [详细]
  • 深入解析OSI七层架构与TCP/IP协议体系
    本文详细探讨了OSI七层模型(Open System Interconnection,开放系统互连)及其与TCP/IP协议体系的关系。OSI模型将网络通信过程划分为七个层次,每个层次负责不同的功能,从物理层到应用层逐步实现数据传输和处理。通过对比分析,本文揭示了OSI模型与TCP/IP协议在结构和功能上的异同,为理解现代网络通信提供了全面的视角。 ... [详细]
  • 西北工业大学作为陕西省三所985和211高校之一,虽然在农业和林业领域不如某些顶尖院校,但在航空航天领域的实力尤为突出。该校的计算机科学专业在科研和教学方面也具有显著优势,是考研的理想选择。 ... [详细]
  • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
  • 深入解析 OpenSSL 生成 SM2 证书:非对称加密技术与数字证书、数字签名的关联分析
    本文深入探讨了 OpenSSL 在生成 SM2 证书过程中的技术细节,重点分析了非对称加密技术在数字证书和数字签名中的应用。非对称加密通过使用公钥和私钥对数据进行加解密,确保了信息传输的安全性。公钥可以公开分发,用于加密数据或验证签名,而私钥则需严格保密,用于解密数据或生成签名。文章详细介绍了 OpenSSL 如何利用这些原理生成 SM2 证书,并讨论了其在实际应用中的安全性和有效性。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • 双因子安全机制与WiFi万能钥匙的较量:解析其背后的对抗策略
    几乎所有智能手机用户都熟悉类似“WiFi万能钥匙”的应用程序。这款应用凭借庞大的下载量,不仅在各大应用商店中占据显著位置,还长期稳居下载排行榜前列。然而,随着双因子认证等高级安全机制的普及,这类应用面临着前所未有的挑战。本文将深入探讨双因子安全机制与WiFi万能钥匙之间的对抗策略,分析其背后的技术原理和安全风险。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 在IIS上运行的WebApi应用程序在开发环境中能够正常进行文件的读写操作。然而,在尝试通过FTP访问实时服务器上的文件列表时,遇到了无法显示的问题,尽管服务器配置与开发环境相同。这可能涉及权限设置、FTP服务配置或网络连接等方面的问题。 ... [详细]
  • 华为AP3010DNAGN从胖AP转换为瘦AP的过程及版本升级详细记录
    华为AP3010DNAGN从胖AP模式转换为瘦AP模式的过程及其版本升级的详细记录如下:首先,需要了解胖AP与瘦AP的区别。瘦AP(FIT)模式下,设备无法独立运行Wi-Fi功能,必须与AC控制器配合使用,适用于企业多AP的集中管理场景。本文将详细介绍转换步骤和版本升级的具体操作,帮助用户顺利完成配置。 ... [详细]
  • 解决SWFUpload在本地测试成功但服务器上出现404或500错误的方法
    在使用SWFUpload进行图片批量上传时,尽管本地测试一切正常,但在部署到服务器后却遇到了404和500错误。经过详细排查,发现404错误的原因在于`flash_url`和`upload_url`需要配置为绝对路径。此外,500错误可能是由于服务器端的权限设置或脚本错误导致,建议检查服务器日志以获取更多调试信息。通过这些调整,最终成功解决了问题。 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • 在Python 3环境中,当无法连接互联网时,可以通过下载离线模块包来实现模块的安装。具体步骤包括:首先从PyPI网站下载所需的模块包,然后将其传输到目标环境,并使用`pip install`命令进行本地安装。此方法不仅适用于单个模块,还支持依赖项的批量安装,确保开发环境的完整性和一致性。 ... [详细]
  • 这篇文章 | 夕阳下的防火墙命令全解 ... [详细]
author-avatar
mobiledu2502921803
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有