Windows Server FTP详解

news2024/12/24 3:11:48

搭建:

Windows Server 2012R2 FTP服务介绍及搭建_windows2012server r2ftp怎么做?-CSDN博客

问题: 

https://www.cnblogs.com/123525-m/p/17448357.html

 Java使用

被动FTP(PASV)

被动FTP模式在数据连接建立过程中,由服务器端发起数据端口连接,客户端被动接受。这对于客户端位于防火墙或NAT之后的场景特别有用。

import org.apache.commons.net.ftp.FTPClient;

FTPClient ftpClient = new FTPClient();
ftpClient.enterLocalPassiveMode(); // 进入被动模式
ftpClient.connect(server, port);
ftpClient.login(user, password);
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
// ...进行文件传输操作...
ftpClient.logout();
ftpClient.disconnect();

主动FTP(PORT)

主动FTP模式在数据连接建立过程中,由客户端发起数据端口连接,服务器端被动接受。主动FTP模式在客户端和服务器端都需要进行适当的配置以支持这种模式。

要切换到主动FTP模式,你需要更改FTP服务器的配置,这可能涉及到与你的网络管理员或服务提供商进行沟通。对于Java代码,你可以使用以下方式:

 
import org.apache.commons.net.ftp.FTPClient;

FTPClient ftpClient = new FTPClient();
ftpClient.enterLocalActiveMode(); // 进入主动模式
ftpClient.connect(server, port);
ftpClient.login(user, password);
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
// ...进行文件传输操作...
ftpClient.logout();
ftpClient.disconnect();

从被动FTP到主动FTP的转换

如果你需要从被动FTP切换到主动FTP,并且你无法更改FTP服务器的配置(例如,你正在使用一个你不能更改其设置的第三方FTP服务器),那么你需要更改你的客户端配置。你可以通过以下步骤实现:

  1. 创建一个新的临时端口。这个端口将用于建立数据连接。你可以使用任何你喜欢的工具或库来创建这个端口。例如,你可以使用Java的ServerSocket类来创建一个本地服务器。
  2. 配置你的FTP客户端使用这个临时端口。这可以通过在创建FTPClient实例时设置其本地IP和端口来实现。例如:
FTPClient ftpClient = new FTPClient();
ftpClient.setLocalPort(port); // 设置本地端口为你的临时端口
ftpClient.enterLocalActiveMode(); // 进入主动模式
ftpClient.connect(server, port);
ftpClient.login(user, password);
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
// ...进行文件传输操作...
ftpClient.logout();
ftpClient.disconnect();

这样,你的FTP客户端将使用你指定的本地端口来建立数据连接,而不是由服务器端发起连接。这实际上是模拟了主动FTP的工作方式。但请注意,这种方法可能不适用于所有情况,特别是当你的客户端位于防火墙或NAT之后时。在这种情况下,你可能需要找到其他方法来解决问题,例如配置你的防火墙或NAT设备来允许这种类型的连接。

Windows FTP服务设置

需要注意的是被动端口设置完后要重启一下【Microsoft FTP Service】服务才能生效

如何配置被动模式(PASV)的数据端口?

1、打开IIS管理器,点击左侧的服务器,进入服务器设置主页找到 FTP功能 中的 FTP防火墙支持 点击进入

2、在数据通道端口范围中填写端口范围,例如51025-51050,(如果设置一个端口,例如设置50001-50001)然后点击 应用 设置

3、 在开始菜单 >> 管理工具 >> 服务 中,找到【Microsoft FTP Service】服务,重启该服务才能生效

使用ftp服务端口不能通过外网访问,可以用nps透传 需要注意的是 iis防火墙的外部IP地址要设置成透传后的外部地址

如果是云服务器 在设置完被动端口范围后,云服务器安全组开放下这个端口范围,然后重新连接FTP正常链接了

常见错误:

创建ftp用户之后,配置好了FTP的身份验证和FTP的认证规则,但是无法访问。

原因是“FTP”和“Anonymous”是保留字。不能创建包含这些名称的> IIS 管理器用户帐户。

注意事项:

之前FTP动态端口需要开放1024-65535,但由于现有受支持的Windows操作系统动态端口范围有调整为49152-65535

Windows上FTP搭建及主被动传输模式测试-腾讯云开发者社区-腾讯云

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1792745.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数学建模之MATLAB入门教程(上)

前言: • MATLAB是美国Math Works公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。 • MATLAB将数值分析、矩阵计算、科学数据可视化以及非线性动…

深入分析 Android BroadcastReceiver (一)

文章目录 深入分析 Android BroadcastReceiver (一)1. Android BroadcastReceiver 设计说明1.1 BroadcastReceiver 的主要用途 2. BroadcastReceiver 的工作机制2.1 注册 BroadcastReceiver2.1.1 静态注册2.1.2 动态注册 3. BroadcastReceiver 的生命周期4. 实现和使用 Broadca…

【面试笔记】嵌入式软件工程师,汽车电子软件相关

文章目录 1. C语言基础1.1 const1.2 static1.3 回调函数的用法1.4 宏定义1.5 编译、链接过程1.6 堆与栈的区别?1.7 简单的字符串算法题,C语言实现1.7.1 给定一个字符串,按顺序筛选出不重复的字符组成字符串,输出该字符串1.7.2 给定…

三相五柱变压器饱和Simulink仿真

此示例说明了三相五柱变压器的饱和情况,并将专用电力系统模型与基于 Simscape 的物理模型进行了比较。 顶部电路使用 SimPowerSytems 模块来实现连接到 315 kV 电网的 300 MVA、315 kV/120 kV/25 kV、Yg/Yg/D 变压器。在不平衡电压条件下,与三柱变压器相…

