最近有同事在使用Android 4.0.4手机的“tethering” 时遇到了一个问题--FTP可以登录成功,但是无法查看文件“dir , ls”,自己验证了一下,无论是Windows XP, Win 7都不能工作,google一把,发现windows只支持主动模式,不支持被动模式。用linux实验了一下,被动模式可以工作(pftp 或者 ftp -p)。网上大部分都说是防火墙的原因,有列举如何配置防火墙的,但是想想我的 Android手机 kernel是linux, 防火墙是什么呢?应该就是关于iptable, ip filter等等吧。借了一台Galaxy nexus 实验,可以使用“ls, dir”,靠看来是我们的手机配置问题,查看iptable对比,一模一样,怎么办呢?
于是抓iplog ,发现如下erro " 425 Unable to build data con":
610 2012-06-28 15:32:13.087518 192.168.13.96 122.200.68.240 FTP 74 Request: LIST615 2012-06-28 15:32:16.055640 122.200.68.240 192.168.13.96 FTP 125 Response: 425 Unable to build data connection
对“425 Unable to build data conection”解释的很好的文章:
http://www.trapstone.com/articles/windows_ftp_425_connection_refused
于是开始补充FTP Active mode, Passive mode知识: http://space.itpub.net/4670/viewspace-310375 随便网上搜,可以学习一下。
http://www.trapstone.com/articles/windows_ftp_425_connection_refused
最好没有办法了,想想会不会跟NAT有关系,估计只能在kernel里解决了,我想FTP 对于linux kernel应该是小菜,怎么可能不支持呢,应该是没有打开一些配置选项吧,搜索一下有NAT_FTP的选项没有打开,打开后重新编译,验证果然可以工作了,见下面:
首先:make menuconfig
然后添加:
CONFIG_NF_CONNTRACK_FTP=y
CONFIG_NF_NAT_FTP=y
编译kernel, 替换验证。