zoukankan      html  css  js  c++  java
  • vsftpd启动问题简记

    centos7 能以ipv6方式启动,启动只需修改配置如下

    如需同时启动到ipv4跟ipv6,需拷贝配置文件,一份配置中只监听ipv4,一份配置中只监听ipv6

    centos6中无法启动到ipv6,错误如下,20,21端口也没被其它程序占用:

    以ipv4的方式启动vsftpd,在获取文件信息,下载文件,只能以主动模式运行,而ipv6可以以被动模式运行

    python中ftplib进行ftp的代码(下载文件,获取文件信息),设为主动模式i,在window能正常运行,但是放到Linux下就跑不起来,会报“500 Illegal PORT command”,如果使用ftp工具,目标服务器是能进行文件上传下载的,具体需要看下ftplib的说明文档

    写了一个工具类,有点乱

    #encoding=utf8
    import os, re, ftplib
    from config import MRedis, MCoding
    
    class MFTP():
        def __init__(self, host, username=None, password=None, del_remote=False, pasv=False):
            self.host = host
            self.username = username
            self.password = password
            self.del_remote = del_remote
            self.ftp = ftplib.FTP(host)
            self.ftp.set_pasv(pasv)
            self.ftp.login() if self.username==None else self.ftp.login(username, password)
    
        def download_file(self, remote_url, local_dir):#centos
            try:
                file_name = remote_url.split('/').pop()
                local_file = (local_dir + '/' + remote_url).decode('utf8', "ignore").encode(MCoding, "ignore")
                remote_url = remote_url.replace(file_name, '')
                self.ftp.cwd('~/' + remote_url)
                buffsize = 1024
                fp = open(local_file, 'wb')
                self.ftp.retrbinary('RETR %s' % file_name, fp.write, buffsize)
                fp.close()
                if self.del_remote:
                    print '删除文件:', remote_url, ':', file_name, '当前路径:', self.ftp.pwd()
                    self.ftp.delete(file_name)
            except BaseException as e:
                print '发生异常:', e
    
        def download_dir(self, remote_url, local_dir):#centos
            try:
                local_url = local_dir + '/' + remote_url
                local_url = local_url.decode('utf8', "ignore").encode(MCoding, "ignore")
                print '远程路径', remote_url
                print '本地路径', local_url
                self.ftp.cwd('~/' + remote_url)
    
                if not os.path.exists(local_url):
                    os.mkdir(local_url)
    
                dirs = []
                self.ftp.dir('', '.', dirs.append)
                for i in dirs:
                    f_name = i.split(' ').pop()
                    rusult = re.match('^dr.*', i)
                    if rusult:
                        print '文件夹下载:', remote_url
                        self.download_dir(remote_url + '/' + f_name, local_dir)
                    else:
                        print '文件下载:', remote_url, '/', i
                        self.download_file(remote_url + '/' + f_name, local_dir)
                if self.del_remote:
                    print '删除文件夹:', remote_url
                    self.ftp.rmd(remote_url.split('/')[-1])
            except BaseException as e:
                print '下载文件夹出错', e
    
        def getDirInfo(self, path):#获取目录下所有文件跟文件夹
            self.ftp.cwd(path)
            result = {'files': [], 'dirs': []}
            dirs = []
            self.ftp.dir('', '.', dirs.append)
            for dir in dirs:
                name = dir.split(' ').pop()
                if re.match('^dr.*', dir):
                    result['dirs'].append(name)
                else:
                    result['files'].append(name)
            return result
    
        def upload_file(self, file_name, remote_path, local_path):
            bufsize = 1024
            fp = open(local_path+'/'+file_name, 'rb')
            self.ftp.storbinary('STOR ' + remote_path+'/'+file_name, fp, bufsize)
            self.ftp.set_debuglevel(0)
    
        def close(self):
            self.ftp.close()
    
    
    def down_dir_test(local_url):#下载测试
        host = '***'
        username = '***'
        password = '***'
        mftp = MFTP(host, username, password, True)
        mftp.download_dir('', local_url)
    
    
    def del_dir(ftp, dirName):#删除文件夹
        ftp.cwd(dirName)
    
    
    def down_all(local_url):#同步文件到本地
        from config import dbsession
        slaves = dbsession.execute('select ftp_host, ftp_user, ftp_pwd, centos from slave')
        for slave in slaves:
            print slave.ftp_host, slave.ftp_user, slave.ftp_pwd
            MRedis.hset('ftp', slave.ftp_host, 'ftping')
            mftp = MFTP(slave.ftp_host, slave.ftp_user, slave.ftp_pwd, pasv='centos7' in slave.centos)
            try:
                print '本地路径', local_url
                mftp.download_dir('file', local_url)
            except BaseException as e:
                print 'error', e
            finally:
                MRedis.hset('ftp', slave.ftp_host, 'complete')
                mftp.close()
    
    
    def upload_file(file_name, remote_path, local_path):#上传文件测试
        host = '***'
        # host = '***'
        username = '***'
        password = '***'
        mftp = MFTP(host, username, password, True)
        mftp.upload_file(file_name, remote_path, local_path)
        mftp.close()
    
    
    def upload_file_all(file_name, remote_path, local_path):#同步爬虫文件到其他从机
        from config import dbsession
        slaves = dbsession.execute('select ftp_host, ftp_user, ftp_pwd, centos from slave')
        for slave in slaves:
            if 'centos6' in slave.centos:  # centos6直接跳过
                continue
            mftp = MFTP(slave.ftp_host, slave.ftp_user, slave.ftp_pwd, pasv=True)
            try:
                mftp.upload_file(file_name, remote_path, local_path)
                print "同步文件成功"
            except BaseException as e:
                print '同步文件失败'
                print e
            finally:
                mftp.close()
    
    def del_file(file_name):
        host = '***'
        username = '***'
        password = '***'
        mftp = MFTP(host, username, password).ftp
    
        mftp.rmd('test_data')
        mftp.cwd('test_data')
        files = []
        mftp.dir('', '.', files.append)
        for f in files:
            f = f.split(' ').pop()
            try:
                mftp.delete(f)
                print '删除%s成功' %f
            except:
                print '删除%s失败' %f
        mftp.cwd('..')
        mftp.close()
    
    def getInfoTest():
        host = '***'
        username = '***'
        password = '***'
        mftp = MFTP(host, username, password, True)
        print mftp.getDirInfo('~')
    
    if __name__ == '__main__':
        local_url = 'E:/test_data'
        # local_url = '/root/ftp_test'
        down_all(local_url)
        # down_dir_test(local_url)
        # upload_file('1.txt', '', r'E:	est_data')
        # upload_file('1.txt', '', r'E:	est_data')
        # del_file('batj_yb.py')
        # print 'end'
        # getInfoTest()
    View Code
  • 相关阅读:
    array_map()与array_shift()搭配使用 PK array_column()函数
    Educational Codeforces Round 8 D. Magic Numbers
    hdu 1171 Big Event in HDU
    hdu 2844 poj 1742 Coins
    hdu 3591 The trouble of Xiaoqian
    hdu 2079 选课时间
    hdu 2191 珍惜现在,感恩生活 多重背包入门题
    hdu 5429 Geometric Progression 高精度浮点数(java版本)
    【BZOJ】1002: [FJOI2007]轮状病毒 递推+高精度
    hdu::1002 A + B Problem II
  • 原文地址:https://www.cnblogs.com/lurenjia1994/p/10282364.html
Copyright © 2011-2022 走看看