如何制作python FTP服务器PUBLIC?

问题描述 投票:2回答:1

我用Pyftpdlib创建了一个FTP服务器,我希望能够从另一个国家/ IP连接到服务器,我试图将我的脚本(以exe格式)上传到该国其他地区的朋友和我无法连接(简单超时/无效错误)。如何连接到不在我附近的ftp服务器?

服务器

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

import mysql.connector
sqlpass = "THIS ISNT THE PASSWORD"

def ftp_main():
    mydb = mysql.connector.connect(
        host="remotemysql.com",
        port="3306",
        user="NOT TELLING",
        passwd=sqlpass,
        database="NO THANKS"
    )
    mycursor = mydb.cursor()

    mycursor.execute("SELECT Username, Password FROM NO-THANKS")
    myresult = mycursor.fetchall()
    Username, Password = myresult[0]
    print(Username + " " + Password)


    authorizer = DummyAuthorizer()


    authorizer.add_user(Username, Password, 'C:/', perm='elradfmwMT')
    authorizer.add_anonymous('C:/')


    handler = FTPHandler
    handler.authorizer = authorizer

    handler.banner = "Test Banner"



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


    # start ftp server
    server.serve_forever()


ftp_main()

客户

from ftplib import FTP

ftp = FTP('104.193.20.211')
ftp.login("user", "pass")

ftp.retrlines('LIST')
ftp.cwd("Users/TEST/Desktop")
ftp.retrlines('LIST')

getfile = 'test1.txt'
command = 'RETR'

ftp.retrbinary(command + " " + getfile, open('test1.txt', 'wb').write)

我希望连接并能够列出文件,但我无法连接。

python-3.x ftp ftp-server
1个回答
2
投票

(根据你的说法我假设它只在你连接到远程网络时不起作用。)

因为你有连接问题,似乎问题是由网络引起的。从编程的角度来看,无论您是否连接到本地网络上的IP都无关紧要。

检查这些可能的问题:

  • 服务器落后于NAT:典型的消费者路由器在公共和私有地址之间执行网络地址转换。当您的ISP为您提供单个IP但您想要使用多个设备时,它很有用。当典型的家庭路由器看到从本地计算机到互联网某处的数据包时,它会将其源IP更改为ISP提供的IP,必要时更改源端口,并记住此连接。路由器以后可以使用这些记住的信息在回复到来时将所有内容翻译回来。在这种情况下,您只能从本地网络内部创建连接。如果要从Internet接收连接,则必须明确设置本地网络上的哪台计算机应该接收此连接。在路由器设置中搜索“端口转发”或“虚拟服务器”或类似的东西。某些协议(如FTP)具有带有NAT的problems,您的路由器将需要支持这些应用程序协议。
  • 网络上有防火墙,或者服务器端的操作系统不允许使用低端口号(这种可能性较小。在服务器端可能会出现一些错误)。
© www.soinside.com 2019 - 2024. All rights reserved.