Linux 网络服务04-FTP 文件传输服务

一、FTP 连接及传输模式

1.控制连接:TCP 21,用于发送 FTP 命令信息

2.数据连接:TCP 20,用于上传、下载数据

3.数据连接的建立类型:

(1)主动模式:服务器主动发起数据连接

首先由客户端向服务端的21端口建立FTP控制连接。当需要传输数据时,客户端以PORT命令告知服务器“我打开了某端口,你过来连接我”,预算服务器从20端口向客户端的该端口发送请求并建立数据连接。

(2)被动模式:服务器被动等待数据连接

如果客户端所在网络的防火墙禁止主动模式连接,通常会使用被动模式。首先由客户端想服务器的21端口建立FTP控制连接。当需要传输数据时,服务器以PASV命令告知客户端“我打开了某端口,你过来连接我“,于是客户端向服务器的该端口(非20)发送请求并建立数据连接。

4.传输模式

在传输文件时,根据是否进行字符转换,分为文本模式和二进制模式。

(1)文本模式:

又称ASCII(American Standard Code for Information Interchange)美国信息交换标准码模式,这种模式在传输文件时使用ASCII标准字符序列,一般只用于纯文本文件的传输。

(2)二进制模式:

又称二进制模式,这种模式不会转换文件中的字符序列,更适合传输程序,图片等非纯文本字符的文件。使用二进制模式比文本模式更有效率,大多数FTP客户端工具可以根据文件类型自动选择文件传输模式。

二、FTP 用户类型

1.匿名用户:

用户名为ftp or anonymous,提供任意密码(包括空密码)都可以通过服务器的验证。一般用于公共文件的下载,如提供一些免费的软件,学习资料下载的站点。

2.本地用户:

直接使用本地的系统用户账号进行验证。

3.虚拟用户:

通过一份独立的用户数据库文件进行登录验证,将FTP账户与Linux系统账户的关联性将至最低,为系统提供更好的安全性。

三、FTP 服务器软件的种类

Windows 系统:FileZilla Server、Server-U 等

Linux/Unix 系统:vsftpd(Very secure FTP Daemon)

四、FTP客户端工具的种类

1.Windows 系统:

ftp命令,CuteFTP,FlashFXP,LeapFTP,Filezilla等。还有一些下载工具软件,如FlashGet,Wget等,但不具备上传功能,通常不称为FTP客户端工具。

2.Linux/Unix 系统:

ftp 命令

五、搭建匿名访问的 FTP 服务

1.安装 FTP 服务软件

[root@huyouba1 ~]# rpm -qa |grep vsftpd

[root@huyouba1 ~]# yum -y install vsftpd

2.准备匿名 FTP 访问的目录

[root@huyouba1 ~]# cd /var/ftp/

[root@huyouba1 ftp]# ll

总用量 0
drwxr-xr-x 2 root root 6 10月 31 2018 pub

[root@huyouba1 ftp]# chmod o+w pub/

[root@huyouba1 ftp]# ll

总用量 0
drwxr-xrwx 2 root root 6 10月 31 2018 pub

3.开发匿名用户配置并启动 vsftpd 服务

[root@huyouba1 ftp]# cd /etc/vsftpd/

[root@huyouba1 vsftpd]# ls

ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh

[root@huyouba1 vsftpd]# cp vsftpd.conf  vsftpd.conf.$(date +%Y%m%d%H%M)

[root@huyouba1 vsftpd]# cat vsftpd.conf.202002211123 |egrep -v "^#|^$" >vsftpd.conf

[root@huyouba1 vsftpd]# vim vsftpd.conf

  1 anonymous_enable=YES            //允许匿名用户
  2 local_enable=YES
  3 write_enable=YES
  4 local_umask=022
  5 anon_upload_enable=YES          //开启匿名用户上传权限
  6 anon_umask=022                  //手动添加匿名用户的权限掩码
  7 anon_mkdir_write_enable=YES //开启匿名用户新建用户的权限
  8 anon_other_write_enable=YES //手动添加匿名用户的其他写入权限(删除,重命名等)
  9 dirmessage_enable=YES
 10 xferlog_enable=YES
 11 connect_from_port_20=YES
 12 xferlog_std_format=YES
 13 listen=NO
 14 listen_ipv6=YES
 15 pam_service_name=vsftpd
 16 userlist_enable=YES
 17 tcp_wrappers=YES

[root@huyouba1 vsftpd]# systemctl restart vsftpd

4.测试匿名 FTP 服务器

在客户端安装 FTP 客户端

