ftp(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议族中的一员。ftp协议包括两个组成部分,其一为ftp服务器,其二为ftp客户端。
ftp客户端与服务器创建网络连接,请求登录服务器,登录成功后,就可以进行文件传输。
文件传输的请求由客户端发起,主要包括取文件和发送文件两种操作。
在linux下,ftp客户端和ftp服务端是操作系统自带的,但不一定缺省安装。
在windows下,命令提示符下有ftp客户端命令,但很难用,问题很多,也有第三方客户端软件,如FileZilla、 Cuteftp、Ws_ftp、Flashfxp、Leapftp等。windows版的ftp服务端软件要购买,具体不清楚,ServerU。
主动模式和被动模式
1. 通信端口
利用ftp传输过程中,主要使用到两个端口,一个是控制端口,一个是数据端口,控制端口一般为21,而数据端口不一定是20,这和FTP的应用模式有关,如果是主动模式,就是为20,如果为被动模式,由服务器端和客户端协商而定。
2. 主动模式与被动模式
FTP具有两种模式,分别是port模式(也叫主动模式)和pasv模式(也叫被动模式),怎么来理解这两种模式呢?
在主动模式下:客户端给服务器端的21端口发命令说,我要下载什么什么,并且还会说我已经打开了自己的20端口,你就从这里把东西给我吧,服务器收到后就会连接客户端已打开的20端口把东西传给客户端,这就是主动模式,可以理解为服务端主动给客户端传输文件。
在被动模式下:客户端给服务器端的21端口发命令说,我要下载什么什么,服务器端知道后,就打开一个空闲的高端口,然后告诉客户端,我已经打开了某某端口,你自己进去拿吧,于是客户端就从那个高端口进去拿文件了,这就是被动模式,可以理解为服务端被客户端拿走了东西。
3. 从主动模式到被动模式
在很久以前没有共享上网这种技术,一个电脑一个ip。但是后来出现了,所以也就有了下面的问题。
大家都知道,共享上网就是很多台电脑共享一个公网IP去使用internet,再打个比喻吧,某个局域网络出口的公网IP是210.33.25.108,当一个内网用户192.168.1.100去访问外网的FTP服务器时,如果采用主动模式的话,192.168.1.100告诉了FTP服务器我需要某个文件和我打开了20端口之后,由于共享上网的原因,192.168.1.100在出网关的时候自己的IP地址已经被转换成了210.33.25.108这个公网IP,所以服务器端收到的消息也就是210.33.25.108需要某个文件并打开了20端口,FTP服务器就会往210.33.25.108的20端口传数据,这样当然会连接不成功了,因为打开20端口的并不是192.168.1.100这个地址,在这种情况下被动模式就有用了。
在主动模式中,FTP的两个端口是相对固定的,如果命令端口是n的话,那数据端口就是n-1,也就是说默认情况下,命令端口是21,数据端口就是20,你把命令端口改成了600,那么数据端口就是599。这样使用防火墙就很方便了,只要开通这两个端口就可以了,但是如果客户端是共享上网的话那岂不是不能正常使用FTP了,这样还是不行,一定需要被动模式。
在被动模式中,默认情况下命令端口是21,但是数据端口是随机的。不过,因为被动模式中数据端口的范围是可以自定义的,因此也可以通过端口范围去配置防火墙。
安装ftp客户端
#yum -y install ftp
安装ftp服务器
#yum -y install vsftpd
配置ftp服务器
Linux操作系统的用户即ftp的用户,也可以配置专用的ftp用户,专用的ftp用户只能用于ftp,不能登录操作系统。
1、防火墙开启 21 端口。
不同linux版本防火墙的配置有所不同,centos7中的防火墙改成了firewall。
#firewall-cmd --zone=public --add-port=21/tcp --permanent
命令含义:
--zone # 作用域
--add-port=21/tcp # 添加端口,格式为:端口/通讯协议
--permanent # 永久生效
显示success为成功
如果要采用主动模式,防火墙还要开通20端口。
#firewall-cmd --zone=public --add-port=20/tcp --permanent
2、配置ftp高端口参数
# vi /etc/vsftpd/vsftpd.conf
设置被动模式的高端口范围为5500-6000。
3、防火墙开启5500-6000端口
#firewall-cmd --zone=public --add-port=5500-6000/tcp --permanent
4、关闭 selinux
#vi /etc/selinux/config
修改成 selinux=disabled
执行 setenforce 0 使修改马上生效
5、防火墙服务相关操作
centos7和centos6的服务启停方式也不同,以下是centos7的命令。
#systemctl restart firewalld.service # 重启防火墙
#systemctl stop firewalld.service # 关闭防火墙
#systemctl start firewalld.service # 启动防火墙
#systemctl status firewalld.service # 查看防火墙服务状态
如果防火墙配置不成功,直接关掉它,不用防火墙。
centos7开机禁用防火墙:systemctl enable firewalld.service
centos6开机禁用防火墙:chkconfig iptables off
6、vsftpd服务相关操作
#systemctl start vsftpd # 启动
#systemctl stop vsftpd # 停止
#systectl status vsftpd # 查看
#systemctl enable vsftpd # 开机自动启动vsftpd服务
#systemctl disable vsftpd # 禁用vsftpd服务
ftp常用命令
1. 登录ftp服务器
方法一:输入ftp ip地址,然后输入用户名和密码,如下图:
方法二:输入ftp,用open连上服务器,再输入用户名和密码,如下图:
方法三:输入ftp -n ip地址,用user命令登录,如下图:
进入ftp服务后输入open加ip地址open 118.89.50.198
当连接成功后会让你进行身份验证,在输入密码时屏幕上没有任何显示,不用管,直接输完密码敲回车键即可。
2. 查看ftp服务器上的文件
dir:显示服务器目录和文件列表
ls:显示服务器目录和文件列表
cd:进入服务器指定的目录
lcd:进入本地客户端指定的目录。
dir命令可以使用通配符“*”和“?”,比如,显示当前目录中所有扩展名为jpg的文件,可使用命令 dir *.jpg。
cd命令中必须带目录名。比如 cd /tmp 表示进入/tmp目录
3. 下载文件
ftp的传输模式分为ASCII码方式和二进制方式两种,二进制方式可以传输任何文件,包括压缩包、可执行程序、图片、视频、音频等,而ASCII码方式只能传输.txt、.htm等ascii码文件。在实际开发中,不管什么文件,都用二进制方式传输文件。
type:查看当前的传输方式
ascii:设定传输方式为ASCII码方式
binary:设定传输方式为二进制方式
get/recv:下载单个文件get filename [newname](filename为下载的ftp服务器上的文件名,newname为保存在本都计算机上时使用的名字,如果不指定newname,文件将以原名保存。
get/recv命令下载的文件将保存在本地计算机的工作目录下。该目录是启动ftp客户端时的工作目录目录。如果想修改本地计算机的工作目录,可以使用 lcd 命令。比如:lcd /tmp 表示将工作目录设定/tmp/目录。
mget:下载多个文件mget filename [filename ....](mget命令支持通配符“*”和“?”,比如:mget *.jpg 表示下载ftp服务器当前目录下的所有扩展名为jpg的文件。)
prompt:关闭/打开互交提示。
4. 上传文件
put/send:上传单个文件put filename [newname]
filename为上传的本地文件名,newname为上传至ftp服务器上时使用的名字,如果不指定newname,文件将以原名上传。
mput:上传多个文件mput filename [filename ....]
mput命令支持通配符“*”和“?”,比如:mput *.jpg 表示上传客户端服务器当前目录下的所有扩展名为jpg的文件。
prompt:关闭/打开互交提示。
5. 结束并退出ftp
bye:结束与服务器的ftp会话并退出ftp环境
6. 其它ftp命令
pwd:查看ftp服务器上的当前工作目录
rename filename newfilename:重命名ftp服务器上的文件
delete filename:删除ftp服务器上一个文件。
mdelete [remote-files] :删除多个文件。
mkdir pathname:在服务器上创建目录。
rmdir pathname:删除服务器上的目录。
passive:主动模式与被动模式切换。
nlist:列出服务器目录中的文件名,如:nlist /home/wucz /tmp/tmp.list,表示把服务器上/home/wucz目录下的文件列出来,结果输出到本地的/tmp/tmp.list文件中。
help [cmd]:显示ftp命令的帮助信息,cmd是命令名,如果不带参数,则显示所有ftp命令。
windows登录ftp
windows的命令提示符下有ftp客户端程序,但是不好用。
采用资源管理器,输入:ftp://服务器ip,如下图:
在空白的位置点鼠标右键,选择登录菜单,如下图:
输入用户名和密码登录ftp服务器,如下图:
接下来的操作就像windows的目录文件操作一样了。
版权声明
作者:码农有道
如果文章有错别字,或者内容有误,或其他的建议或意见,请您留言指正,非常感谢!!!
标签:ftp,被动模式,文件,端口,常用命令,服务器,客户端 From: https://blog.51cto.com/u_13748800/5878685