c++网络编程实战——开发基于ftp协议的文件传输模块(二) 配置ftp服务与手动执行ftp命令

配置FTP服务

一.前言

博主的环境是阿里云服务器,操作系统版本为 ubuntu20.04,一下所有操作都基于以上环境下进行的操作,同时为了简化操作我将开放同一个云服务器的不同端口,让它同时充当服务端和客户端,大家如果想测试效果更好且更贴近实际情况的话,建议还是使用一台本地虚拟机+一台云服务器/两台虚拟机/两台云服务器来进行测试来保证测试效果。

二. 安装ftp软件包

  • 安装服务端
shell 复制代码
sudo apt install vsftpd
  • 安装客户端
shell 复制代码
sudo apt install ftp

三.配置ftp服务器

1.前言

在上一篇文章中我们提到过ftp的传输模式有主动/被动传输两种模式,而一般情况下我们默认是被动模式,这里我们的介绍也以被动模式为主。

2.配置ftp服务器开机自启动

shell 复制代码
systemctl enable vsftpd.service

3.启动ftp服务

shell 复制代码
systemctl start vsftpd.service

完成上述操作之后我们可以尝试执行下面的命令来查看一下ftp服务监听的端口:

shell 复制代码
netstat -antup | grep ftp

出现下面即视为成功:

4.为ftp服务创建用户

我们可以执行命令来为ftp服务创建一个用户,比如我们创建一个叫fengxu的用户:

shell 复制代码
adduser fengxu

如果我们想修改用户的密码:

shell 复制代码
passwd fengxu

5.创建一个用来供ftp服务使用的文件夹

shell 复制代码
 mkdir /ftp/work

这里我们还创建一个测试文件来为测试使用做准备:

shell 复制代码
touch /ftp/work/test.txt

6.更改工作文件夹的拥有者

shell 复制代码
chown -R fengxu:fengxu /ftp/work

7.修改配置文件

大家可以查看一下自己环境下etc目录下的有关的配置文件,我这里是vsftpd.conf

shell 复制代码
vi vsftpd.conf
shell 复制代码
#禁止匿名登录FTP服务器。
anonymous_enable=NO
#允许本地用户登录FTP服务器。
local_enable=YES
#监听IPv4 sockets。
listen=YES
 
#在行首添加#注释掉以下参数:
#关闭监听IPv6 sockets。
#listen_ipv6=YES
 
#在配置文件的末尾添加下列参数:
#设置本地用户登录后所在目录。
local_root=/var/ftp/work01
#允许用户上传文件
write_enable=YES
#全部用户被限制在主目录。
chroot_local_user=YES
#启用例外用户名单。
chroot_list_enable=YES
#指定例外用户列表文件,列表中用户不被锁定在主目录。
chroot_list_file=/etc/chroot_list
#开启被动模式。
pasv_enable=YES
allow_writeable_chroot=YES
#本教程中为Linux实例的公网IP。
pasv_address=<FTP服务器公网IP地址>
#设置被动模式下,建立数据传输可使用的端口范围的最小值。
#建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
pasv_min_port=1024
#设置被动模式下,建立数据传输可使用的端口范围的最大值。
pasv_max_port=1048

8.创建chroot_list文件

shell 复制代码
vi /etc/chroot_list

最后要重启服务

shell 复制代码
systemctl restart vsftpd.service

9.设置安全组

需要在服务器的安全组里开放20-21端口,还需要开放pasv_min_port和pasv_max_port设置的端口

10.测试

我们尝试在windows下连接ftp服务器:

shell 复制代码
ftp 云服务器ip地址

出现下面这种情况就表明已经成功了:

常见的ftp命令

1.切换工作目录

  • 查看服务器工作目录
shell 复制代码
pwd
  • 切换服务器工作目录
shell 复制代码
cd 目录名
  • 切换本地工作目录
shell 复制代码
lcd 目录名

2.查看服务器上的目录与文件

  • 列出目录或文件名的详细信息
shell 复制代码
ls  目录或文件名
dir 目录或文件名
  • 仅列出目录和文件名

    nlist 目录或文件名 [本地文件名]

注意:

这个命令式支持通配符的。比如:

shell 复制代码
nlist /work/*.cpp

我们还可以指定输出位置,比如列出/work目录下的匹配*.cpp的文件名信息,结果输出到本地的/tmp/freecplus.list文件中。

shell 复制代码
nlist /work/*.cpp /tmp/freecplus.list

3.下载与上传文件

3.1 文件传输的模式

ftp传输文件的模式分二进制和ASCII码两种模式,二进制模式可以传输任何文件,包括压缩包、可执行程序、图片、视频、音频等,而ASCII模式只能传输.txt、.htm等ascii码文件(文本文件)。在实际开发中,不管什么文件,都用二进制方式传输。

  • 查看当前的传输模式
SHELL 复制代码
type
  • 设定传输模式为二进制
shell 复制代码
bin
  • 设定传输模式为ASCII
shell 复制代码
ascii

3.2 下载文件

3.2.1下载单个文件

shell 复制代码
get|recv 服务端文件名 [本地文件名]

使用说明:

  • 下载文件用get和recv都可以。
  • 文件名不允许用"*"、"?"等通配符。
  • 服务端文件名和本地文件名可以用绝对路径,如果不写路径,表示当前工作目录。
  • 如果本地文件名省略不写,表示把服务端文件下载到本地的当前工作目录,文件名与服务端文件名相同。

3.2.1 下载多个文件

shell 复制代码
mget 服务端文件1 服务端文件2 服务端文件3 ...... 服务端文件n

使用说明:

  • 待下载的文件名,可以一一列出来(用空格分隔),也可以用通配符。
  • 下载的文件,存放在本地当前工作目录中。
  • 下载文件时,会一一提示,如果想关闭提示信息,先输入prompt命令:
shell 复制代码
prompt

3.3上传文件

3.3.1上传单个文件

shell 复制代码
put|send 本地文件名 [服务端文件名]
  • 上传文件用put和send都可以。
  • 文件名不允许用通配符。
  • 本地文件名和服务端文件名可以用绝对路径,如果不写路径,表示当前工作目录。
  • 如果服务端文件名省略不写,表示把本地文件上传到服务端的当前工作目录,文件名与本地文件名相同。

3.3.2 上传多个文件

shell 复制代码
mput 本地文件1 本地文件2 本地文件3 ...... 本地文件n

使用说明:

  • 待上传的文件名,可以一一列出来(用空格分隔),也可以用通配符。
  • 上传的文件,存放在服务端当前工作目录中。
  • 上传文件时,会一一提示,如果想关闭都显示信息,先输入prompt命令。
    prompt

4.其他的ftp命令

  • 重命名ftp服务端的文件
shell 复制代码
rename 旧文件名 新文件名
  • 删除ftp服务端上单个文件

    delete 文件名

  • 删除ftp服务端的多个文件

shell 复制代码
mdelete 文件名1 文件名2 文件名3 ...... 文件名n
  • 在ftp服务端上创建目录
shell 复制代码
mkdir pathname
  • 删除ftp服务端上的目录

    rmdir pathname

  • 切换传输模式

shell 复制代码
passive
  • 显示帮助信息。
shell 复制代码
help [命令名]

显示ftp命令的帮助信息,如果不输入命令名,则显示全ftp命令的帮助信息。

  • 退出ftp。
shell 复制代码
bye
相关推荐
fantasy_arch9 小时前
CPU性能优化-磁盘空间和解析时间
网络·性能优化
是Dream呀11 小时前
Python从0到100(七十八):神经网络--从0开始搭建全连接网络和CNN网络
网络·python·神经网络
kaixin_learn_qt_ing12 小时前
了解RPC
网络·网络协议·rpc
安全小王子12 小时前
Kali操作系统简单介绍
网络·web安全
Hacker_LaoYi14 小时前
【漏洞分析】DDOS攻防分析(四)——TCP篇
网络·tcp/ip·ddos
爱吃水果蝙蝠汤14 小时前
DATACOM-IP单播路由(BGP)-复习-实验
网络·网络协议·tcp/ip
Sun_12_214 小时前
SQL注入(SQL lnjection Base)21
网络·数据库
网络安全Jack15 小时前
网络安全概论——身份认证
网络·数据库·web安全
易我数据恢复大师15 小时前
如何彻底删除电脑数据以防止隐私泄露
网络·电脑·数据删除·擦除