簡體   English   中英

Python FTP 服務器:我如何同時支持安全和不安全

[英]Python FTP Server: How do I support both secure and insecure

我可以使用文檔中的示例創建一個響應端口 21(或在此示例中為 2121)的基本 FTP 服務器:

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,而不是原始代碼示例中所示的 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設置的單獨進程。 創建套接字時,它只會嘗試使用給定范圍內的端口,該端口未被系統上的任何其他進程使用。 因此,如果特定端口已被另一服務器進程使用,則一個服務器進程將僅使用另一端口重試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM