参考资料:
https://tools.ietf.org/html/rfc2428
当知道了ftp有主动模式、被动模式,而且能在合适的时候选择使用合适的模式时,觉得自己NB了不少,然后在写简历的时候就写“精通ftp”。
突然,有一天,使用curl拉取ftp服务器上的文件,主动模式和被动模式都不好使了,但是使用原始的ftp client却没有问题,遂无所适从。
抓包分析发现,其实,二者差别不太大,就主动模式来讲,curl使用的是EPORT指令,而命令行ftp使用的是PORT 指令,没准儿问题就出现在这里;curl提供了一个–disable-eprt 选项,添加该选项,curl便不再使用EPORT 而是使用PORT了,问题解决;相应地,curl还有一个–disable-epsv 选项,告知curl在被动模式下,使用PSV 而不是EPSV;
E 即: extend
为了迎接ipv6的到来,ftp命令也做了一些支持ipv6的扩展,就比如说是EPORT、EPSV,但是有些ftp服务器可能不支持该特性或是禁用了该特性,这时候就只好退而求其次了
squid是一个很经典的代理,是支持ftp的,默认情况下是使用的新的ftp指令,如果遇到上述情况,可以通过修改squid配置文件来禁用扩展的指令: ftp_eprt off 或 ftp_epsv off ( http://www.squid-cache.org/Doc/config/ftp_eprt/ )