Python FTP 服务器:我如何同时支持安全和不安全
Python FTP Server: How do I support both secure and insecure
我可以使用文档中的示例制作一个基本的 FTP 服务器来响应端口 21(或本例中的 2121):
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
from pyftpdlib.contrib.authorizers import WindowsAuthorizer
def main():
authorizer = WindowsAuthorizer()
# Use Guest user with empty password to handle anonymous sessions.
# Guest user must be enabled first, empty password set and profile
# directory specified.
#authorizer = WindowsAuthorizer(anonymous_user="Guest", anonymous_password="")
handler = FTPHandler
handler.authorizer = authorizer
server = FTPServer(('', 2121), handler)
server.serve_forever()
if __name__ == "__main__":
main()
或者我可以制作一个支持 TLS 的(同样这是来自文档的示例,除了我们的安全 FTP 端口是 990,而不是 original code sample 中显示的 21):
from pyftpdlib.servers import FTPServer
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.contrib.handlers import TLS_FTPHandler
def main():
authorizer = DummyAuthorizer()
authorizer.add_user('user', '12345', '.', perm='elradfmw')
authorizer.add_anonymous('.')
handler = TLS_FTPHandler
handler.certfile = 'keycert.pem'
handler.authorizer = authorizer
# requires SSL for both control and data channel
#handler.tls_control_required = True
#handler.tls_data_required = True
server = FTPServer(('', 990), handler)
server.serve_forever()
if __name__ == '__main__':
main()
有没有一种方法可以在共享一系列被动端口的同一脚本中制作一个回答端口 21(不安全)和 990(使用 TLS 保护)的方法,例如:
handler.passive_ports = range(50000, 50051)
我想我可以编写两个脚本,但如果它们共享被动端口范围,它将如何工作?该范围是一项要求,我们使用的当前 IIS 设置同时支持 TLS 和不安全连接。我想在自定义服务器中使用 pyftpdlib,以便我们可以对上传的文件执行自定义逻辑。一切正常,我只需要了解最后一点,我没有编写 FTP 服务器的经验。
无需在同一个进程中同时使用两种服务器,但您可以简单地使用具有相同 passive_ports
设置的不同进程。创建套接字时,它只会尝试使用给定范围内的端口,该端口未被系统上的任何其他进程使用。因此,如果特定端口已被另一个服务器进程使用,则一个服务器进程将仅使用另一个端口重试。
我可以使用文档中的示例制作一个基本的 FTP 服务器来响应端口 21(或本例中的 2121):
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
from pyftpdlib.contrib.authorizers import WindowsAuthorizer
def main():
authorizer = WindowsAuthorizer()
# Use Guest user with empty password to handle anonymous sessions.
# Guest user must be enabled first, empty password set and profile
# directory specified.
#authorizer = WindowsAuthorizer(anonymous_user="Guest", anonymous_password="")
handler = FTPHandler
handler.authorizer = authorizer
server = FTPServer(('', 2121), handler)
server.serve_forever()
if __name__ == "__main__":
main()
或者我可以制作一个支持 TLS 的(同样这是来自文档的示例,除了我们的安全 FTP 端口是 990,而不是 original code sample 中显示的 21):
from pyftpdlib.servers import FTPServer
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.contrib.handlers import TLS_FTPHandler
def main():
authorizer = DummyAuthorizer()
authorizer.add_user('user', '12345', '.', perm='elradfmw')
authorizer.add_anonymous('.')
handler = TLS_FTPHandler
handler.certfile = 'keycert.pem'
handler.authorizer = authorizer
# requires SSL for both control and data channel
#handler.tls_control_required = True
#handler.tls_data_required = True
server = FTPServer(('', 990), handler)
server.serve_forever()
if __name__ == '__main__':
main()
有没有一种方法可以在共享一系列被动端口的同一脚本中制作一个回答端口 21(不安全)和 990(使用 TLS 保护)的方法,例如:
handler.passive_ports = range(50000, 50051)
我想我可以编写两个脚本,但如果它们共享被动端口范围,它将如何工作?该范围是一项要求,我们使用的当前 IIS 设置同时支持 TLS 和不安全连接。我想在自定义服务器中使用 pyftpdlib,以便我们可以对上传的文件执行自定义逻辑。一切正常,我只需要了解最后一点,我没有编写 FTP 服务器的经验。
无需在同一个进程中同时使用两种服务器,但您可以简单地使用具有相同 passive_ports
设置的不同进程。创建套接字时,它只会尝试使用给定范围内的端口,该端口未被系统上的任何其他进程使用。因此,如果特定端口已被另一个服务器进程使用,则一个服务器进程将仅使用另一个端口重试。