ftp搭建可以选择windows自带的也可以选择工具如:serv-u,xlight,filezilla server等还可以直接用python开启ftp服务,这个其实很简单。教程也比较多。但是发布外网可以访问有几个坑,ftp默认端口21,分为主动访问和被动访问,主动访问是走21端口,被动访问时走的端口断,可以自己设定。那么问题来了,如果只主动访问只开发ftp服务器的21端口就可以了,如果要支持被动访问那么就需要开发ftp服务器的被动访问的端口断。但是通常安全考虑我们要尽量少开放服务器端口,所以接下来重点讲解开发21端口。

一般工具默认是被动连接的,我在233这台机器上安装了ftp服务及filezilla client连接工具,本机连接采用默认模式即被动模式是可以连接,但是防火墙只开放了21端口,因此局域网内用工具连接233ftp服务是能选主动模式,否则无法连接。

以下是通过python开启ftp服务代码

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

# 新建一个用户组
authorizer = DummyAuthorizer()
# 将用户名,密码,指定目录,权限 添加到里面
# elradfmw
authorizer.add_user("ftp", "234%%", "D:\\report", perm="elradfmw")

# 这个是添加匿名用户,任何人都可以访问,如果去掉的话,需要输入用户名和密码,可以自己尝试
# authorizer.add_anonymous("file")

handler = FTPHandler
handler.authorizer = authorizer
# 6.添加被动端口范围
handler.passive_ports = range(2000,20033)
# 开启服务器
server = FTPServer(("0.0.0.0", 2121), handler)
# set a limit for connections
server.max_cons = 256
server.max_cons_per_ip = 5
server.serve_forever()

ftp服务搭建开启后一定要记得开放防火墙访问端口,开发端口时只需开放你ftp开启的端口,以下windows开放防火墙端口

端口开放后内网就可以通过主动模式连接ftp服务了,实际使用尽量不要还是把端口改下,不要用21

python  客户端连接代码

from ftplib import FTP
import datetime

def ftpconnect(host, username, password):
    ftp = FTP()
    ftp.set_debuglevel(2)
    ftp.connect(host, 2121) #填自己服务的端口号 一般是21
    ftp.login(username, password)
    ftp.set_pasv(False) #主动模式
    print(ftp.getwelcome())
    return ftp

def downloadfile(ftp, remotepath, localpath):
    # 从ftp下载文件
    bufsize = 1024
    fp = open(localpath, 'wb')
    ftp.retrbinary('RETR ' + remotepath, fp.write, bufsize)
    ftp.set_debuglevel(0)
    fp.close()

def uploadfile(ftp, localpath, remotepath):
    # 从本地上传文件到ftp
    bufsize = 1024
    fp = open(localpath, 'rb')
    ftp.storbinary('STOR ' + remotepath, fp, bufsize)
    ftp.set_debuglevel(0)
    fp.close()

if __name__ == "__main__":
    ftp = ftpconnect("192.168.99.233", "ftp", "234%%")
    local_file = 'D:/1.csv'
    target_file = 'platform/1.csv'
    uploadfile(ftp, local_file, target_file)
    # downloadfile(ftp, "服务器文件路径","本地存储路径")
    ftp.quit()

上面是主动模式适合客户端端口完全开放不限制的情况,但是我的客户端机器是阿里云(阿里云严格限制了端口开放)因此被动模式开放服务器端口端跟符合现实

下面详细讲下主动与被动的区别,本质就是主动是客户端开发更多端口,ftp服务器只开放21端口(当然这个21可以自己修改为其它端口)

被动模式就是ftp服务器除了开发21端口外还要开个一个端口断给客户端使用,而客户端不需要开放端口

FTP是仅基于TCP的服务,不支持UDP。 与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是21(命令端口)和20(数据端口)。但FTP工作方式的不同,数据端口并不总是20。这就是主动与被动FTP的最大不同之处。

(一)主动FTP

主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始 监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。

针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP:

1. 任何大于1024的端口到FTP服务器的21端口。(客户端初始化的连接)

2. FTP服务器的21端口到大于1024的端口。 (服务器响应客户端的控制端口)

3. FTP服务器的20端口到大于1024的端口。(服务器端初始化数据连接到客户端的数据端口)

4. 大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)

(二)被动FTP

为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于 被动模式时才启用。

在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。

当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:

1. 从任何大于1024的端口到服务器的21端口 (客户端初始化的连接)

2. 服务器的21端口到任何大于1024的端口 (服务器响应到客户端的控制端口的连接)

3. 从任何大于1024端口到服务器的大于1024端口 (客户端初始化数据连接到服务器指定的任意端口)

4. 服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)

以上关于主动和被动FTP的解释,可以简单概括为以下两点:

1、主动FTP:

命令连接:客户端 >1024端口 -> 服务器 21端口

数据连接:客户端 >1024端口 1024端口 -> 服务器 21端口

数据连接:客户端 >1024端口 -> 服务器 >1024端口

(三) 主动与被动FTP优缺点:

主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的 防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这 个端口很有可能被服务器端的防火墙阻塞掉。

幸运的是,有折衷的办法。既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定 一个有 限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危 险。

简而言之:

主动模式(PORT)和被动模式(PASV)。主动模式是从服务器端向客户端发起连接;被动模式是客户端向服务器端发起连接。两者的共同点是都使用21端口进行用户验证及管理,差别在于传送数据的方式不同,PORT模式的FTP服务器数据端口固定在20,而PASV模式则在1025-65535之间 随机

FTP主动模式与被动模式的解决与原理

FTP是File Transfer Protocol(文件传输协议)的缩写,用来在两台计算机之间互相传送文件。相比于HTTP,FTP协议要复杂得多。复杂的原因,是因为FTP协议要用 到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。

FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。

PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据 时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求, 建立一条数据链路来传送数据。

PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据 时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数 据链路来传送数据。

概括: 
--------------------------------------------------------------------------------
主动模式:服务器向客户端敲门,然后客户端开门
被动模式:客户端向服务器敲门,然后服务器开门
所以,如果你是如果通过代理上网的话,就不能用主动模式,因为服务器敲的是上网代理服务器的门,而不是敲客户端的门
而且有时候,客户端也不是轻易就开门的,因为有防火墙阻挡,除非客户端开放大于1024的高端端口

--------------------------------------------------------------------------------

要用主动模式来下载,请您把下载工具的被动模式(PASV)都不要打勾,用主动模式来下载就OK了,如果在出错,那就被动主动相互转换一下

常见的FTP客户端软件的PASV方式的关闭方法

大部分FTP客户端默认使用PASV方式,PASV模式的意式是被动模式。 在大部分FTP客户端的设置里,常见到的字眼都是“PASV”或“被动模式”。

IE: 工具 -> Internet选项 -> 高级 -> “使用被动FTP”(需要IE6.0以上才支持)。

CuteFTP: Edit -> Setting -> Connection -> Firewall -> “PASV Mode” 
或 File -> Site Manager,在左边选中站点 -> Edit -> “Use PASV mode”

FlashGet: 工具 -> 选项 -> 代理服务器 -> 直接连接 -> 编辑 -> “PASV模式”

FlashFXP: 选项 -> 参数选择 -> 代理/防火墙/标识 -> “使用被动模式” 
或 站点管理 -> 对应站点 -> 选项 -> “使用被动模式” 
或 快速连接 -> 切换 -> “使用被动模式”

LeapFTP: Option ->Preferences -> General->Proxy->Use Pasv Mode

从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。而FTP的复杂性就在于此。

FTP主动模式与被动模式的解决与原理

FTP是File Transfer Protocol(文件传输协议)的缩写,用来在两台计算机之间互相传送文件。相比于HTTP,FTP协议要复杂得多。复杂的原因,是因为FTP协议要用 到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。

FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。

PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据 时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求, 建立一条数据链路来传送数据。

PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据 时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数 据链路来传送数据。

