最近一段时间有台设备登录FTP服务器一直失败,如果直接命令行用FTP命令,输入完用户名之后立马就回复421 Service not available,结果如下图所示:

 421是谁回复的

421是FTP的标准命令。一般我们很容易认为这个结果是FTP服务器回复的,但是实际上服务器的421一般对应的描述是timeout,和我们的描述还是有点区别。这个问题通过抓包很容易解决,我们抓个包看下。

我们很容易看到在客户端发了用户名之后,并没有收到服务器发的421命令,反而是收到了服务器发来的RST命令。据此我们推测,FTP客户端工具在收到服务器的RST命令之后,自己将其解析为了 421 Service not available, remote server has closed connection。那现在我们的问题变成了RST命令是谁发的,为什么发这个命令。

RST命令的由来

通过抓包工具来看,很显然这个命令是服务器发的。但是我通过在服务器抓包,诡异的情况出现了,服务器的抓包日志显示是客户端发了RST命令。显然这是不合逻辑的。在参考了https://www.cnblogs.com/yurang/p/11980464.html文章后,我们基本可以认为是中间的网络安全设备模拟服务器给客户端发了RST命令,并模拟客户端也给服务器发了RST命令(通过TTL可以大概判断,RST的TTL和普通命令的TTL明显不一样)。那么问题到此也就明了了,客户端没有问题,服务器也没有问题,命令是网络安全设备拦截了。这个时候还是找对应的运维人员解决吧。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