X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=m_lib%2Fnet%2Fftp%2Fftpscan.py;h=ebff998f72a2c1c50ef0bd03bc537674a18618b4;hb=d6dfcc1897238d60dcde474d5030ef12679ccac8;hp=319660be9d2147c8090f86dd69dd1daa32b9cfe6;hpb=d7c459a9f979c4978cf07ff11056512a852fd61d;p=m_lib.git diff --git a/m_lib/net/ftp/ftpscan.py b/m_lib/net/ftp/ftpscan.py index 319660b..ebff998 100755 --- a/m_lib/net/ftp/ftpscan.py +++ b/m_lib/net/ftp/ftpscan.py @@ -2,8 +2,10 @@ """Recursive FTP scanners""" +from __future__ import print_function +import codecs import ftplib -from m_lib.net.ftp.ftpparse import ftpparse +from .ftpparse import ftpparse class FtpScanError(Exception): pass @@ -60,7 +62,7 @@ class ReconnectingFTPCallWrapper: class ReconnectingFTPWrapper: ReconnectingFTPCallWrapperClass = ReconnectingFTPCallWrapper - def __init__(self, ftp, ftp_server, ftp_port=None, login=None, password=None, ftp_dir='/', tree=None): + def __init__(self, ftp, ftp_server, ftp_port=0, login=None, password=None, ftp_dir='/', tree=None): self._ftp = ftp self._ftp_server = ftp_server self._ftp_port = ftp_port @@ -93,7 +95,7 @@ def _traverse_ftp(ftp, tree, ftp_dir): get_files = GetFiles() try: ftp.dir(get_files) - except ftplib.all_errors, msg: + except ftplib.all_errors as msg: tree.append((ftpscan_error_mark, "Cannot list directory `%s': %s" % (ftp_dir, msg))) return files = get_files.files() @@ -109,18 +111,18 @@ def _traverse_ftp(ftp, tree, ftp_dir): full_path = ftp_dir + '/' + name try: ftp.cwd(name) - except ftplib.error_perm, msg: + except ftplib.error_perm as msg: tree.append((ftpscan_error_mark, "Cannot enter directory `%s': %s" % (full_path, msg))) if isinstance(ftp, ReconnectingFTPWrapper): ftp.cwd("..", False) - except ftplib.all_errors, msg: + except ftplib.all_errors as msg: tree.append((ftpscan_error_mark, "Cannot enter directory `%s': %s" % (full_path, msg))) else: _traverse_ftp(ftp, tree, full_path) ftp.cwd("..") -def ftpscan1(ftp_server, ftp_port=None, login=None, password=None, +def ftpscan1(ftp_server, ftp_port=0, login=None, password=None, ftp_dir='/', passive=None, FTPClass=ftplib.FTP, reconnect=False, ReconnectingFTPWrapperClass=ReconnectingFTPWrapper): """Recursive FTP scan using one-by-one directory traversing. It is slow @@ -134,7 +136,7 @@ def ftpscan1(ftp_server, ftp_port=None, login=None, password=None, ftp = ReconnectingFTPWrapperClass(ftp, ftp_server, ftp_port, login, password, ftp_dir, tree) ftp.connect(ftp_server, ftp_port) ftp.login(login, password) - if ftp_dir <> '/': + if ftp_dir != '/': ftp.cwd(ftp_dir) _traverse_ftp(ftp, tree, ftp_dir) @@ -143,7 +145,7 @@ def ftpscan1(ftp_server, ftp_port=None, login=None, password=None, return tree -def ftpscanrecursive(ftp_server, ftp_port=None, login=None, password=None, +def ftpscanrecursive(ftp_server, ftp_port=0, login=None, password=None, ftp_dir='/', passive=None, FTPClass=ftplib.FTP, reconnect=False): """ Recursive FTP scan using fast LIST -R command. Not all servers supports @@ -154,7 +156,7 @@ def ftpscanrecursive(ftp_server, ftp_port=None, login=None, password=None, ftp.set_pasv(passive) ftp.connect(ftp_server, ftp_port) ftp.login(login, password) - if ftp_dir <> '/': + if ftp_dir != '/': ftp.cwd(ftp_dir) lines = [] @@ -164,7 +166,7 @@ def ftpscanrecursive(ftp_server, ftp_port=None, login=None, password=None, # The server does not implement LIST -R and # treats -R as a name of a directory (-: ftp.quit() - raise FtpScanError, "the server does not implement recursive listing" + raise FtpScanError("the server does not implement recursive listing") ftp.quit() tree = [] @@ -177,7 +179,7 @@ def ftpscanrecursive(ftp_server, ftp_port=None, login=None, password=None, tree.append((current_dir, files)) if line[:2] == "./": line = line[1:] # remove leading dot - elif line[0] <> '/': + elif line[0] != '/': line = '/' + line current_dir = line[:-1] files = [] @@ -192,12 +194,12 @@ def ftpscanrecursive(ftp_server, ftp_port=None, login=None, password=None, tree.append((current_dir, files)) if len(tree) == 1: - raise FtpScanError, "the server ignores -R in LIST" + raise FtpScanError("the server ignores -R in LIST") return tree -def ftpscan(ftp_server, ftp_port=None, login=None, password=None, +def ftpscan(ftp_server, ftp_port=0, login=None, password=None, ftp_dir='/', passive=None, FTPClass=ftplib.FTP): try: return ftpscanrecursive(ftp_server, ftp_port, login, password, ftp_dir, passive, FTPClass) @@ -217,10 +219,10 @@ def test(ftp_server, func, passive=None, reconnect=False): tree = func(ftp_server, passive=passive, reconnect=reconnect) stop_time = time() - print stop_time - start_time + print(stop_time - start_time) logfname = "%s.list" % ftp_server - log = open(logfname, 'w') + log = codecs.open(logfname, 'w', encoding='utf-8') for ftp_dir, files in tree: if ftp_dir == ftpscan_error_mark: @@ -268,16 +270,16 @@ if __name__ == "__main__": else: ftp_server = arguments[0] - print "Scanning", ftp_server + print("Scanning", ftp_server) try: test(ftp_server, ftpscanrecursive, passive) - except FtpScanError, msg: - print "Rescanning due to the error:", msg + except FtpScanError as msg: + print("Rescanning due to the error:", msg) try: test(ftp_server, ftpscan1, passive) except EOFError: - print "Rescanning due to the error: connection reset by peer" + print("Rescanning due to the error: connection reset by peer") test(ftp_server, ftpscan1, passive, True) except EOFError: - print "Rescanning due to the error: connection reset by peer" + print("Rescanning due to the error: connection reset by peer") test(ftp_server, ftpscan1, passive, True)