ftp搭建发布到外网踩坑记相关推荐

  1. Windows上如何搭建web网站,并发布到外网可访问?1-2

    系列文章 Windows用户如何安装使用cpolar内网穿透? Windows上如何搭建web网站,并发布到外网可访问?1-2 Windows上如何搭建web网站,并发布到外网可访问?2-2 Wind ...

  2. ftp服务器搭建并通过外网访问

    内网FTP如何端口映射到外网连接访问?通过公网路由器映射或nat123端口映射均可实现.前者是硬件公网端口映射,后者是软件内网端口映射,目的一样,方法不一. 工具/原料 FTP 内网 nat123客户 ...

  3. Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记

    前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...

  4. 华为防火墙ftp_华为防火墙如何配置ftp服务器映射到外网

    华为防火墙如何配置ftp服务器映射到外网 一. 要求: 公司搭建一台ftp服务器,需要映射到外网,供供应商上传文件. 但公司出口线路只有一条ADSL,IP地址是自动获取,随时会变化. 因此,需要申请一 ...

  5. 内网网站发布到外网-五种方法

    转自:http://www.nat123.com/Pages_8_549.jsp 汇总固定公网IP.动态公网IP.内网环境无公网IP,这三种网络环境下的发布内网网站到外网的实现教程方案. 一,固定公网 ...

  6. phpnow安装apache失败及phpnow绑定域名解决方法,网站发布到外网

    在使用PHPnow工具安装Apache和MySQL数据库时经常会出现以下错误信息: 安装服务 [apache_pn]失败.可能原因如下: 1. 服务名已存在,请卸载或使用不同的服务名. 2. 非管理员 ...

  7. 小型局域网络搭建(可访问外网)

    1.小型局域网络搭建(可访问外网) 工作中有时会遇到连接局域网(内网) 比如搭建临时数据库, 供客户现场的开发测试人员使用;  但同时又想访问互联网(外网)查询数据, 比如用VPN访问公司本部的数据. ...

  8. 如何将自己电脑作为服务器将项目发布至外网

    如何将自己电脑作为服务器将项目发布至外网(springboot+mysql+tomcat) 开发工具:IDEA 话不多说开整 一:将您的NB项目打成war包:怎麽打? 来直接看: 1.注:在主函数中继 ...

  9. 口罩、安全帽识别比赛踩坑记(二) 比赛流程及 SSD / YOLO V3 两版本实现

    本篇文章主要对比赛流程中的各个环节进行展开说明,并对笔者践行过的代码及更改的地方进行记录.如哪里有侵权请联系笔者进行删除.另外在这里对比赛举办方表示感谢 ~ ~ 其中开源代码会在整理后放在github ...

  10. python从入门到实践django看不懂_Python编程:从入门到实践踩坑记 Django

    <>踩坑记 Django Django Python 19.1.1.5 模板new_topic 做完书上的步骤后,对主题添加页面经行测试,但是浏览器显示 服务器异常. 个人采用的开发环境是 ...

最新文章

  1. 详解模板注入漏洞(下)
  2. 从命令行运行postman脚本
  3. swagger配置分组
  4. IDA 7.5 Demo 包含 Windows、Linux、macOS
  5. Java应用程序中的内存泄漏和内存管理
  6. Python中socket入门例子
  7. c语言终极面试宝典 pdf,C语言终极面试--编程
  8. 哈希码以及Object.toString()简单理解
  9. NPM酷库:uuid,生成随机ID
  10. [JZOJ P1271] [DP]集合求和
  11. 关于SharePoint解决方案开发模型的凌乱文章…
  12. 基于递归寻找数组中的最大数字
  13. Linux(CentOS)安装Node.JS和npm的两种方式(yum安装和源码安装)
  14. java session 永不过期_java设置配置session过期时间的方法
  15. Tomcat中包含的配置文件、名字、作用分析记录
  16. matlab 求公因数,符号运算提取多项式系数和公因数
  17. 探访广东电子垃圾第一镇:家庭作坊饮鸩止渴---ESM
  18. Python 多进程 multiprocessing.Pool类详解
  19. 西门子S7-200SMART控制步进电机(五)
  20. flyway的checksum

热门文章

  1. 卸载 Creative Cloud 桌面应用程序(macOS、Windows)
  2. 疯狂java讲义第二章课后习题答案
  3. php 股票数据 sina,使用Sina API获取新浪财经的证券股票数据接口(时价 K线等)
  4. tomcat 启动出现 org.apache.tomcat.util.compat.JreCompat.isGraalAvailable()Z错误
  5. MATLAB热障涂层成像,考虑孔隙细观特征的热障涂层脱粘缺陷超声检测数值模拟
  6. 无需插件只使用浏览器下载b站视频
  7. 数据库编程之ODBC编程
  8. selenium之滑块操作
  9. 分享一个好用的图片压缩软件
  10. HU6285A升压输出12V,电流1A芯片