python - pyftpdlib kører, men synes ikke at lytte på porten, men andre ftp server apps fungerer

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at bygge en ftp-server, der kører i Python på Windows. Jeg tog det grundlæggende eksempel på pyftpdlib, som du ser nedenfor.


import os
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer

def main():
    # Instantiate a dummy authorizer for managing 'virtual' users
    authorizer = DummyAuthorizer()

    # Define a new user having full r/w permissions and a read-only
    # anonymous user
    authorizer.add\_user('user', '12345', "c:\temp", perm='elradfmwM')
    authorizer.add\_anonymous(os.getcwd())

    # Instantiate FTP handler class
    handler = FTPHandler
    handler.authorizer = authorizer

    # Define a customized banner (string returned when client connects)
    handler.banner = "pyftpdlib based ftpd ready."

    # Specify a masquerade address and the range of ports to use for
    # passive connections.  Decomment in case you're behind a NAT.
    #handler.masquerade\_address = '151.25.42.11'
    #handler.passive\_ports = range(60000, 65535)

    # Instantiate FTP server class and listen on 0.0.0.0:2121
    address = ('', 21)
    server = FTPServer(address, handler)

    # set a limit for connections
    server.max\_cons = 256
    server.max\_cons\_per\_ip = 5

    # start ftp server
    server.serve\_forever()

if \_\_name\_\_ == '\_\_main\_\_':
    main()


Når det kører/udføres, ser det ud til at vente, intet andet bruger port 21. Se output nedenfor fra processen.


[I 2017-04-17 19:05:55] >>> starting FTP server on :::21, pid=43124 <<<
[I 2017-04-17 19:05:55] concurrency model: async
[I 2017-04-17 19:05:55] masquerade (NAT) address: None
[I 2017-04-17 19:05:55] passive ports: None


Men fra en ekstern windows vært kan jeg ikke telnet til port 21 på værten hvor pyftpdlib script kører. Jeg har en anden separat standalone ftp-server .exe til Windows kører, og det fungerer fint Jeg kan telnet fra fjernvinduet vært til port 21 på værten jeg kan ikke få pyftpdlib for at køre ordentligt på det, så jeg ved det 'er ikke nogen FW- eller netværksproblemer.


Jeg skraber virkelig mit hoved på, hvorfor dette modul pyftpdlib ikke virker.

Bedste reference


Måske er det fordi det lytter på en IPv6-adresse. Prøv at ændre dette:


address = ('', 21)


Til dette:


address = ('0.0.0.0', 21)