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
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
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
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)
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
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 = []
# 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 = []
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 = []
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)
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: