前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ftp(1) command

ftp(1) command

作者头像
恋喵大鲤鱼
发布2024-01-13 10:14:01
1190
发布2024-01-13 10:14:01
举报
文章被收录于专栏:C/C++基础C/C++基础
文章目录
  • 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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1.简介
  • 2.格式
  • 3.选项
  • 4.子命令
  • 5.命令与数据通道
  • 6.主动与被动模式
    • 主动模式(Active Mode)
      • 被动模式(Passive Mode)
      • 7.FAQ
      • 参考文献
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档