下面是一段ftp上传代码:
import os
import os.path
import ftplib
from ftplib import FTP
def ftp_win_up(filename):
ftp=FTP()
ftp.set_debuglevel(2)
ftp.connect('10.44.34.12','21')
ftp.login('laoding','123456')
try:
ftp.cwd('/demo/test')
except ftplib.error_perm:
try:
ftp.mkd('/demo/test')
ftp.cwd('/demo/test')
except ftplib.error_perm:
print ('U have no authority to make dir')
return
bufsize = 1024
file_handler = open(filename,'rb')
ftp.storbinary('STOR %s' % os.path.basename(filename),file_handler,bufsize)
ftp.set_debuglevel(2)
file_handler.close()
ftp.quit()
print ("ftp win up OK")
if __name__ == "__main__":
ftp_win_up('C:\\Users\\Administrator\\Desktop\\team\\lx_music.exe')
报错如下:
ftplib.error_temp: 425 Failed to establish connection.
解决,修改代码如下:
ftp=FTP()
ftp.set_pasv(False)
#设置pasv是一个布尔值标志,为True表示打开被动模式, 为False表示关闭被动模式。
#默认情况下,被动模式为打开状态。
ftp.set_debuglevel(2)
ftp.connect('10.44.34.12','21')
ftp.login('laoding','123456')
很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;
而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。