FTP被动模式返回服务器地址为0.0.0.0

本文讲述了作者在配置新项目时遇到FTPPassiveMode地址不匹配的问题,经过排查发现服务器返回的是出口地址而非真实地址,通过修改vsftpd.conf和调整listen和listen_ipv6配置解决了问题。
摘要由CSDN通过智能技术生成

这就是传说中的,老革命遇到新问题。果然在一次证明了我的签名,一个老而没有多大用处的程序员。

今天在配置一个新的项目的时候,发现项目程序所需要FTP无法正常使用。于是自己用命令行进行排查,登录后,用put命令上传文件, 得到了一个错误提示:

Passive mode address mismatch.

于是想当然的认为,肯定是被动模式没有配好,于是上服务器,打开vsftp.conf修改配置,打开被动模式,设置端口范围。 然后配置防火墙,允许端口出入。

搞完这一切,再继续尝试,然而神奇的是,错误依旧:

Passive mode address mismatch.

于是仔细查看了所有的提示,发现put的时候,FTP返回的服务器地址和实际的服务器地址不一致。详情如下:

230 Login successful.
ftp> passive
Passive mode on.
ftp> put *
local: sketch_imu_reader_V5.ino remote: sketch_imu_reader_V5.ino
227 Entering Passive Mode (152,38,148,xx,197,220).
Passive mode address mismatch.
225 No transfer to ABOR.

注意 Passvie Mode 里面的6个数字,前四个,是服务器的IP地址 152.38.148.xx(安全起见,最后一个数字我隐藏掉了,用XX代替), 后两个是端口号2个字节的值,实际端口号=197*255+220

由于服务器在云端,显然这个服务器是位于内网的,所以返回的地址是服务器的出口地址而不是真实地址,对于这个问题,很简单,vsftp.conf 里面有一个配置 pasv_address 把它配成服务器的外网地址就好,于是修改配置,大致如下:

listen_port=5617
pasv_enable=YES
pasv_min_port=49000
pasv_max_port=51000
pasv_address=aa.bb.cc.dd

其中,aa.bb.cc.dd 是服务器的实际外网地址。OK,打完收工。

可是,你以为事情就这样结束了,绝对不会这么简单的。

回头用命令行一试,卖糕的,卖芝麻糕的,问题依旧,还是那个扎眼的一行字:

Passive mode address mismatch.

再仔细一看,passive mode后面的提示变成了:

227 Entering Passive Mode (0,0,0,0,197,149).

0.0.0.0 ???! 

为什么pasv_address 没生效?反而搞成了0.0.0.0 ? 仔细一查配置文件,发现配置文件中有这么两个配置:

listen=NO
listen_ipv6=YES

这样的配置,会导致返回的服务器地址被错误按照IPV6解析,从而出错。于是调整过来,变成正确的:

listen=YES
listen_ipv6=NO

再次重启服务。

这下终于对了,客户端得到了正确的服务器地址,文件终于上传成功了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值