外网访问内网的FTP服务器

外网访问内网的FTP服务器1 背景简介最近研究如何在内网搭架 FTP 服务器 同时要保证外网 公网 能访问的到 终成正果 但走了一些弯路 在此记下 以飨后人 2 基础知识 FTP 使用 2 个端口 一个数据端口和一个命令端口 也叫做控制端口 这两个端口一般是 21 命令端口 和 20 数据端口 当然你也可以自定义 控制 Socket 用来传送命令 数据 Socket 是用于传送数据 每一个 FTP 命令发送之后

如果使用被动模式,通常服务器端会返回一个端口号。客户端需要用另开一个 Socket 来连接这个端口,然后我们可根据操作来发送命令,数据会通过新开的一个端口传输。

如果使用主动模式,通常客户端会发送一个端口号给服务器端,并在这个端口监听。服务器需要连接到客户端开启的这个数据端口,并进行数据的传输。

下面对 FTP 的主动模式和被动模式做一个简单的介绍。

FTP 的客户端只是告诉服务器自己的端口号,让服务器来连接客户端指定的端口。对于客户端的防火墙来说,这是从外部到内部的连接,可能会被阻塞。

被动模式下,当开启一个 FTP 连接时,客户端打开两个任意的本地端口 (N > 1024 和 N+1) 。

第一个端口连接服务器的 21 端口,提交 PASV 命令。然后,服务器会开启一个任意的端口 (P > 1024 ),返回如“227 entering passive mode (127,0,0,1,4,18)”。 它返回了 227 开头的信息,在括号中有以逗号隔开的六个数字,前四个指服务器的地址,最后两个,将倒数第二个乘256 再加上最后一个数字,这就是 FTP 服务器开放的用来进行数据传输的端口。如得到 227 entering passive mode(h1,h2,h3,h4,p1,p2),那么端口号是 p1*256+p2,ip 地址为h1.h2.h3.h4。这意味着在服务器上有一个端口被开放。客户端收到命令取得端口号之后, 会通过 N+1 号端口连接服务器的端口 P,然后在两个端口之间进行数据传输。

操作系统

FTP软件

FTP软件版本

FTP服务器

Windows XP

Serv-U

版本15.0.1.20

FTP客户端

Windows XP

FileZilla

版本3.8.0

 

FTP服务器安装在公司内网的电脑上,FTP客户端在外网的电脑上(严格来说也是在另一外局域网内)。

 

这就是我遇到的第一个弯路,折腾了很久才知道。虽然数据端口是随机的,但Serv-U可以指定随机的范围。打开Serv-U管理控制台 > 管理服务器 > 服务器限制和设置 > 服务器设置 。在“设置”选项卡里找到“PASV端口范围”,如下图所示,在这里就可以指定随见的范围了。你只要把这些端口映射到路由器就可以了。

图表 1 PASV 端口范围

 

当然别忘了,还有一个命令端口也得映射。

 

状态:    正在连接 125.89.123.99:13000…

状态:    连接建立,等待欢迎消息…

响应:    220 Serv-U FTP Server v15.0 ready…

命令:    USER zhangsan

响应:    331 User name okay, need password.

命令:    PASS *

响应:    230 User logged in, proceed.

命令:    CLNT FileZilla

响应:    200 Noted.

命令:    OPTS UTF8 ON

响应:    200 OPTS UTF8 is set to ON.

命令:    OPTS MLST type;size;modify;perm;

响应:    200 MLST OPTS Type;Size;Modify;Perm;

状态:    已连接

状态:    读取目录列表…

命令:    PWD

响应:    257 “/” is current directory.

命令:    TYPE I

响应:    200 Type set to I.

命令:    PASV

响应:    227 Entering Passive Mode (100,100,100,100,50,203)

命令:    MLSD

响应:    150 Opening BINARY mode data connection for MLSD.

错误:    连接超时

错误:    读取目录列表失败

 

也是经过一阵折腾,最后突然发现服务器对PASV指令的响应是:227Entering Passive Mode (100,100,100,100,50,203),这里100.100.100.100是FTP服务器在内网IP,客户端自然连接不上。打开Serv-U管理控制台 > 你自定义的域名 > 域详细信息 > 监听器 > 编辑 ,在PASV IP地址或域名中设置公网IP即可。 如下图所示。

 

转载:https://blog.csdn.net/benkaoya/article/details/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213816.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午5:35
下一篇 2026年3月18日 下午5:35


相关推荐

  • pycharm svn设置_新手配置交换机详细教程

    pycharm svn设置_新手配置交换机详细教程1.打开pycharm设置配置svn.exe的地址Seting-versioncontrol-subversion按照红色填入svn.exe的路径2.在配置的时候找不到svn.exe的方法原因是在默认安装svn的时候忽略了安装svn.exe2.1在卸载或更改程序中重新安装一下svn2.2按照图片进行操作完成后需要重新打开pycharm设置,就可以找到svn.exe3.配置自动化脚本svn的地址导出的时候可以选择放置的位置如D盘4.注意事项pycharm的使用和本地使用没有太

    2022年8月25日
    14
  • JS一维数组转化为三维数组有这个方法就够了

    JS一维数组转化为三维数组有这个方法就够了一个方法搞定 js 一维数组转化三维数组

    2025年8月23日
    3
  • 2268大约是多少_什么是时态

    2268大约是多少_什么是时态小 Q 在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字 1,2,3… 进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点,都存在且仅存在一条通路(通路指连接两个元件的导线序列)。在电路板上存在一个特殊的元件称为“激发器”。当激发器工作后,产生一个激励电流,通过导线传向每一个它所连接的节点。而中间节点接收到激励电流后,得到信息,并将该激励电流传向与它连接并且尚未接收到激励电流的节点。最终,激励电流将到达一些“终止节点”——

    2022年8月11日
    3
  • 单片机交通信号灯控制系统设计_交通灯控制电路设计图

    单片机交通信号灯控制系统设计_交通灯控制电路设计图交通信号灯控制系统设计 作为一个硬件程序设计民工,最近一直在学习python,写个爬虫,排个序,再画个界面,其实还是挺好玩的。然而这不是我的主业啊!!!-_-|||下学期开学就要找工作了,明天刚好是新的一个月,还是滚回去调我的FPGA吧。今天先更新一个很小很小的例子作为开端,这是前几天xxx给我出的一道很随意的题目,主要是看面对一个项目…

    2026年3月7日
    4
  • 运算放大器工作原理是什么?

    运算放大器工作原理是什么?转载自电子发烧友网站,下面是转载地址:http://www.elecfans.com/baike/bandaoti/bandaotiqijian/20100309184249.html

    2022年5月29日
    32
  • OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading “D:\Anaconda\envs\pytorch-1.4\lib\site-package[通俗易懂]

    OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading “D:\Anaconda\envs\pytorch-1.4\lib\site-package[通俗易懂]1、一是内存不足,重启一下pycharm2、把num_works设置为0

    2025年11月4日
    12

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号