python ftp/ssh checker

Discussion in 'Безопасность и Анонимность' started by shimizu, 13 Jul 2009.

  1. shimizu

    shimizu New Member

    Joined:
    12 Jul 2009
    Messages:
    1
    Likes Received:
    1
    Reputations:
    0
    для работы нужны модули paramiko и progressbar

    Code:
    #!/usr/bin/env python
    
    """
    sh.imizu@yahoo.com
    """
    
    import sys
    import socket
    import paramiko
    import optparse
    import logging
    import ftplib
    import fileinput
    import progressbar as bar
    from multiprocessing import Pool, log_to_stderr
    from urlparse import urlparse
    
    
    def parse(file):
        f = fileinput.input([file])
        q = []
        try:
            for line in f:
                u = urlparse("ftp://" + line[:-1])
                try: q.append((u.username,u.password,u.hostname,u.port))
                except ValueError: pass
        except IOError:
             print "The file does not exist, exiting gracefully."
             sys.exit()
        f.close()
        q[:] = [x for x in q if x is not None]
        return q
        
        
    def ssh_check(q):
        on = False
        port = 22
        try:
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh.connect(q[2], username=q[0], password=q[1], port=port, timeout=timeout)
            on = True
            ssh.close()
        except:
            pass
        return on,q
    
    def ftp_check(q):
        on = False
        if q[3]: port = q[3]
        else: port = 21
        try:
            socket.setdefaulttimeout = timeout
            ftp = ftplib.FTP(q[2],timeout=timeout)
            ftp.login(q[0], q[1])
            on = True
            ftp.close()
        except:
            pass
        
        return on,q
        
    def write_(a,b):
        f = open ( output + "-true", 'w' )
        for aa in a:
            f.write("+++\t%s:%s@%s\n" % (aa[0],aa[1],aa[2]))
        f.close()
        
        fb = open ( output + "-false", 'w' )
        for bb in b:
            fb.write("---\t%s:%s@%s\n" % (bb[0],bb[1],bb[2]))
        fb.close()
        
        
    def spawn(what,parsed,x):
        class line_up():
            def update(self, pbar):
                return "+" + str(len(a)) + "/-" + str(len(b)) + "/" + str(total)
        
        pool = Pool(processes=x)
        a,b,total = [],[],len(parsed)
        widgets = [bar.Percentage(), ' ', bar.Bar(marker='-'),' ', bar.ETA(),' ',line_up()]
        pbar = bar.ProgressBar(widgets=widgets, maxval=total).start()
        results = [pool.apply_async(what, [t]) for t in parsed]
        for r in results:
            try:
                q = r.get()
                if q[0]:
                    a.append(q[1])
                else:
                    b.append(q[1])
                try: pbar.update(len(a) + len(b))
                except AssertionError: pass
            except IndexError:
                pass
        pbar.finish()
        print
        return a,b
    
    def main():
        p = optparse.OptionParser(description='FTP/SSH list checker',
                                prog='py-check',
                                version='0.1',
                                usage='%prog -m ftp/ssh -t num-of-threads -o out-file-prefix')
        p.add_option('-t', type="int", dest="threads", help='Number of threads to spawn', default=5)
        p.add_option('-m', type="string", dest="mode", help='Mode to run: ftp/ssh', default="ssh")
        p.add_option('-o', type="string", dest="output", help='File to store results', default="check")
        p.add_option('-T', type="int", dest="timeout", help='Timeout in seconds', default=10)
        options, arguments = p.parse_args()
        global timeout,output
        timeout,output = options.timeout,options.output
        paramiko.util.log_to_file('/dev/null')
        if len(arguments) == 1:
            if options.mode == "ssh":
                what = ssh_check
            elif options.mode == "ftp":
                what = ftp_check
            else:
                what = ssh_check
            a, b = spawn(what,parse(arguments[0]),options.threads)
            write_(a,b)
        else:
            p.print_help()
    
    if __name__ == '__main__':
        main()
    
     
    #1 shimizu, 13 Jul 2009
    Last edited: 13 Jul 2009
    1 person likes this.
  2. RAINUR

    RAINUR New Member

    Joined:
    24 May 2010
    Messages:
    151
    Likes Received:
    0
    Reputations:
    0
    Можно по подробнее??:)