opencv进阶 ——(十一)基于RMBG实现生活照生成寸照

实现步骤 1、检测人脸,可以使用opencv自带的级联分类器或者dlib实现人脸检测 2、放大人脸范围,调整到正常寸照尺寸 3、基于RMGB算法得到人像掩码 4、生成尺寸相同的纯色背景与当前人像进行ALPHA融合即可 alpha融合实现 void alphaBlend(cv::Mat&…

Python SMTP配置示例中如何处理发送失败?

Python SMTP的加密方式怎么设置?如何设置SMTP服务器? 在Python中,SMTP常被用于发送电子邮件。然而,SMTP配置和使用过程中,难免会遇到发送失败的情况。Aok将探讨在Python SMTP配置示例中如何处理这些发送失败的情况&am…

Redis实战篇——搭建主从复制

Redis实战篇——搭建主从复制 1.Redis主从1.1.主从集群结构1.2.搭建主从集群1.2.1.启动多个Redis实例1.2.2.建立集群1.2.3.测试 1.Redis主从 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离…

探索 LLM 预训练的挑战,GPU 集群架构实战

万卡 GPU 集群实战:探索 LLM 预训练的挑战 一、背景 在过往的文章中,我们详细阐述了LLM预训练的数据集、清洗流程、索引格式,以及微调、推理和RAG技术,并介绍了GPU及万卡集群的构建。然而,LLM预训练的具体细节尚待进一…

安卓Zygote进程详解

目录 一、概述二、Zygote如何被启动的?2.1 init.zygote64_32.rc2.2 Zygote进程在什么时候会被重启2.3 Zygote 启动后做了什么2.4 Zygote启动相关主要函数 三、Zygote进程启动源码分析3.1 Nativate-C世界的Zygote启动要代码调用流程3.1.1 [app_main.cpp] main()3.1.2…

0605-JavaSE-单例模式-饿懒汉模式

​​​​​​​ 不能放在方法里面(因为每个线程调用都会在方法里面实例化一个locker对象,但不属于同一个对象),然后要用static修饰成静态变量才会起到效果 //单例设计模式 //饿汉模式:在加载类的时候就已经开始创建 /…

Python3数据类型(新)详细介绍

文章目录 数据类型类型查看同时多个变量赋值标准数据类型1.数字(Number)2.字符串3.bool(布尔类型)4.元组元组的运算 运算运算* 运算元组的删除 5.列表(List)查找列表修改列表列表的切片列表是可以修改的列表的追加列表的插入列表的连接列表的删除列表的清空列表的复制 6.字典查…

创建常规DLL的动态链接库

本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系本人将于及时删除 【例9.3】创建一个MFC 常规DLL的动态链接库Areadll,在该动态链接库中添加一个导出类CArea,通过该类获取正方形和圆的面积。 (1) 使用“MFC动态链接…

水泵选型指南

在现代暖通空调(HVAC)系统中,冷冻水泵是关键组件之一,它在提供冷却和空调效果方面起着至关重要的作用。选择合适的冷冻水泵不仅可以提高系统效率,还能节省能源和维护成本。本文将介绍冷冻水泵选型的关键因素和步骤。 …

深度学习之非极大值抑制NMS介绍

1. 基本介绍 非极大值抑制(Non-Maximum Suppression,NMS)是深度学习中一种常用的目标检测算法,用于在检测结果中去除冗余的边界框。 在目标检测任务中,通常会使用候选框(bounding boxes)来表示可…

wincc7.5在现有Report中增加页面

已有报告,页面是3页,需要新加1页数据。 在布局文件中,看到有3个项,这个版本的Wincc就是这种布置: 需要在报告内容中加入新内容,分页依据内容上下间的缝隙(gap )。 这里插入嵌入la…

SwiftUI中Menu和ControlGroup的使用

本篇文章主要介绍一下Menu组件和ControlGroup组件的使用。Menu组件是在iOS 14(tvOS 17)推出的一个组件,点击后提供一个可选择的操作列表。ControlGroup组件是一个容器视图,以视觉上适当的方式为给定的上下文显示语义相关的控件&am…

【设计模式深度剖析】【3】【行为型】【职责链模式】| 以购物中心客户服务流程为例加深理解

👈️上一篇:命令模式 设计模式-专栏👈️ 文章目录 职责链模式定义英文原话直译如何理解呢? 职责链模式的角色1. Handler(抽象处理者)2. ConcreteHandler(具体处理者)3. Client(客户…

Go微服务: 基于rocketmq:server和rocketmq:broker搭建RocketMQ环境,以及生产消息和延迟消费消息的实现

RocketMQ 的搭建 1 ) 配置 docker-compose.yaml 文件 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports:- 9876:9876volumes:- ./logs:/opt/logs- ./store:/opt/storenetworks:rmq:aliases:- rmqnamesrvrmqbroker:image: fo…

使用System-Verilog实现FPGA基于DE2-115开发板驱动HC_SR04超声波测距模块|集成蜂鸣器,led和vga提示功能

文章目录 前言一、SystemVerilog——下一代硬件设计语言1.1 语言基础2.2 面向对象编程1.3 接口(Interfaces)1.4 程序包(Packages)1.5 数据结构1.6 随机化(Randomization)1.7 并发性和时序控制1.8 功能增强1…

小程序丨最大填表限制如何开启?

老师在新建填表时,希望设置最大数量限制,若填表达到限制,后续的学生将不能继续提交填表。 通过开启【表格最大限制】功能即可实现,下面就来教大家如何制作吧。 🔎如何开启表格最大限制功能? 按照常规流程…