什么是ftp passive模式

http://wenku.baidu.com/view/cf571f45b307e87101f69672.html

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);

你可能感兴趣的:(什么是ftp passive模式)