2016-03-21 34 views
1

İskele cevaplar temel bir FTP sunucusu yapabilir güvensiz hem 21 (veya bu örnekte 2121 yılında) belgelerinden numune kullanılarak:Python FTP Sunucusu: Nasıl destekleyen yapmak güvenli ve

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() 

Ya da ben can

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() 

portu 21 cevapları biri yapmak için bir yol var mı: (güvenli FTP portu original code sample gösterildiği gibi değil, 21 990 olduğu dışında yine bu dokümanlardan örnektir) TLS destekler biri yapmak (güvensiz) VE 990 (TLS ile güvence altına alınmış) aynı senaryoda bir dizi paylaştıkları örneğin pasif portları,: Ben iki komut dosyaları yazabilirsiniz ama pasif noktası aralığını paylaşıyorsanız nasıl işe yarayacak hayal

handler.passive_ports = range(50000, 50051) 

? Bu aralık bir gereksinimdir ve kullandığımız mevcut IIS kurulumu hem TLS hem de güvenli olmayan bağlantıları desteklemektedir. Özel bir sunucuda pyftpdlib kullanmak istiyorum, böylece yüklenen dosyalarda özel mantık yapabiliriz. Tüm bu iyi çalışıyor, sadece bu son biraz anlamak gerekir ve FTP sunucuları yazılı deneyimim yok.

+0

İş parçacığıyla uğraştım ama her iki iş parçacığı başlatmaya çalışırken sorun yaşadım. Bu yüzden hata ayıklamayı kolaylaştıran iki betik yaptım. Onlar * aynı pasif aralıkta yeterince mutlu görünüyorlar ama ben henüz bu kadar zor vurmadım ama bir sürü yükleme. Yarın daha iyi bir yolu olmadığı sürece yarın deneyeceğim (OP'nin noktası). –

cevap

1

Aynı işlem içinde her iki sunucu türüne de gerek yoktur, ancak aynı işlemleri passive_ports ayarıyla da kullanabilirsiniz. Bir soket oluştururken, sistemde başka bir işlem tarafından kullanılmayan, verilen aralıktaki bir bağlantı noktasını kullanmayı deneyecektir. Bu nedenle, bir sunucu işlemi diğer sunucu işlemi tarafından zaten kullanılıyorsa, başka bir bağlantı noktasıyla yeniden deneyecektir.

+0

Gerçekten bilmem gereken bu. –