近来突然萌生了搭建一个博客的想法,便委托朋友帮我在他的服务器上搭了一个Typecho,博客地址。
等他帮助我搭建完成以后,便给我开了一个FTP账号,方便让我自己上传文件。
在得到该FTP的账号密码之后,我便开始了此次登录FTP服务器的艰难历程。
说起FTP,我第一反应是直接通过 Windows自带的文件资源管理器或者浏览器来登录FTP,主要是懒不想下载第三方软件。
在经历了N次打开浏览器(文件资源管理器)——输入账号密码后,出现了登录成功但是无法显示文件的问题。
对此现象,我的猜测是:Windows的文件资源管理器或浏览器可能无法直接连接FTP,应该需要下载第三方的软件。
然后我便打开浏览器,开始搜寻好用、免费的FTP客户端。
首先,我下载了 FileZilla 这个软件,官网下载地址
经过一系列的下载、安装之后,我打开了该软件。正确填入FTP地址、用户名、密码,提示登录成功。在我以为一切都是这么顺利的时候,出现了状况:提示读取目录列表失败。
状态: 正在连接 xxx.xxx.xxx.xxx:21…
状态: 连接建立,等待欢迎消息…
状态: 明文 FTP 不安全。请切换到 FTP over TLS。
状态: 已登录
状态: 读取目录列表…
命令: PWD
响应: 257 “/” is your current location
命令: TYPE I
响应: 200 TYPE is now 8-bit binary
命令: PORT xxx,xxx,xxx,xxx,xx,xxx
响应: 200 PORT command successful
命令: MLSD
错误: 20 秒后无活动,连接超时
错误: 读取目录列表失败
我一开始以为是个小问题,然后问我朋友解决方案,他告诉我需要改成主动模式。我在听从他的建议后,改成了主动模式。然后登录,依旧是在“错误:读取目录列表失败”这个步骤断开连接。
然后我开始借助搜索引擎的力量开始搜索。
在通过Bing搜索和Baidu搜索后,我发现网络上的解决办法大同小异,主要解决方式为如下几个:
于是我便开始依次尝试以上的解决方案。
在尝试完方案2和方案3后,读取目录失败的问题依旧没有解决,然而时间已经很晚。于是便决定第二天去公司后,使用公司的电脑和网络进行尝试。
第二天,在公司忙完手头上的工作后,便开始继续着手解决该问题。首先下载FileZilla软件,验证是否可以正常使用。在经历下载——安装——输入FTP地址、用户名和密码后,也出现了“读取目录列表失败”的问题。于是我开始按照Step 1的方式来进行尝试。
在使用Step 1中第二个方案,也就是通过修改软件的限制本地端口的方式,我成功连接到了FTP服务器并读取了目录列表。到这里,我开始琢磨,为什么家里的电脑,使用同样的方式,只能连接上服务器,但是无法读取目录。
回到家里,我便再一次打开了FileZilla软件,开始重新限制本地端口60000-65535。并且在限制本地端口后,进入Windows 的高级安全 Windows Defender 防火墙,添加了一条入站规则,同时放开了UDP和TCP的60000-65535端口。然而不幸的是,在连接FTP服务器的过程中,还是出现了登陆成功,但是无法读取目录的情况。
到这里,我所搜寻到的网上所有的解决方式对我都无效。我便开始自己琢磨。
首先寻求朋友的帮助,他表示先换个软件试试,可能是软件的问题。于是我便下载了另外两个软件WinSCP和Xftp
在使用这两个软件之后,能登陆成功但是无法读取目录的问题依旧出现。
WinSCP提示失去连接。列出’/'的目录项时出错,软件截图如图一:
Xftp提示无法显示远程文件夹,软件截图如图二:
这个问题依旧存在!!!
作为一名刚入门的网络工程师,网络的知识多少懂一点。于是我便打开了Wireshark,尝试进行抓包,看能不能从抓包中获取到有用的线索。经过一番操作后,抓出来的几个数据包引起了我的注意,如下图:
在图三,编号5223的这个包返回的时候报文内容有如下字样:Could not open data connection to port 14821……“无法打开到端口14821的数据连接……”。数据连接?欸,好像哪里不对???。
众所周知,FTP在连接和传输数据分别用到了两个不同的端口21和20。其中,21用于连接,20用于传输数据。那既然这里写的是无法打开到端口14821的数据连接,那么就很有可能是TCP 20这个传输数据的端口出了问题。
和端口相关的软件和硬件一般都有哪些呢?杀毒软件、防火墙、路由器、光猫。我便开始一个个的开始排查:
截止到现在,本地的软件和网络部分都已经查完了,都没有问题,难道是路由器或者光猫上出现了问题?想到这一点后,我立刻打开浏览器,登录上了路由器和光猫的管理页面,开始查看路由器和光猫的设置:
经过为期两天的查找,最终还是解决了该问题。没想到这么简单的一个问题,居然出现在了最容易忽略的地方,毕竟一开始谁能想到去查光猫呢。果然,解决问题的最好方式,还是自己去动手尝试。虽然可能效率不高且解决过程满是曲折,但是解决的过程总是充满乐趣。
朋友的Blog:梦笑颜の博客