最近使用命令行ftp命令连接FTP服务器进行文件下载时,出现了421 Could not create socket,Passive mode refused 。因为使用ftp客户端登录FTP服务器的时候,模式使用passive (被动)模式,这个模式是服务器开启一个端口,客户端来连接,这种情况一般是不会出现问题的,因为一般服务器是不会开启防火墙的。而主动模式是服务器主动连接客户端,如果这时客户端有防火墙保护,那么服务器就连接不上客户端,导致连接失败。
#登录的时候能正常登录,在查询文件列表时出错
ftp>ls
421 Clould not create socket
Passive mode refused
ftp>
#passive可以切换被动模式的开关,默认开启
ftp>passive
Passive mode off
ftp>passive
Passive mode on
于是我切换为主动模式进行连接,这个时候,不出现421错误了,客户端也显示通信消息发送成功了,但是会一直卡在接收服务器消息那里,这也好理解,因为我客户端有防火墙保护,ftp协商出来的端口没有被开放,服务器就连接不了客户端开放的端口,就会出现这种情况。
这里拓展一下FTP的连接机制吧,FTP分为两种连接方式:被动模式和主动模式,主动还是被动的选择权在客户端这边,主动被动这两个词主要是站在FTP服务器的视角说的,被动模式就是FTP服务器开启对应的端口,客户端来连接服务器,主动模式是客户端开启对应的端口,