ftp(1) command

2024-01-13 10:14:01 浏览数 (2)

文章目录
  • 1.简介
  • 2.格式
  • 3.选项
  • 4.子命令
  • 5.命令与数据通道
  • 6.主动与被动模式
    • 主动模式(Active Mode)
    • 被动模式(Passive Mode)
  • 7.FAQ
  • 参考文献

1.简介

FTP(File Transfer Protocol)是一种用于在计算机之间传输文件的标准网络协议。

ftp 则是 FTP 服务的命令行客户端,用于与 FTP 服务器进行交互。

2.格式

代码语言:javascript复制
ftp [options] [hostname]

3.选项

代码语言:javascript复制
-4: use IPv4 addresses only
-6: use IPv6, nothing else
-p: enable passive mode (default for pftp)
-i: turn off prompting during mget
-n: inhibit auto-login
-e: disable readline support, if present
-g: disable filename globbing
-v: verbose mode
-t: enable packet tracing [nonfunctional]
-d: enable debugging

4.子命令

有许多子命令,这些命令用于执行各种操作,例如连接到服务器、文件传输、目录操作等。以下是一些常用的FTP子命令:

代码语言:javascript复制
?, help
	显示子命令
open HOST [POST]
	与 FTP 服务器建立连接。
user USERNAME [PASSWORD]
	用户登录
passive
	进入被动方式。
cd DIRECTORY
	切换当前远程目录。
ls [DIRECTORY]
	列出(当前)远程目录内容。
dir [DIRECTORY]
	类似于ls,用于列出当前远程目录内容。
get REMOTE_FILE [LOCAL_FILE]
	从服务器下载文件。
mget REMOTE_FILES
	批量下载多个文件。
put LOCAL_FILE [REMOTE_FILE]
	上传文件到服务器。
mput LOCAL_FILES
	批量上传多个文件到服务器。
delete REMOTE_FILE
	删除远程文件。
mdelete REMOTE_FILES
	批量删除远程文件。
pwd
	 显示当前远程工作目录。
ascii
	将文件传输模式设置为ASCII模式。
binary
	将文件传输模式设置为二进制模式。
mkdir DIRECTORY
	创建远程目录。
rmdir DIRECTORY
	删除远程目录。
bye
	关闭 FTP 连接。
quit
	退出 FTP 会话。

这只是 ftp 命令的一小部分子命令。FTP还有其他许多命令和选项,具体取决于FTP服务器的支持和配置。你可以在FTP客户端中输入 help 命令来获取更多命令的帮助信息。

5.命令与数据通道

FTP(File Transfer Protocol)使用两个通道来完成文件传输和命令控制:命令通道(Control Channel)和数据通道(Data Channel)。

命令通道(Control Channel):

端口: 命令通道通常使用FTP的默认端口 21。

作用: 在命令通道上,客户端和服务器之间传递控制信息和命令,例如登录认证、切换目录等。

数据通道(Data Channel):

端口: 数据通道的端口可以是动态分配的(被动模式)或服务器端的端口(主动模式)。

作用: 在数据通道上,实际的文件数据被传输。

传输类型: 数据通道的传输类型可以是ASCII模式(文本文件)或二进制模式(二进制文件)。

6.主动与被动模式

FTP 使用主动模式(Active Mode)和被动模式(Passive Mode)来建立数据连接,这涉及到在客户端和服务器之间传输文件时的数据通信。

主动与被动是站在 FTP 服务器的角度来说的。

主动模式(Active Mode)

客户端请求:FTP 客户端随机开启一个非保留端口(大于 1023)N 向服务器的 21 号命令端口发起连接,发送 FTP 用户名和密码,然后开放 N 1 号端口进行监听,并向服务器发出 PORT N 1 命令,告诉服务器客户端采用主动模式并开放了 N 1 端口。

服务器主动连接: 服务器接收到 PORT 命令后,会用其本地的 FTP 数据端口(通常是20)来连接客户端指定的 N 1 端口,进行数据传输。

主动模式的问题:

主动模式可能会面临防火墙问题,因为在传输文件之前,服务器需要与客户端的数据端口建立连接。如果客户端位于防火墙后面,防火墙可能会阻止来自服务器的连接。

被动模式(Passive Mode)

客户端请求: 在被动模式下,客户端随机开启非保留端口(大于 1023)N 向服务器的21号端口发起连接,发送用户名和密码进行登陆,同时会开启N 1端口。然后向服务器发送PASV命令,通知服务器处于被动模式。

服务器响应: 服务器收到命令后,会开放一个非保留端口(大于 1023)P(端口P的范围是可以设置)进行监听,然后用 PORT P 命令通知客户端自己的数据端口是 P。

客户端连接: 客客户端收到命令后,会通过N 1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。

被动模式的优势:

被动模式通常更容易穿越防火墙,因为在被动模式下,客户端与服务器的数据连接是由客户端发起的,而不需要服务器主动连接客户端。

7.FAQ

(1)ls 报错。

使用 ftp HOSTNAME,然后输入用户名密码成功登录之后,使用 ls 报了如下错误:

代码语言:javascript复制
501 Server cannot accept argument.
ftp: bind: Address already in use

原因是我们处于主动模式。

主动模式下,ftp 服务器数据端口20要去连接客户端指定的数据端口。一般来讲外部系统到内部的端口连接会被防火墙阻塞。所以报了 ftp: bind: Address already in use 错误。

解决办法是执行 passive 进入被动模式。

(2)连接断开。

使用客户端 ftp 与服务器建立连接后,过一段时间再次执行命令,会报如下错误:

代码语言:javascript复制
421 Service not available, remote server has closed connection

描述表示 FTP 服务器已关闭连接,导致无法提供服务。可以使用 open 重新与服务器建立连接。

出现这种情况,可能因为如下几个原因:

  • 空闲连接断开: 一些FTP服务器为了节省资源,会在连接空闲一段时间后主动关闭。尝试在服务器上调整空闲连接断开的设置。
  • 服务器状态: 可能是FTP服务器本身出现了问题,例如负载过高或正在维护。联系FTP服务器管理员以获取更多信息。
  • 防火墙设置: 检查本地防火墙和服务器防火墙的设置,确保它们不会关闭FTP连接。有时,防火墙可能会关闭长时间没有活动的连接。
  • 网络不稳定:不稳定的网络连接可能导致连接超时和错误。确保你的网络连接是稳定的。

参考文献

FTP: 501 Server cannot accept argument

0 人点赞