`
chennaid2
  • 浏览: 53042 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
  • b_l_east: 在主动模式下,如果有多个客户端,服务器对每一个客户端均使用20 ...
    ftp

ftp

    博客分类:
  • FTP
ftp 
阅读更多

ftp有两个端口号进行服务,

控制进程/命令接口21

数据连接20

如果ftp服务器开通了20,并且ftp服务器关闭了高位随机端口,则必须使用主动模块,这样对ftp服务器安全点。如果你使用了被动模块,则无法显示文件夹清单list。

如果ftp服务器开通了20,并且ftp服务器也开通了高位随机端口,则可以使用被动模块,同时也可以使用主动模式。

如果ftp服务器没有开通20,但是ftp服务器开通了高位随机端口,则必须使用被动模块,同时也可以使用主动模式。

如果客服端的防火墙关闭了端口的主动接收功能,则无法使用主动模式,但可以使用被动模块。

 

主动模式:服务器主动链接客服端数据传输接口。需客户端可接受高位链接,没有防火墙关闭。

被动模式:服务器不主动链接,被动接口,客户端主动链接。url 方式如ftp://是采用被动。

 

如果客服端的防火墙关闭了端口的主动接收功能,则无法使用主动模式,但可以使用被动模块,这也是被动模块存在的原因。

一般公司内部为了服务器安全点,使用主动模式,但对客户端有些要求,可以接受端口的请求数据。

 

flashFXP的具体设置如下。

空:表示主动模式
勾:表示被动模式
勾+灰:表示先尝式被动模式,不行则尝试使用主动模式

 

ftp 192.168.169.8
输入正好密码
cd /你要的目录
ls
如果出来,但你的FTP工具不行,就是FTP工具配置不正确

 =============================================

原理是:
从FTP服务器的工作方式说起,FTP服务器有一个listening socket 21端号,,负责接收client端的连接请求,当连接建立之后,服务器会创建一个新的用于和客户端进行数据交互的data socket 20,这个socket是去主动连接客户端对应(主动模式, 以前一般采用这种方式),

等待客户端过来连接(被动模式)


如果客户端的IP位于防火墙(宽出严进)之后,服务端有可能主动连不上客户端,这时就要采用被动模式,客户端主动联接服务端.

 

所以ftp服务端防火墙最好开启21,由ftp服务器软件指定范围数据连接端口,以解决客户端采用被动模式出错的情况

可以不在服务端防火墙上打开20端口,因为这个仅在port模式下才有用,并且是出. 而不是进

以上摘抄:

=========================

 

 

 

 

> entry from faq
> 2. Have your FTP clients use passive mode. Passive mode data connections
> originate from the client,and thus do not experience this "port 20" problem.

There are many types of firewalls and some of them
do their work by disallowing connections from IP addresses outside their
network. FTP protocol has been designed a long time ago and it did not count
with this kind of restriction. That is why server, not client, originates
connection during FTP session. Simply, I can explain it like this: client
tells server "I am waiting on my port XXXX for your data", and server
connects (opens/originates connection) to the port specified by client and
sends the data there. That means that if the client is behind firewall which
does not allow connections from outside IP addresses, it also does not allow
connection attempt from this FTP server. So, after a few years it became
clear it is necessary to modify FTP protocol so that it is able to work also
with client which it can't connect to. And at that time PASV command was
added. It works very simple: Client sends PASV command to server which
answers something like this "The data is waiting for you on my port YYYY"
and now client only connects to the specified port on the server to transfer
the data. So, connection now originates client and there is no problem with
firewall.

中文:
防火墙有很多种,其中有一些会禁止那些不是从内部网络IP发出的连接请求。
而ftp协议是个很老的东东,没有考虑这个问题。可以这样简单描述一般ftp
的工作原理:client对server发出请求:“嗨,我的xx端口正等着你传送数据
呢,sever听到这个请求,就会建立一个连接,指向这个端口,并且开始传送
数据。这就回到了我们的问题,如果发出请求的client在防火墙的后面,而这
个防火墙禁止外部IP建立连接,那么当然server(在外部)不能建立与client的
连接。
所以,过了几年,人们修改了ftp协议以应付这种情况。这就是passive mode,
工作原理如下:client向server发出passive命令,server回答说:“数据在xx
端口等你,自己来拿。” 而这回则由client建立指向server的连接,从而取得
数据。这就避免了防火墙的限制。

=====================================

FTP基础知识 
您是否正准备搭建自己的FTP网站?您知道FTP协议的工作机制吗?您知道什么是PORT方式?什么是PASV方式吗?如果您不知道,或没有完全掌握,请您坐下来,花一点点时间,细心读完这篇文章。所谓磨刀不误砍柴功,掌握这些基础知识,会令您事半功倍。否则,很可能折腾几天,最后一事无成。 

FTP基础知识 

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

FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。 
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。 

当需要传送数据时,客户端在命令链路上用 PORT命令告诉服务器:“我打开了****端口,你过来连接我”。于是服务器从20端口向客户端的****端口发送连接请求,建立一条数据链路来传送数据。 

PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。 

当需要传送数据时,服务器在命令链路上用 PASV命令告诉客户端:“我打开了****端口,你过来连接我”。于是客户端向服务器的****端口发送连接请求,建立一条数据链路来传送数据。 
从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。而FTP的复杂性就在于此。 

FTP服务器端的注意事项 

一、FTP服务器是公网IP,用公网动态域名;或是内网IP,用内网专业版TrueHost 

1、服务器如果安装了防火墙,请记住要在防火墙上打开FTP端口(默认是21)。 

2、所有FTP服务器软件都支持PORT方式。至于PASV方式,大部分FTP服务器软件都支持。支持PASV方式的FTP服务器软件,也可以设置为只工作在PORT方式上。 

3、为了PASV方式能正常工作,需要在FTP服务器软件上为PASV方式指定可用的端口范围(设置方法)。此外,还要在服务器的防火墙上打开这些端口。当客户端以PASV方式连接服务器的时候,服务器就会在这个端口范围里挑选一个端口出来,给客户端连接。 

二、FTP服务器是内网IP,用内网动态域名标准版cm*natpro*y 

这种情况下,FTP服务器不需要做特殊设置,只要支持PASV方式就可以了。大部分FTP服务器软件都支持PASV方式。 

FTP客户端的注意事项 

请注意:选择用PASV方式还是PORT方式登录FTP服务器,选择权在FTP客户端,而不是在FTP服务器。 

一、客户端只有内网IP,没有公网IP 

从上面的FTP基础知识可知,如果用PORT方式,因为客户端没有公网IP,FTP将无法连接客户端建立数据链路。因此,在这种情况下,客户端必须要用PASV方式,才能连接FTP服务器。大部分FTP站长发现自己的服务器有人能登录上,有人登录不上,典型的错误原因就是因为客户端没有公网IP,但用了IE作为FTP客户端来登录(IE默认使用PORT方式)。 

作为FTP站长,有必要掌握FTP的基础知识,然后指导您的朋友如何正确登录您的FTP。 

二、客户端有公网IP,但安装了防火墙 

如果用PASV方式登录FTP服务器,因为建立数据链路的时候,是由客户端向服务器发送连接请求,没有问题。反过来,如果用PORT方式登录FTP服务器,因为建立数据链路的时候,是由服务器向客户端发送连接请求,此时连接请求会被防火墙拦截。如果要用PORT方式登录FTP服务器,请在防火墙上打开 1024以上的高端端口。 

三、连接用内网标准版cm*natpro*y搭建的FTP服务,必须要用PASV方式。连接任何公网FTP服务器、或用内网专业版TrueHost搭建的FTP服务器,PORT方式和PASV方式都可以使用。 

当然,使用PORT方式的时候,还要满足上面的两个条件。 

四、常见的FTP客户端软件PORT方式与PASV方式的切换方法。 

大部分FTP客户端默认使

=====================

ftp 20端口释疑

                                      

 

ftp 20端口释疑


一直都对ftpserver如何使用20端口没有概念。今天算是弄明白了。

20端口并不接受外来的连接请求,而是连接到客户端的源端口。

只是适用于port模式,passive模式不涉及20端口。

比如:
客户端发来请求
port 222,222,222,222, 5,199
那么就表示客户端打开了1399端口来等待服务器连接。

5->0x05
199->0x77
0x0577 = 1399


这时候服务器创建一个socket并且绑定到20端口,然后连接到222.222.222.222 : 1399
完成发送数据的工作。


示例代码:
SOCKET sd;
SOCKADDR_IN addr;
int ret = 0;

sd = socket(AF_INET, SOCK_STREAM, 0);

addr.sin_family = AF_INET;
addr.sin_port = htons(20); //20作为源端口。如果这里写0,那么系统将自动分配一个1024 - 5000 之间的端口(这个范围可以通过修改注册表来调整)
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
//绑定源地址
ret = bind(sd, (sockaddr *)&addr, sizeof(addr));

addr.sin_port = htons(1399);
addr.sin_addr.S_un.S_addr = inet_addr("222.222.222.222"); //当然在服务器中不需要产生字符串形式的ip地址
ret = connect(sd, (sockaddr *)&addr, sizeof(addr));

//send data.....

ret = closesocket(sd);

分享到:
评论
1 楼 b_l_east 2013-01-22  
在主动模式下,如果有多个客户端,服务器对每一个客户端均使用20端口吗?
如果这样,那20端口的连接岂不是每次都要打开和关闭,而不是长连接的方式,这种方式有没有什么弊端呢?!

相关推荐

    webftp.zip ftp源码

    WebFTP是一种基于Web的FTP(File Transfer Protocol)客户端软件,允许用户通过网页浏览器进行FTP文件传输操作。在本文中,我们将深入探讨FTP的基本概念、WebFTP的工作原理以及它在实际应用中的重要性。 FTP,全称...

    FTP服务器单文件绿色版FTPServer

    FTP服务器是一种用于在互联网上进行文件传输的服务,它允许用户从一台计算机(客户端)向另一台计算机(服务器)上传或下载文件。FTP(File Transfer Protocol)是这项服务的基础协议,它是一个标准网络协议,用于在...

    使用 ftp-srv 在 nodejs 创建FTP服务器,简单版

    FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在计算机之间传输文件。在这个场景中,我们将探讨如何使用Node.js中的`ftp-srv`库来创建一个简单的FTP服务器。`ftp-srv`是一个易于使用的FTP服务器模块...

    传送图片至FTP及显示FTP上图片

    在IT行业中,FTP(File Transfer Protocol)是一种广泛用于在互联网上传输文件的协议。本教程将详细介绍如何将图片传输到FTP服务器以及如何在FTP服务器上显示这些图片。 首先,我们需要理解FTP的基本工作原理。FTP...

    ftp.rar_ftpput_ftpput ftpget_实现ftpget与ftpput功能

    FTP(File Transfer Protocol)是一种基于TCP/IP协议的网络协议,用于在网络上进行文件传输。本文将详细探讨如何实现FTP客户端的两个关键功能:FTPGET(下载文件)和FTPPUT(上传文件),以及这两个功能在实际应用中...

    webFTP一个PHP写的在线FTP文件管理系统

    **webFTP概述** webFTP是一个基于PHP开发的在线FTP文件管理系统,它允许用户通过Web界面进行FTP服务器的文件管理和操作,极大地提升了FTP管理的便捷性和灵活性。作为一个轻量级的解决方案,webFTP使得用户无需安装...

    QT5.0实现FTP服务器

    FTP(File Transfer Protocol)是一种标准网络协议,用于在计算机网络上在客户端和服务器之间传输文件。在QT5.0中实现FTP服务器,可以让我们自定义一个能够处理文件上传和下载的服务,这对于开发文件管理或共享应用...

    麒麟V10服务器搭建FTP服务

    麒麟V10服务器搭建FTP服务 FTP(File Transfer Protocol)是一种常用的文件传输协议,麒麟V10服务器搭建FTP服务可以帮助用户快速搭建FTP服务器,实现文件的上传、下载和共享。本文将指导用户如何在麒麟V10服务器上...

    详解ftp创建文件权限问题

    详解ftp创建文件权限问题 一、问题 有一个这样的需求,admin为一个Linux为其FTP应用创建的一个有权限限制的用户,通过admin用户可以进行登录FTP服务,登录FTP服务后,创建文件夹,该文件夹的用户和用户组都是admin,...

    一个FTP客户端

    如果用本FTP客户端登录某个FTP服务器,则先必须申请一个FTP空间,申请FTP空间时,它会给你一个FTP主机地址、用户名称、用户密码。 测试步骤: 1、项目编译并运行。 2、申请一个FTP空间(这里不讨论)。 3、输入FTP...

    ftp4j-一个开源的支持代理的FTP组件

    ftp4j是个很年轻的开源项目,但是试用后发现很好很强大,如果你找一个纯java的FTP库,要支持socks4,socks4a,socks5,http代理,就是他了! 比apache的FTPClient(不支持代理)、半商业的edtFTPj(PRO支持代理,...

    ftp批量上传文件bat

    实现FTP批量上传文件到指定目录功能的bat脚本: @echo off @echo delete iplist.txt @del iplist.txt @setlocal EnableDelayedExpansion @echo create upload iplist.... @for /L %%i in (51,1,52) do ( @echo ...

    FTP开源代码 C++

    FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在互联网上进行文件传输。在这个开源代码库中,我们关注的是C++实现的FTP客户端或服务器端的代码,这为理解和学习FTP工作原理提供了宝贵资源。 首先,...

    QT5.0实现FTP客户端

    2. **QNAM与FTP**:虽然QNetworkAccessManager没有直接提供FTP操作的接口,但可以通过构造一个QNAM的子类并重写其内部的槽函数,来监听FTP相关的信号,从而实现FTP客户端功能。 3. **QNetworkRequest**:创建...

    FTP服务器绿色单文件中文免费版(FTPserver)

    FTP服务器绿色单文件中文免费版(FTPserver) FTPserver这是一款免费的、绿色的(无需安装,只有一个文件)、小巧的(84KB)的FTP服务器软件。可以轻松地将它放在U盘里,邮箱里,网盘里,或者网站上随时下载,这样,就有了...

    FTP Utility 2.0 日文

    FTP Utility 2.0 是一款由柯尼卡美能达公司开发的日文版FTP客户端工具,主要用于方便用户在计算机和远程服务器之间传输文件。这款软件适用于企业或个人,特别是那些需要频繁进行文件上传和下载的用户。通过FTP ...

    FTP被动模式分析,ftp抓包分析

    FTP 的两种不同工作模式:PORT(主动模式)与PASV(被动模式) 1、首先,我们要了解,FTP 工作的时候,需要用到两个连接:控制连接与数据连接,控制 连接专门用于FTP 控制命令及命令执行信息传送;数据连接专门用于...

    FTP客户端绿色版安装包

    FTP客户端绿色版安装包是一种无需正式安装即可使用的文件传输协议(FTP)客户端工具。FTP是Internet上用于在不同计算机之间交换文件的标准协议,而“绿色版”指的是这种软件不需通过传统的安装步骤,只需解压即可...

    Andftp pro 已付费

    《Andftp Pro:安卓FTP传输神器的深度解析》 在当今移动设备高度发达的时代,文件传输的需求日益增长,尤其是在IT行业内。Andftp pro是一款专为安卓用户设计的专业FTP(File Transfer Protocol)传输工具,它以其...

Global site tag (gtag.js) - Google Analytics