|
@@ -28,7 +28,7 @@ class SHA256Authorizer(pyftpdlib.authorizers.DummyAuthorizer):
|
|
|
raise pyftpdlib.authorizers.AuthenticationFailed()
|
|
|
|
|
|
|
|
|
-def serve(root_dir_path, username, password_sha256_hexdigest, control_port, passive_port, log_level):
|
|
|
+def serve(root_dir_path, username, password_sha256_hexdigest, control_port, passive_port, passive_address, log_level):
|
|
|
logging.basicConfig(level=log_level)
|
|
|
assert os.path.isdir(root_dir_path), root_dir_path
|
|
|
authorizer = SHA256Authorizer()
|
|
@@ -47,8 +47,8 @@ def serve(root_dir_path, username, password_sha256_hexdigest, control_port, pass
|
|
|
handler = pyftpdlib.handlers.FTPHandler
|
|
|
handler.authorizer = authorizer
|
|
|
handler.banner = 'ni hao'
|
|
|
- # handler.masquerade_address = '192.168.1.1'
|
|
|
handler.passive_ports = (passive_port,)
|
|
|
+ handler.masquerade_address = passive_address
|
|
|
server = pyftpdlib.servers.FTPServer((None, control_port), handler)
|
|
|
# apparently requires +1 for unknown reasons
|
|
|
server.max_cons = 1 + 1
|
|
@@ -107,7 +107,17 @@ def _init_argparser():
|
|
|
envvar='FTP_PASSIVE_PORT',
|
|
|
default=62121,
|
|
|
help='port for passive (PASV) & extended passive (EPSV) mode;'
|
|
|
- +' default: env var $FTP_PASSIVE_PORT or 62121',
|
|
|
+ + ' default: env var $FTP_PASSIVE_PORT or 62121',
|
|
|
+ )
|
|
|
+ argparser.add_argument(
|
|
|
+ '--pasv-addr', '--passive-address', '--masquerade-address',
|
|
|
+ metavar='ip_address',
|
|
|
+ dest='passive_address',
|
|
|
+ envvar='FTP_PASSIVE_ADDRESS',
|
|
|
+ default=None,
|
|
|
+ help='address returned to client (227)'
|
|
|
+ + ' after opening port for passive mode (PASV)'
|
|
|
+ + ' default: socket\'s own address',
|
|
|
)
|
|
|
argparser.add_argument(
|
|
|
'--log-level',
|