赞
踩
这就是传说中的,老革命遇到新问题。果然在一次证明了我的签名,一个老而没有多大用处的程序员。
今天在配置一个新的项目的时候,发现项目程序所需要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
再次重启服务。
这下终于对了,客户端得到嘞正确的服务器地址,文件终于上传成功了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。