在第 1 步中,客戶端的命令埠與 ftp 伺服器的命令埠建立連線,並傳送命令 「port 1027」 。然後在第 2 步中, ftp 伺服器給客戶端的命令埠返回乙個 "ack" 。在第 3 步中, ftp 伺服器發起乙個從它自己的資料埠( 20 )到客戶端先前指定的資料埠( 1027 )的連線,最後客戶端在第 4 步中給 伺服器端返回乙個 "ack" 。
主動方式 ftp 的主要問題實際上在於客戶端 。ftp 的客戶端並沒有實際建立乙個到 伺服器資料埠的連線,它只是簡單的告訴 伺服器自己監聽的埠號, 伺服器再回來連線客戶端這個指定的埠 。對於客戶端的防火牆來說,這是從外部系統建立到內部客戶端的連線,這是通常會被阻塞的 。
主動 ftp 的例子
下面是乙個主動 ftp 會話的實際例子 。當然 伺服器名、 ip 位址和使用者名稱都做了改動 。在這個例子中, ftp 會話從 testbox1.slacksite.com (192.168.150.80) ,乙個執行標準的 ftp 命令列客戶端的 linux 工作站,發起到 testbox2.slacksite.com (192.168.150.90) ,乙個執行 proftpd 1.2.2rc2 的 linux 工作站 。debugging ( -d )選項用來在 ftp 客戶端顯示連線的詳細過程 。紅色的文字是 debugging 資訊,顯示的是傳送到 伺服器的實際 ftp 命令和所產生的回應資訊 。伺服器的輸出資訊用黑色字表示,使用者的輸入資訊用粗體字表示 。
仔細考慮這個對話過程我們會發現一些有趣的事情 。我們可以看到當 port 命令被提交時,它指定了客戶端 (192.168.150.80) 上的乙個埠而不是 伺服器的 。當我們用被動 ftp 時我們會看到相反的現象 。我們再來關注 port 命令的格式 。就象你在下面的例子看到的一樣,它是乙個由六個被逗號隔開的數字組成的序列 。前四個表示 ip 位址,後兩個組成了用於資料連線的埠號 。用第五個數乘以 256 再加上第六個數就得到了實際的埠號 。下面例子中埠號就是 ( (14*256) + 178) = 3762 。我們可以用 netstat 來驗證這個埠資訊 。
testbox1: % ftp -d testbox2
connected to testbox2.slacksite.com.
220 testbox2.slacksite.com ftp server ready.
name (testbox2:slacker): slacker
---> user slacker
331 password required for slacker.
password: tmppass
---> pass ***x
230 user slacker logged in.
---> syst
215 unix type: l8
remote system type is unix.
using binary mode to transfer files.
ftp> ls
ftp: setsockopt (ignored): permission denied
---> port 192,168,150,80,14,178
200 port command successful.
---> list
150 opening ascii mode data connection for file list.
drwx------ 3 slacker users 104 jul 27 01:45 public_html
226 transfer complete.
ftp> quit
---> quit
221 goodbye.
被動 ftp
為了解決 伺服器發起到客戶的連線的問題,人們開發了一種不同的 ftp 連線方式 。這就是所謂的被動方式,或者叫做 pasv ,當客戶端通知 伺服器它處於被動模式時才啟用 。
在被動方式 ftp 中,命令連線和資料連線都由客戶端,這樣就可以解決從 伺服器到客戶端的資料埠的入方向連線被防火牆過濾掉的問題 。當開啟乙個 ftp 連線時,客戶端開啟兩個任意的非特權本地埠( n > 1024 和 n+1 ) 。第乙個埠連線 伺服器的 21 埠,但與主動方式的 ftp 不同,客戶端不會提交 port 命令並允許 伺服器來回連它的資料埠,而是提交 pasv 命令 。這樣做的結果是 伺服器會開啟乙個任意的非特權埠( p > 1024 ),並傳送 port p 命令給客戶端 。然後客戶端發起從本地埠 n+1 到 伺服器的埠 p 的連線用來傳送資料 。
對於 伺服器端的防火牆來說,必須允許下面的通訊才能支援被動方式的 ftp:
從任何埠到 伺服器的 21 埠 (客戶端初始化的連線 s
伺服器的 21 埠到任何大於 1024 的埠 ( 伺服器響應到客戶端的控制埠的連線 s->c )
從任何埠到 伺服器的大於 1024 埠 (入;客戶端初始化資料連線到 伺服器指定的任意埠 s
伺服器的大於 1024 埠到遠端的大於 1024 的埠(出; 伺服器傳送 ack 響應和資料到客戶端的資料埠 s->c )
畫出來的話,被動方式的ftp連線過程大概是下圖的樣子:
主動FTP與被動FTP
昨晚用ser u架設一ftp伺服器,遠端使用者雖能登入,卻看不到任何檔案,我關閉ftp伺服器的防火牆後,一切正常了。我就奇怪了,難道不關閉防火牆就不能滿足我們的要求嗎?為些我從網上找了些有關ftp的資料.主動ftp 主動方式的ftp是這樣的 客戶端從乙個任意的非特權埠n n 1024 連線到ftp伺...
主動FTP模式與被動FTP模式
ftp是僅基於tcp的服務,不支援udp。與眾不同的是ftp使用2個埠,乙個資料埠和乙個命令埠 也可叫做控制埠 通常來說這兩個埠是21 命令埠 和20 資料埠 但ftp工作方式的不同,資料埠並不總是20。這就是主動與被動ftp的最大不同之處。一 主動ftp 主動方式的ftp是這樣的 客戶端從乙個任意...
FTP主動 被動原理
ftp 主動模式 1.客戶端用大於1024的高位埠發起初始化連線到vsftp伺服器的21埠 2.vsftp伺服器的21埠主動與客戶端大於1024的高位埠建立控制連線 3.vsftp伺服器的20埠主動與客戶端大於1024的高位埠初始化資料連線 4.最後客戶端才使用大於1024的高位埠響應ftp服務端的...