Ich kann einen grundlegenden FTP-Server machen, die Port beantwortet 21 (oder in diesem Beispiel 2121), um die Probe aus der Dokumentation verwendet:Python FTP Server: Wie kann ich unterstützen sowohl sichere als auch unsichere
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()
Oder ich kann macht eine, die TLS unterstützt (auch dies ist die Probe aus der Dokumentation, außer unserem sicher FTP-Port 990 ist, nicht 21 wie in den original code sample dargestellt):
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()
gibt es eine Möglichkeit zu machen, die Port 21 Antworten (unsicher) UND 990 (gesichert mit TLS) im selben Skript, in dem sie einen Bereich von passive Ports, zum Beispiel:
handler.passive_ports = range(50000, 50051)
Ich stelle mir vor, ich könnte zwei Skripte schreiben, aber wie funktioniert es, wenn sie den passiven Port-Bereich teilen? Dieser Bereich ist erforderlich, und das aktuelle IIS-Setup, das wir verwenden, unterstützt sowohl TLS als auch unsichere Verbindungen. Ich möchte pyftpdlib in einem benutzerdefinierten Server verwenden, damit wir benutzerdefinierte Logik für hochgeladene Dateien durchführen können. Alles funktioniert gut, ich muss nur dieses letzte Bit verstehen und ich habe keine Erfahrung mit dem Schreiben von FTP-Servern.
Ich fummelte herum mit Threading, hatte aber Schwierigkeiten, beide Threads gestartet zu bekommen. Also habe ich zwei Skripte gemacht, die das Debuggen erleichtern. Sie scheinen * glücklich genug zu sein auf der gleichen passiven Bandbreite, aber ich habe es noch nicht hart getroffen, aber eine Menge Uploads. Ich werde das morgen versuchen, es sei denn, es gibt einen besseren Weg (der Punkt des OP). –