[root@ftpclient ~]# yum -y install ftp &>/dev/null 

[root@ftpclient ~]# echo ceshiwenjian >anon_ftptest.txt

[root@ftpclient ~]# ftp 192.168.100.113

Connected to 192.168.100.113 (192.168.100.113).
220 (vsFTPd 3.0.2)
Name (192.168.100.113:root): ftp
331 Please specify the password.
Password:    \\空密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp> ls

227 Entering Passive Mode (192,168,100,113,62,55).
150 Here comes the directory listing.
drwxr-xrwx    2 0        0               6 Oct 30  2018 pub
226 Directory send OK.

ftp> cd pub/

250 Directory successfully changed.

ftp> ls

227 Entering Passive Mode (192,168,100,113,104,225).
150 Here comes the directory listing.
226 Directory send OK.

ftp> mkdir anon_ftptest.dir

257 "/pub/anon_ftptest.dir" created

ftp> put anon_ftptest.txt 

local: anon_ftptest.txt remote: anon_ftptest.txt
227 Entering Passive Mode (192,168,100,113,255,174).
150 Ok to send data.
226 Transfer complete.
13 bytes sent in 0.000133 secs (97.74 Kbytes/sec)

ftp> ls

227 Entering Passive Mode (192,168,100,113,254,97).
150 Here comes the directory listing.
drwxr-xr-x    2 14       50              6 Feb 25 05:38 anon_ftptest.dir
-rw-r--r--    1 14       50             13 Feb 25 05:38 anon_ftptest.txt
226 Directory send OK.

ftp> delete anon_ftptest.txt 

250 Delete operation successful.

ftp> ls

227 Entering Passive Mode (192,168,100,113,110,211).
150 Here comes the directory listing.
drwxr-xr-x    2 14       50              6 Feb 25 05:38 anon_ftptest.dir
226 Directory send OK.

ftp> bye

221 Goodbye.

测试小结:匿名用户具有新建目录,上传文件,删除文件的权限,新建目录默认全信啊 755,上传文件默认权限 644。

六、搭建本地用户验证的 FTP 服务

1.创建本地用户

[root@huyouba1 ~]# useradd test1

[root@huyouba1 ~]# useradd test2

[root@huyouba1 ~]# echo "123" |passwd --stdin test1 &>/dev/null 

[root@huyouba1 ~]# echo "123" |passwd --stdin test2 &>/dev/null 

2.修改配置文件,重启 FTP 服务

[root@huyouba1 vsftpd]# cat vsftpd.conf.202002211123  |egrep -v "^#|^$" >vsftpd.conf

[root@huyouba1 vsftpd]# vim vsftpd.conf

  1 anonymous_enable=NO                 //禁止匿名用户登录
  2 local_enable=YES                    //允许本地用户登录
  3 write_enable=YES                    //设置可写权限
  4 local_umask=022                     //本地用户上传文件的umask值
  5 dirmessage_enable=YES
  6 xferlog_enable=YES
  7 connect_from_port_20=YES
  8 xferlog_std_format=YES
  9 listen=NO
 10 listen_ipv6=YES
 11 pam_service_name=vsftpd
 12 userlist_enable=YES
 13 tcp_wrappers=YES
 14 local_root=/var/ftp                 //设置本地用户登录ftp的根目录
 15 chroot_local_user=YES               //将本地用户锁定在ftp目录,不可cd出去

[root@huyouba1 vsftpd]# systemctl restart vsftpd

客户端测试

[root@ftpclient ~]# echo ceshiwenjian >local_ftptest.txt 

[root@ftpclient ~]# ls

anaconda-ks.cfg  anon_ftptest.txt  local_ftptest.txt

[root@ftpclient ~]# ftp 192.168.100.113
Connected to 192.168.100.113 (192.168.100.113).
220 (vsFTPd 3.0.2)
Name (192.168.100.113:root): test1
331 Please specify the password.
Password:

230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp> cd pub

250 Directory successfully changed.

ftp> mkdir local_ftptest.dir

257 "/pub/local_ftptest.dir" created

ftp> put local_ftptest.txt 

local: local_ftptest.txt remote: local_ftptest.txt
227 Entering Passive Mode (192,168,100,113,229,171).
150 Ok to send data.
226 Transfer complete.
13 bytes sent in 5.5e-05 secs (236.36 Kbytes/sec)

ftp> ls

227 Entering Passive Mode (192,168,100,113,27,228).
150 Here comes the directory listing.
drwxr-xr-x    2 14       50              6 Feb 25 05:38 anon_ftptest.dir
drwxr-xr-x    2 1000     1000            6 Feb 25 05:49 local_ftptest.dir
-rw-r--r--    1 1000     1000           13 Feb 25 05:49 local_ftptest.txt
226 Directory send OK.

ftp> bye

221 Goodbye.

测试小结:本地用户具新建目录,上传文件的权限

3.ftpusers 与 user_list 用户列表的使用

(1)ftpuser 文件:FTP 服务器中的黑名单,优先级高于 user_list 文件

(2)user_list 文件:此用户列表默认情况下也是黑名单,即在此列表中的用户不可访问 FTP 服务器,但是通过 vsftpd.conf 主配置文件的修改将此名单改为白名单,且今次名单中的用户可以访问。

(3)示例:

1> 将 test1 用户放入 ftpusers 文件中,其他配置文件不可修改,尝试用 test1 用户登录

[root@huyouba1 vsftpd]# vim ftpusers 

# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
test1

客户端测试

[root@ftpclient ~]# ftp 192.168.100.113

Connected to 192.168.100.113 (192.168.100.113).
220 (vsFTPd 3.0.2)
Name (192.168.100.113:root): test1
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.

2> 将 test1 移除出 ftpusers 文件,将 test2 放入 user_list 用户列表中,先用默认的配置文件,在客户端尝试用 test2 访问 FTP 服务器。在修改配置文件,将 user_list 改为白名单,再在客户端分别用 test1、test2 尝试访问。

[root@huyouba1 vsftpd]# cat vsftpd.conf.202002211123  |egrep -v "^#|^$" >vsftpd.conf

[root@huyouba1 vsftpd]# systemctl restart vsftpd

[root@huyouba1 vsftpd]# vim ftpusers 

# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

[root@huyouba1 vsftpd]# vim user_list 

# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
test2

客户端测试

[root@ftpclient ~]# ftp 192.168.100.113

Connected to 192.168.100.113 (192.168.100.113).
220 (vsFTPd 3.0.2)
Name (192.168.100.113:root): test1
331 Please specify the password.
Password:

230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp> 221 Goodbye.

[root@ftpclient ~]# ftp 192.168.100.113

Connected to 192.168.100.113 (192.168.100.113).
220 (vsFTPd 3.0.2)
Name (192.168.100.113:root): test2
530 Permission denied.
Login failed.

ftp> bye

221 Goodbye.

服务器修改主配置文件,重启服务

[root@huyouba1 vsftpd]# vim vsftpd.conf

anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES

[root@huyouba1 vsftpd]# systemctl restart vsftpd

客户端再次测试

[root@ftpclient ~]# ftp 192.168.100.113

Connected to 192.168.100.113 (192.168.100.113).
220 (vsFTPd 3.0.2)
Name (192.168.100.113:root): test1
530 Permission denied.
Login failed.

ftp> bye

221 Goodbye.

[root@ftpclient ~]# ftp 192.168.100.113

Connected to 192.168.100.113 (192.168.100.113).
220 (vsFTPd 3.0.2)
Name (192.168.100.113:root): test2
331 Please specify the password.
Password:

230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp> bye

221 Goodbye.

测试小结:配置文件中默认 user_list 用户列表为黑名单即默认为 userlist_deny=YES,当增减 userlist_deny=NO 时,user_list 用户列表为白名单,此时仅此名单内用户可访问 FTP 服务器

七、搭建虚拟用户验证的 FTP 服务

1.建立虚拟用户账号数据库

vsftpd 服务使用 Berkeley DB 格式的数据库文件来存放虚拟用户账号,使用 db_load 工具生成数据库文件。

[root@huyouba1 vsftpd]# vim ./vusers.list    //新建一个虚拟用户账号密码列表文件

zhangsan    //单数行为用户
123         //双数行为密码
lisi
123
wangwu
456

[root@huyouba1 vsftpd]# db_load -T -t hash -f vusers.list vusers.db

[root@huyouba1 vsftpd]# ls

ftpusers  user_list  vsftpd.conf  vsftpd.conf.202002211123  vsftpd_conf_migrate.sh  vusers.db  vusers.list

[root@huyouba1 vsftpd]# file vusers.db 

vusers.db: Berkeley DB (Hash, version 9, native byte-order)

注:db_load 命令

-T:允许非 Berkeley 的程序使用该数据库

-t:指定算法(hash:哈希,散列)

-f:指定源文件

注意:生成的数据库文件必须为“.db的”格式

[root@huyouba1 vsftpd]# chmod 600 vusers.*    //修改有关文件的权限,增强安全性

[root@huyouba1 vsftpd]# ll vusers.*

-rw------- 1 root root 12288 2月  26 15:17 vusers.db
-rw------- 1 root root    33 2月  26 15:16 vusers.list

2.添加虚拟映射账号,为 FTP 根目录修改权限

[root@huyouba1 vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual

[root@huyouba1 vsftpd]# ll -d /var/ftproot/

drwx------ 2 virtual virtual 62 2月  26 15:24 /var/ftproot/

[root@huyouba1 vsftpd]# chmod 755 /var/ftproot/

[root@huyouba1 vsftpd]# ll -d /var/ftproot/

drwxr-xr-x 2 virtual virtual 62 2月  26 15:24 /var/ftproot/

3.增加 PAM 认证

[root@huyouba1 vsftpd]# vim /etc/pam.d/vsftpd.vu    \\手动建立此 pam 认证文件

auth    required        pam_userdb.so db=/etc/vsftpd/vusers
account required        pam_userdb.so db=/etc/vsftpd/vusers

4.修改 vsftpd.conf 配置文件,重启服务

[root@huyouba1 vsftpd]# cat vsftpd.conf.202002211123  |egrep -v "^#|^$" >vsftpd.conf

[root@huyouba1 vsftpd]# vim vsftpd.conf

anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd.vu
guest_enable=YES
guest_username=virtual
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=YES

[root@huyouba1 vsftpd]# systemctl restart vsftpd

5.客户端测试

[root@ftpclient ~]# ftp 192.168.100.113
Connected to 192.168.100.113 (192.168.100.113).
220 (vsFTPd 3.0.2)
Name (192.168.100.113:root): zhangsan
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221 Goodbye.

6.实现每个虚拟用户不同根目录,不同权限的管控

(1)创建用户控制目录,并创建虚拟用户所对应的同名配置文件

[root@huyouba1 vsftpd]# mkdir vuser.dir

[root@huyouba1 vsftpd]# cd vuser.dir/

[root@huyouba1 vuser.dir]# touch zhangsan lisi wangwu

[root@huyouba1 vuser.dir]# ls

lisi  wangwu  zhangsan

修改 zhangsan 的配置文件,使其可以上传,建立目录,删除文件,重命名文件,最大传输速率 1 字节/秒,根目录为/var/zhangsan

[root@huyouba1 vuser.dir]# mkdir /var/zhangsan

[root@huyouba1 vuser.dir]# vim zhangsan 

anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_max_rate=1
local_root=/var/zhangsan

修改 lisi 的配置文件,使其尽可以下载上传,不开放其他权限,不限制传输速率,根目录为 /var/lisi

[root@huyouba1 vuser.dir]# mkdir /var/lisi

[root@huyouba1 vuser.dir]# vim lisi 

anon_upload_enable=YES
anon_max_rate=0
local_root=/var/lisi

wangwu 的配置文件不做修改,其权限为配置文件中的默认权限,根目录为 /var/ftproot,仅可以下载,无法上传。

[root@huyouba1 vuser.dir]# chown virtual /var/zhangsan/

[root@huyouba1 vuser.dir]# chown virtual  /var/lisi/

(2)修改 vsftpd.conf 主配置文件,重启服务

[root@huyouba1 vsftpd]# vim vsftpd.conf

anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
user_config_dir=/etc/vsftpd/vuser.dir

[root@huyouba1 vsftpd]# systemctl restart vsftpd

(3)客户端测试

验证 zhangsan

[root@ftpclient ~]# echo ceshiwenjian >virtual_ftptest.txt

[root@ftpclient ~]# ls

anaconda-ks.cfg  anon_ftptest.txt  local_ftptest.txt  virtual_ftptest.txt

[root@ftpclient ~]# ftp 192.168.100.113

Connected to 192.168.100.113 (192.168.100.113).
220 (vsFTPd 3.0.2)
Name (192.168.100.113:root): zhangsan
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp> put virtual_ftptest.txt 

local: virtual_ftptest.txt remote: virtual_ftptest.txt
227 Entering Passive Mode (192,168,100,113,61,123).
150 Ok to send data.
226 Transfer complete.
13 bytes sent in 0.00011 secs (118.18 Kbytes/sec)

ftp> ls

227 Entering Passive Mode (192,168,100,113,218,40).
150 Here comes the directory listing.
-rw-r--r--    1 1002     1002           13 Feb 26 07:47     virtual_ftptest.txt
226 Directory send OK.

ftp> mkdir zhangsan.dir

257 "/zhangsan.dir" created

ftp> ls

227 Entering Passive Mode (192,168,100,113,91,84).
150 Here comes the directory listing.
-rw-r--r--    1 1002     1002           13 Feb 26 07:47 virtual_ftptest.txt
drwxr-xr-x    2 1002     1002            6 Feb 26 07:48 zhangsan.dir
226 Directory send OK.

ftp> delete virtual_ftptest.txt 

250 Delete operation successful.

ftp> rmdir zhangsan.dir

250 Remove directory operation successful.

ftp> bye

221 Goodbye.

验证 lisi

[root@ftpclient ~]# ftp 192.168.100.113

Connected to 192.168.100.113 (192.168.100.113).
220 (vsFTPd 3.0.2)
Name (192.168.100.113:root): lisi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp> put virtual_ftptest.txt 

local: virtual_ftptest.txt remote: virtual_ftptest.txt
227 Entering Passive Mode (192,168,100,113,51,188).
150 Ok to send data.
226 Transfer complete.
13 bytes sent in 0.000101 secs (128.71 Kbytes/sec)

ftp> ls

227 Entering Passive Mode (192,168,100,113,211,218).
150 Here comes the directory listing.
-rw-r--r--    1 1002     1002           13 Feb 26 07:50 virtual_ftptest.txt
226 Directory send OK.

ftp> delete virtual_ftptest.txt 

550 Permission denied.

ftp> mkdir lisi.dir

550 Permission denied.

ftp> bye

221 Goodbye.

验证 wangwu

[root@ftpclient ~]# ftp 192.168.100.113

Connected to 192.168.100.113 (192.168.100.113).
220 (vsFTPd 3.0.2)
Name (192.168.100.113:root): wangwu
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp> put virtual_ftptest.txt 

local: virtual_ftptest.txt remote: virtual_ftptest.txt
227 Entering Passive Mode (192,168,100,113,160,145).
550 Permission denied.

ftp> ls

227 Entering Passive Mode (192,168,100,113,138,118).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Feb 26 07:53 test.txt
226 Directory send OK.

ftp> get test.txt

local: test.txt remote: test.txt
227 Entering Passive Mode (192,168,100,113,160,252).
150 Opening BINARY mode data connection for test.txt (0 bytes).
226 Transfer complete.

ftp> bye

221 Goodbye.
[root@ftpclient ~]# ls
anaconda-ks.cfg  anon_ftptest.txt  local_ftptest.txt  test.txt  virtual_ftptest.txt

【课外知识】建立 vsftpd 服务的日志文件。

在 vsftpd.conf 配置文件添加以下三行并重启

xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/xferlog

[root@huyouba1 vsftpd]# systemctl restart vsftpd

客户端进行交互

[root@ftpclient ~]# ftp 192.168.100.113

Connected to 192.168.100.113 (192.168.100.113).
220 (vsFTPd 3.0.2)
Name (192.168.100.113:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp> cd pub

250 Directory successfully changed.

ftp> ls

227 Entering Passive Mode (192,168,100,113,212,23).
150 Here comes the directory listing.
drwxr-xr-x    2 14       50              6 Feb 25 05:38 anon_ftptest.dir
drwxr-xr-x    2 1000     1000            6 Feb 25 05:49 local_ftptest.dir
-rw-r--r--    1 1000     1000           13 Feb 25 05:49 local_ftptest.txt
226 Directory send OK.

ftp> get anon_ftptest.txt 

local: anon_ftptest.txt remote: anon_ftptest.txt
227 Entering Passive Mode (192,168,100,113,140,114).
550 Failed to open file.

查看日志

[root@huyouba1 vsftpd]# tail /var/log/xferlog 
Tue Feb 25 13:38:43 2020 1 ::ffff:192.168.100.102 13 /pub/anon_ftptest.txt b _ i a ? ftp 0 * c

其他配置:

listen=YES

listen_address=192.168.100.113

listen_port=2121 //设置监听端口

pasv_enable=YES //是否开启被动模式

pasv_min_port=24500 //被动模式端口下线

pasv_max_port=24600 //被动模式端口上限

max_clients = 2000 //最大15000,最大客户连接数,一般不限制

max_per_ip = 2 //每个ip限制最多打开几个客户端工具,一般不限制

anon_max_rate = 50000 //匿名最大传输速率,一般不限制

local_max_rate = 20000 //本地用户最大传输速率,一般不限制

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