史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 網路軟硬體架設技術文件
忘記密碼?
註冊帳號 論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2004-08-21, 03:31 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 ftp傳輸協定分析和補充

FTP傳輸協定的分析

作者:Priscilla Oppenheimer(CCNP、CCDP)
翻譯:dragoncsc
修補:freedemon

>>0.<< 序言
很多人對於FTP的工作原理的認識存在著許多誤區。本白皮書的目的是簡要地描述一下FTP原理
並消除大家對FTP認識的誤區。

FTP是早期網際網路傳輸協定(註:IP傳輸協定組)中的一個,FTP傳輸協定是設計用在當時還比較封閉的網際網路
上傳輸文件,當時網際網路只是互連了一些大學、政府機構和設計該網際網路模型的一些商業公司
。FTP在當今網路上,特別是在安全問題比較嚴重的網路上(如網際網路Internet)的行為模式
是有一些問題的,本白皮書也提供了一些理論背景知識,這些知識可以說明 你在一個有防火牆
或者使用NAT的網路上正確實施FTP。

FTP傳輸協定早在Client/Server(C/S)模式流行前就已經被設計,但FTP工作模式與C/S模式十分
相似。FTP使用兩個TCP連接,一個TCP連接用於控制資訊(控制連接),一個TCP連接用於實際
的資料傳輸(資料連接)。對FTP對話的分析包括在控制連接上所傳送指令的檢查和在資料連
接上傳送的TCP資料段(註:segment---OSI模型中對第4層資料單元的稱呼)的評估。對於普通
的(活躍的)FTP,控制連接由客戶端啟始化,資料連接由伺服器端啟始化。活躍的FTP也稱為
(Port模式)。另一種模式是被動模式(Passive模式),這種模式下客戶端啟始化資料連接。

>>1.0<< FTP和TCP連接阜號
根據是使用Port模式還是Passive模式,FTP使用不同的TCP連接阜號,在詳細描述FTP前,我們來
簡單討論一下TCP連接阜號的一些基本概念。TCP使用連接阜號來標識所傳送和接收的套用,連接阜號
可以說明 TCP來分離字元流並且幫相應字元傳遞給正確的應用程式。
TCP連接阜號可以是半永久的和暫時的。伺服器端監聽在半永久的連接阜上來讓客戶端訪問。客戶
端使用暫時的連接阜在本機標識一個對話,客戶端連接阜只在使用TCP服務時候才存在,而伺服器
連接阜只要伺服器在執行就一直在監聽。

TCP連接阜可以歸為3類:
1、眾所周知的連接阜來標識在TCP上執行的標準服務,包括FTP、HTTP、TELNET、SMTP等,這些
連接阜號碼範圍為0-1023;
2、註冊連接阜號用來標識那些已經向IANA(Internet Assigned Numbers Assigned Numbers
Authority)註冊的套用,註冊連接阜號為1024-49151;
3、私有連接阜號是非註冊的並且可以動態地分配給任何套用,私有連接阜為49152-65535;
註冊的連接阜號本來打算只給註冊的套用使用,可近年來連接阜號已經陷入了到達極限的困境,你
可能會看到本來應該是給註冊套用使用的註冊連接阜被非註冊套用用做暫時的連接阜。RFC1700詳
細標注了眾所周知的和註冊的連接阜號,然而不幸的是,這個RFC文件自從1994年以來一直沒有
被更新,然後你仍可以從IANA得到一個及時更新的連接阜列表,詳細URL為:
http://www.iana.org/assignments/port-numbers

>>2.0<< FTP Port模式和FTP Passive模式
當你對一個FTP問題進行排錯時候,你首先要問的一個問題是使用的是port模式的還是passive
模式。因為這兩種行為迥異,所以這兩種模式引起的問題也不同;在過去,客戶端預設為acti
ve(port)模式;近來,由於Port模式的安全問題,許多客戶端的FTP套用預設為Passive模式。

>>2.1 FTP Port模式
Port模式的FTP步驟如下:
1、 客戶端傳送一個TCP
SYN(TCP同步)包給伺服器段眾所周知的FTP控制連接阜21,客戶端使用暫時的連接阜作為它的源
連接阜;
2、 伺服器端傳送SYN
ACK(同步驗證)包給客戶端,源連接阜為21,目的連接阜為客戶端上使用的暫時連接阜;
3、
客戶端傳送一個ACK(驗證)包;客戶端使用這個連接來傳送FTP指令,伺服器端使用這個連接
來傳送FTP回應;
4、
當用戶請求一個列表(List)請求或者發起一個要求傳送或者接受文件的請求,客戶端軟體使用
PORT指令,這個指令包含了一個暫時的連接阜,客戶端希望伺服器在開啟一個資料連接時候使用
這個暫時連接阜;PORT指令也包含了一個IP位址,這個IP位址通常是客戶自己的IP位址,而且FT
P也支持第三方(third-party)模式,第三方模式是客戶端告訴伺服器端開啟與另台主機的連
接;
5、
伺服器端傳送一個SYN包給客戶端的暫時連接阜,源連接阜為20,暫時連接阜為客戶端在PORT指令中
傳送給伺服器端的暫時連接阜號;
6、 客戶端以源連接阜為暫時連接阜,目的連接阜為20傳送一個SYN ACK包;
7、 伺服器端傳送一個ACK包;
8、
傳送資料的主機以這個連接來傳送資料,資料以TCP段(註:segment,第4層的PDU)形式傳送(
一些指令,如STOR表示客戶端要傳送資料,RETR表示伺服器段傳送資料),這些TCP段都需要
對方進行ACK驗證(註:因為TCP傳輸協定是一個面向連接的傳輸協定)
9、
當資料傳輸完成以後,傳送資料的主機以一個FIN指令來結束資料連接,這個FIN指令需要另一
台主機以ACK驗證,另一台主機也傳送一個FIN指令,這個FIN指令同樣需要傳送資料的主機以A
CK驗證;
10、
客戶端能在控制連接上傳送更多的指令,這可以開啟和關閉另外的資料連接;有時候客戶端結
束後,客戶端以FIN指令來關閉一個控制連接,伺服器端以ACK包來驗證客戶端的FIN,伺服器
同樣也傳送它的FIN,客戶端用ACK來驗證。

下圖圖示了FTP PORT模式前幾步步驟:
/====================================================================\
| |
| [ ftp Client ] [ ftp Server ] |
| |
| (TCP:21 連接啟始化,控制連接阜) |
| SYN |
| Port xxxx ----------------------> Port 21 [TCP] |
| SYN+ACK |
| Port xxxx <---------------------- Port 21 |
| ACK |
| Port xxxx ----------------------> Port 21 |
| |
| (控制操作: 用戶列目錄或傳輸文件) |
| |
| Port, IP, Port yyyy |
| Port xxxx <---------------------- Port 21 |
| Port Seccussful |
| Port xxxx <---------------------- Port 21 |
| List, Retr or Stor |
| Port xxxx ----------------------> Port 21 |
| |
| |
| (TCP:20 連接啟始化,資料連接阜) |
| SYN |
| Port yyyy <---------------------- Port 20 |
| SYN+ACK |
| Port yyyy ----------------------> Port 20 |
| ACK |
| Port yyyy <---------------------- Port 20 |
| |
| |
| (資料操作: 資料傳輸) |
| Data + ACK |
| Port yyyy <---------------------> Port 20 |
| . |
| . |
| . |
| |
\====================================================================/

FTP
Port模式會給網路管理人員在許多方面帶來很多問題,首先,在PORT指令消息中的IP位址和端
口號的編碼不是直白地顯示。另外,套用層的傳輸協定指令理論上不應該包含網路位址資訊(註:
IP位址),因為這打破了傳輸協定層的原則並且可能導致協同性和安全性方面的問題。

下圖是WildPackets
EtherPeek傳輸協定分析儀解碼了PORT指令的位址參數,位址參數後是連接阜號,見PORT
192,168,10,232,6,127;6,127部分的第一個阿拉伯數位乘以256,然後加上第2個阿拉伯數位
就得到連接阜號,所以客戶端指定了連接阜號為6*256+127=1663;
/====================================================================\
| IP Header - Internet Protocol Datagram |
| Version: 4 |
| Header Length: 5 (20 bytes) |
| |
| ............... |
| |
| Time To Live: 128 |
| Protocol: 6 TCP - Transmission Control Protocol |
| Header Checksum: 0xAA36 |
| Source IP Address: 192.168.0.1 DEMO |
| Dest. IP Address: 192.168.0.3 VI |
| No IP Options |
| |
| TCP - Transport Control Protocol |
| Source Port: 2342 manage-exec |
| Destination Port: 21 ftp |
| Sequence Number: 2435440100 |
| Ack Number: 9822605 |
| Offset: 5 (20 bytes) |
| Reserved: %000000 |
| Flags: %011000 |
| 0. .... (No Urgent pointer) |
| .1 .... Ack |
| .. 1... Push |
| .. .0.. (No Reset) |
| .. ..0. (No SYN) |
| .. ...0 (No FIN) |
| |
| Window: 65150 |
| Checksum: 0x832A |
| Urgent Pointer: 0 |
| No TCP Options |
| |
| FTP Control - File Transfer Protocol |
| Line 1: PORT 192,168,0,1,9,39<CR><LF> |
| |
| FCS - Frame Check Sequence |
| FCS (Calculated): 0xF4C04A4F |
\====================================================================/

下圖驗證了伺服器端的確從連接阜20開啟到連接阜1663的TCP連接:
/====================================================================\
| TCP - Transport Control Protocol |
| Source Port: 20 ftp-data |
| Destination Port: 1663 |
| Sequence Number: 2578824336 |
| Ack Number: 0 |
| Offset: 6 (24 bytes) |
| Reserved: %000000 |
| Flags: %000010 |
| 0. .... (No Urgent pointer) |
| .0 .... (No Ack) |
| .. 0... (No Push) |
| .. .0.. (No Reset) |
| .. ..1. SYN |
| .. ...0 (No FIN) |
| |
| Window: 3731 |
| Checksum: 0x8A4C |
| Urgent Pointer: 0 |
| No TCP Options |
| |
| TCP Options |
| Options Type: 2 Maxinum Segment Size |
| Length: 4 |
| MSS: 1460 |
| |
| FCS - Frame Check Sequence |
| FCS (Calculated): 0x5A1BD023 |
\====================================================================/

當使用FTP時候,網路中的防火牆必須要宣告相應的連接阜,防火牆必須要跟蹤FTP對話然後檢查
PORT指令,防火牆必須要參與從伺服器端到客戶端在PORT指令中指定的連接阜連接的建立程序。
如果網路中使用了NAT(註:網路位址翻譯),那麼NAT的網路閘道同樣也需要宣告相應的連接阜,網
關需要把在PORT指令中指定的IP位址翻譯成分配給客戶的位址,然後重新計算TCP的Checksum
;如果網路閘道沒有正確地執行這個操作,FTP就失敗了。

黑客可能會利用FTP支持第三方特性這一特點,在PORT指令中設定IP位址和連接阜號參數來指定
一台目標主機的位址和連接阜號(有時候稱這種攻擊為FTP反彈攻擊),例如黑客可以讓一台FTP
伺服器不斷地從它的源連接阜20傳送TCP
SYN包給一系列目的連接阜,讓FTP伺服器看起來正在進行連接阜掃瞄,目的主機不知道攻擊來自黑
客的主機,看起來攻擊像是來自FTP伺服器。一些常用的FTP套用在PORT指令中設定位址為0.0.
0.0,這樣做的意圖是讓FTP伺服器只需要與開啟控制連接的相同客戶進行資料連接,設定位址
為0.0.0.0可能會讓防火牆不知所措。例如,CISCO
PIX IOS 6.0以上版本的PIX(註:CISCO硬體防火牆設備,6.0以上版本為其修正了相關的FTP傳輸協定)
要求資料連接的IP位址與已經存在的控制連接的IP位址必須相同。這樣做的原因是防止黑客用
PORT指令來攻擊別的機器,雖然一些FTP套用設定IP位址為0.0.0.0不是有意圖的攻擊,但在PI
X修正傳輸協定環境下的確引起了一些問題,同時對其他不允許第三方模式和避免FTP反彈攻擊的防
火牆來說,這也會引起相同的問題。

>>2.2 FTP Passive模式
下面的列表描述了Passive模式的FTP的步驟,步驟1到3和Port模式FTP相同,步驟9到11同樣與
Port模式FTP最後三步相同。

1、客戶端傳送一個TCP
SYN(TCP同步)包給伺服器段眾所周知的FTP控制連接阜21,客戶端使用暫時的連接阜作為它的源
連接阜;
2、 伺服器端傳送SYN
ACK(同步驗證)包給客戶端,源連接阜為21,目的連接阜為客戶端上使用的暫時連接阜;
3、
客戶端傳送一個ACK(驗證)包;客戶端使用這個連接來傳送FTP指令,伺服器端使用這個連接
來傳送FTP回應;
4、
當用戶請求一個列表(List)或者傳送或接收文件時候,客戶端軟體傳送PASV指令給伺服器端表
明客戶端希望進入Passive模式;
5、
伺服器端進行回應,回應包括伺服器的IP位址和一個暫時的連接阜,這個暫時的連接阜是客戶端在
開啟資料傳輸連接時應該使用的連接阜;
6、
客戶端傳送一個SYN包,源連接阜為客戶端自己選項的一個暫時連接阜,目的連接阜為伺服器在PASV
回應指令中指定的暫時連接阜號;
7、 伺服器端傳送SYN
ACK包給客戶端,目的連接阜為客戶端自己選項的暫時連接阜,源連接阜為PASV回應中指定的暫時端
口號;
8、 客戶端傳送一個ACK包;
9、
傳送資料的主機以這個連接來傳送資料,資料以TCP段(註:segment,第4層的PDU)形式傳送(
一些指令,如STOR表示客戶端要傳送資料,RETR表示伺服器段傳送資料),這些TCP段都需要
對方進行ACK驗證;
10、
當資料傳輸完成以後,傳送資料的主機以一個FIN指令來結束資料連接,這個FIN指令需要另一
台主機以ACK驗證,另一台主機也傳送一個FIN指令,這個FIN指令同樣需要傳送資料的主機以A
CK驗證;
11、
客戶端能在控制連接上傳送更多的指令,這可以開啟和關閉另外的資料連接;有時候客戶端結
束後,客戶端以FIN指令來關閉一個控制連接,伺服器端以ACK包來驗證客戶端的FIN,伺服器
同樣也傳送它的FIN,客戶端用ACK來驗證。

下圖圖示了Passive模式FTP的開始幾個步驟:
/====================================================================\
| |
| [ ftp Client ] [ ftp Server ] |
| |
| (TCP:21 連接啟始化,控制連接阜) |
| SYN |
| Port xxxx ----------------------> Port 21 [TCP] |
| SYN+ACK |
| Port xxxx <---------------------- Port 21 |
| ACK |
| Port xxxx ----------------------> Port 21 |
| |
| (PASV操作: 被動連接資料連接阜啟始化) |
| |
| PASV |
| Port xxxx ----------------------> Port 21 |
| PASV OK, IP, Port yyyy |
| Port xxxx <---------------------- Port 21 |
| SYN |
| Port zzzz ----------------------> Port yyyy |
| SYN+ACK |
| Port zzzz <---------------------- Port yyyy |
| ACK |
| Port zzzz ----------------------> Port yyyy |
| |
| |
| (資料操作: 資料傳輸) |
| List, Retr or Stor |
| Port xxxx ----------------------> Port 21 |
| Data + ACK |
| Port zzzz <---------------------> Port yyyy |
| . |
| . |
| . |
| |
\====================================================================/
一個PASV請求要求伺服器在伺服器選項的一個新的連接阜上接受資料連接,PASV指令沒有任何參
數,伺服器端的回應只是一行顯示伺服器IP位址和伺服器接受連接的TCP連接阜號。

下圖顯示了伺服器對PASV指令的回應,伺服器告訴客戶端它在連接阜5365(192,168,179,100,20
,245)上進行監聽,計算連接阜的方法是20*256+245=5365;
/====================================================================\
| TCP - Transport Control Protocol |
| Source Port: 21 ftp |
| Destination Port: 1249 |
| Sequence Number: 4239887193 |
| Ack Number: 36925357 |
| Offset: 5 (20 bytes) |
| Reserved: %000000 |
| Flags: %011000 |
| 0. .... (No Urgent pointer) |
| .1 .... Ack |
| .. 1... Push |
| .. .0.. (No Reset) |
| .. ..0. (No SYN) |
| .. ...0 (No FIN) |
| |
| Window: 8760 |
| Checksum: 0x3EAB |
| Urgent Pointer: 0 |
| No TCP Options |
| |
| FTP Control - File Transfer Protocol |
| Line 1: PASV 192,168,0,1,100,20,245<CR><LF> |
| |
| FCS - Frame Check Sequence |
| FCS (Calculated): 0xBED4346D |
\====================================================================/
當收到PASV指令的回應後,客戶端開啟一個TCP連接,源連接阜為一個暫時的連接阜,目的連接阜為
伺服器提供的暫時連接阜。

下圖顯示了客戶端的TCP連接建立程序,正如上面所說,目的連接阜為5365。
/====================================================================\
| TCP - Transport Control Protocol |
| Source Port: 1250 |
| Destination Port: 5365 |
| Sequence Number: 36931503 |
| Ack Number: 0 |
| Offset: 7 (28 bytes) |
| Reserved: %000000 |
| Flags: %000010 |
| 0. .... (No Urgent pointer) |
| .0 .... (No Ack) |
| .. 0... (No Push) |
| .. .0.. (No Reset) |
| .. ..1. SYN |
| .. ...0 (No FIN) |
| |
| Window: 8192 |
| Checksum: 0x1A57 |
| Urgent Pointer: 0 |
| No TCP Options |
| |
| TCP Options |
| Options Type: 2 Maxinum Segment Size |
| Length: 4 |
| MSS: 1460 |
| |
| FCS - Frame Check Sequence |
| FCS (Calculated): 0x5A1BD023 |
\====================================================================/

大多數人認為在防火牆網路環境中Passive模式比Port模式的問題小,但我們注意到在Passive
模式下,客戶端開啟一個暫時的目的連接阜連接,一些防火牆或者CISCO設備的訪問列表(ACL)可
能會阻止這種連接,同樣伺服器的回應也是從一個暫時的連接阜到一個暫時的連接阜,防火牆或者
CISCO的訪問列表也會阻止這種連接。在CISCO路由器上你可以用訪問列表關鍵字"established
"來避免第二個問題,"established"關鍵字告訴路由器允許帶ACK字端的包通過,伺服器端的S
YN ACK包帶有ACK字端。在新版本PIX IOS中也可以通過fixit關鍵字建立針對ftp傳輸協定的深層狀
態檢測過濾,其他大多數狀態檢測防火牆例如LinuxNetfilters也支持ftp傳輸協定的狀態檢測,進行
準確的PASV動態連接阜過濾。

>>2.3 用戶名和密碼的明文傳輸
FTP另一個聲名狼藉的問題是它以明文方式傳送用戶名和密碼,也就是不加密地傳送。任何人
只要在網路中合適的位置放置一個傳輸協定分析儀就可以看到用戶名和密碼;FTP傳送的資料也是
以明文方式傳輸,通過對ftp連接的監控和資料收集就可以收集和重現ftp的資料傳輸並實現
傳輸協定連接回放。事實上很多用戶把相同的用戶名和密碼用在不同的套用中,這樣這個問題可能
看起來更為糟糕;如果黑客收集到FTP密碼,他們也可能就得到了你在線帳號或者其他一些
機密資料的密碼。

下面是通過tcpdump -- 一個著名的網路傳輸協定分析程序抓取的ftp的完整通訊程序。
/===============================================================================\
21:55:36.682402 IP 192.168.0.1.2323 > 192.168.0.3.21: S 2047626269:2047626269(0)
win 65535 <mss 1460,nop,nop,sackOK> (DF)
21:55:36.682792 IP 192.168.0.3.21 > 192.168.0.1.2323: S 3917547047:3917547047(0)
ack 2047626270 win 65535 <mss 1460,nop,nop,sackOK> (DF)
21:55:36.682855 IP 192.168.0.1.2323 > 192.168.0.3.21: . ack 1 win 65535 (DF)
<TCP三步握手>
21:55:36.854899 IP 192.168.0.3.21 > 192.168.0.1.2323: P 1:115(114) ack 1 win 65535
(DF)
0x0000 4500 009a d570 4000 8006 a398 c0a8 0003 E....p@.........
0x0010 c0a8 0001 0015 0913 e981 0628 7a0c 4c1e ...........(z.L.
0x0020 5018 ffff cd50 0000 3232 302d 5468 6973 P....P..220-This
0x0030 2073 6572 7665 7220 6973 2066 6f72 2070 .server.is.for.p
0x0040 7269 7661 7465 2075 7365 206f 6e6c 790d rivate.use.only.
0x0050 0a32 .2
21:55:37.016115 IP 192.168.0.1.2323 > 192.168.0.3.21: . ack 115 win 65421 (DF)
0x0000 4500 0028 b8d0 4000 8006 c0aa c0a8 0001 E..(..@.........
0x0010 c0a8 0003 0913 0015 7a0c 4c1e e981 069a ........z.L.....
0x0020 5010 ff8d 6f83 0000 P...o...
21:55:37.016471 IP 192.168.0.3.21 > 192.168.0.1.2323: P 115:154(39) ack 1 win
65535 (DF)
<FTP傳輸協定連接>
0x0000 4500 004f d586 4000 8006 a3cd c0a8 0003 E..O..@.........
0x0010 c0a8 0001 0015 0913 e981 069a 7a0c 4c1e ............z.L.
0x0020 5018 ffff 074f 0000 3232 3020 506c 6561 P....O..220.Plea
0x0030 7365 2065 6e74 6572 2079 6f75 7220 6c6f se.enter.your.lo
0x0040 6769 6e20 6e61 6d65 206e 6f77 2e0d 0a gin.name.now...
21:55:37.022282 IP 192.168.0.1.2323 > 192.168.0.3.21: P 1:12(11) ack 154 win 65382
(DF)
0x0000 4500 0033 b8d2 4000 8006 c09d c0a8 0001 E..3..@.........
0x0010 c0a8 0003 0913 0015 7a0c 4c1e e981 06c1 ........z.L.....
0x0020 5018 ff66 c4eb 0000 5553 4552 2065 6c6c P..f....USER.ell
0x0030 790d 0a y..
<用戶名:elly>
21:55:37.059430 IP 192.168.0.3.21 > 192.168.0.1.2323: P 154:188(34) ack 12 win
65524 (DF)
0x0000 4500 004a d58b 4000 8006 a3cd c0a8 0003 E..J..@.........
0x0010 c0a8 0001 0015 0913 e981 06c1 7a0c 4c29 ............z.L)
0x0020 5018 fff4 b343 0000 3333 3120 5061 7373 P....C..331.Pass
0x0030 776f 7264 2072 6571 7569 7265 6420 666f word.required.fo
0x0040 7220 656c 6c79 202e 0d0a r.elly....
21:55:37.060301 IP 192.168.0.1.2323 > 192.168.0.3.21: P 12:27(15) ack 188 win
65348 (DF)
0x0000 4500 0037 b8db 4000 8006 c090 c0a8 0001 E..7..@.........
0x0010 c0a8 0003 0913 0015 7a0c 4c29 e981 06e3 ........z.L)....
0x0020 5018 ff44 e479 0000 5041 5353 2038 3838 P..D.y..PASS.888
0x0030 3838 3838 380d 0a 88888..
<密碼:88888888>
21:55:37.243954 IP 192.168.0.3.21 > 192.168.0.1.2323: . ack 27 win 65509 (DF)
0x0000 4500 0028 d59d 4000 8006 a3dd c0a8 0003 E..(..@.........
0x0010 c0a8 0001 0015 0913 e981 06e3 7a0c 4c38 ............z.L8
0x0020 5010 ffe5 6ec8 0000 0000 0000 0000 P...n.........
21:55:37.285586 IP 192.168.0.3.21 > 192.168.0.1.2323: . 188:1648(1460) ack 27 win
65509 (DF)
0x0000 4500 05dc d5a4 4000 8006 9e22 c0a8 0003 E.....@...."....
0x0010 c0a8 0001 0015 0913 e981 06e3 7a0c 4c38 ............z.L8
0x0020 5010 ffe5 0300 0000 3233 302d 5765 6c63 P.......230-Welc
0x0030 6f6d 6520 746f 2076 6920 4654 5020 7365 ome.to.vi.FTP.se
0x0040 7276 6572 0d0a 3233 302d 0d0a 3233 302d rver..230-..230-
0x0050 4375 Cu
<明文資料傳輸>
\===============================================================================/

>>3.0<< 改進: ftp安全增強, SSL/TLS
在傳統的ftp通訊和傳輸程序中可以看出,ftp傳輸協定提供了一種簡單實用的網路文件傳輸方法,
但是缺陷也是顯而易見的。傳統ftp服務缺乏對資料的機密性和完整性保護,對通訊雙方也沒
有可靠的認證措施,同時還存在著明文資訊傳輸的弱點 --
在同一個網路上的任何用戶都可能竊取到重要的資訊。雖然近年來出現了很多種ftp的替代服
務,例如ssh加密通道的sftp/scp,或使用IPSEC傳輸協定的VPN通道等等,但是在大多數情況下,f
tp的通用性和易用性使得它在很長一段時間內必然無法被完全取代。所以如同其他一系列古董
服務(例如SMTP/HTTP)一樣,近年來也出現了一些不需要對ftp傳輸協定自身做完全更改的傳輸協定增強
模組,能夠良好的完成相容性和功能增強。ftp SSL/TLS Extension就是其中一種方式。

FTP安全增強: http://www.ietf.org/rfc/rfc2228.txt
http://www.ietf.org/rfc/rfc2246.txt
FTP安全增強,SSL接頭草案:
http://www.ietf.org/internet-drafts/...ftp-ssl-13.txt

>>3.1 SSL/TLS簡介
先說一下SSL/TLS傳輸協定,SSL(Secure Socket
Layer)最早是netscape公司設計的用於HTTP傳輸協定加密的安全傳輸傳輸協定,SSL工作於TCP傳輸協定的傳
輸層(TCP層)和應用程式之間。作為一個中間層,應用程式只要採用SSL提供的一套SSL套接字A
PI來替換標準的Socket套接字,就可以把程序轉換為SSL化的安全網路程序,在傳輸程序中將
由SSL傳輸協定實現資料機密性和完整性的保證。SSL傳輸協定的當前版本為3.0,當SSL取得大規模成功
後,IETF(www.ietf.org)將SSL作了標準化,規範為RFC2246,並將其稱為TLS(Transport
Layer
Security)。從技術上講,TLS1.0與SSL3.0的差別非常微小,SSL由於其歷史套用的原因在當
前的商業應用程式之中使用得更多一些。
TLS傳輸協定,RFC 2246: http://www.ietf.org/rfc/rfc2246.txt

>>3.2 資料機密性和完整性
前面多次提到了資料的機密性和完整性兩個方面,在此略微解釋一下。資料的機密性確保資料
資訊機密可靠,不會被沒有權限的對象所訪問和瀏覽到,基本的機密性保護手段就是資料加密
;而資料的完整性則是指資料在傳輸和存儲程序中將保證資料的唯一和完整,不會被惡意篡改
著所修改,保證資料完整性的基本手段主要有數位簽名。

這裡就牽扯到資料加密領域的兩類算法,加密算法和散列算法。加密算法從數學原理上看可以
分為對稱加密和非對稱加密,從資料處理方法上可以分為流加密和分組加密,本文重點不在此
,不再贅述,只舉例幾種常用的加密算法: DES, 3DES, AES,
BlowFish,RC2-RC6等等。資料簽名算法是加密領域的另一套方法,又叫資料散列算法,用於
對資料進行處理產生一個唯一的等長簽名字串串,原資料的長度可能是任意的,而任意兩個相
似但哪怕只有少許細微差別的資料集,都將產生差別非常大的等長簽名字串串,這個字串串在
一般意義下被認為是極少會發生空間衝突(重複)的,因此資料散列算法對於確保資料的唯一性
是一種必要的手段;一般的數位散列算法有MD5,SHA-1,CAST-256等等。

可以看出,面對如此多種類的加密算法,應用程式處理起來是很繁瑣的。SSL在這個層次中就
提供了一種自動的算法協商,密鑰交換和資料加密程序。SSL傳輸協定分為兩部分:Handshake
Protocol和Record
Protocol,HandShake部分用於處理通訊雙方的算法協商和密鑰交換程序,Record部分用於對
資料進行加密傳輸。

整個的SSL基本通訊程序如下:
/====================================================================\
| |
| [ SSL Client ] [ SSL Server ] |
| |
| (TCP三步握手) |
| (SSL套結字連接) |
| . |
| . SSLSocket() |
| . Bind() |
| SSLSocket() -------------------> |
| <------------------- Connect |
| (連接加密算法協商) |
| ClientHello() -------------------> |
| (伺服器端算法驗證和證書傳送)|
| ServerHello |
| Certificate* |
| ServerKeyExchange* |
| CertificateRequest* |
| <------------------- ServerHelloDone |
| (客戶端證書驗證與密鑰交換) |
| Certificate* |
| ClientKeyExchange |
| CertificateVerify* |
| [ChangeCipherSpec] |
| Finished -------------------> (資料加密算法協商) |
| [ChangeCipherSpec] |
| <------------------- Finished |
| (套用資料加密傳輸) |
| Application Data <------------------> Application Data |
| ... |
\====================================================================/

SSL套結字通訊程序如下:
1, Client和Server雙方程序通過ssl socket系列函數替換BSD Socket系列函數;
2, Client通過TCP傳輸協定連線到Server端應用程式;
3, Client發起連接質詢,傳送自身所能實現的"安全集合",其中包含加密和簽名算法協商;
4, Server回應連接,包含本次通訊所使用的算法集合,以及Server端證書;
5, Client收到證書後,使用Server端協商的算法,用Server端證書中包含的Server公鑰加密一個
隨機序列,作為一個挑戰質詢發回Server;
6, Server收到加密密文,使用自身的私鑰進行資料解密,如果成功,代表SA協商匹配,可以
開始通訊;
7, 可選程序,繼續發起Client端驗證程序,Client端發出Client證書,進行Client端驗證程序;
8, 可選程序,資料傳輸程序加密算法協商;
9, 協商完畢,開始加密資料傳輸;

可以看出,SSL Socket通訊程序相比正常的BSD Socket,只不過多了一個安全集合交換協商的程序,
這個程序由SSL實現自身來完成,相對於應用程式,只要採用了SSL Socket,其他的程序都是
透明的。SSL通訊程序中的第3-6步是必須操作,包含了Server端驗證程序和加密算法協商,類
似於TCP傳輸協定的三步握手程序,這個程序中通過公鑰加密算法加密密鑰(公鑰)和解密秘鑰(私鑰)
不同的功能,巧妙地實現了密鑰交換和算法協商,並且由於解密秘鑰不需要在網路上傳輸,這樣
就同時實現了資料通訊程序的保密性和內部應用程式傳輸協定的保密性。在第7步進行Client端證書
的驗證程序中,由於當前網路環境下PKI和CA體系尚不完善,並且由於SSL設計的工作環境相對
對Client端的安全需求並不很高,所以Client端驗證一般作為一種可選手段來實現,取決於應
用程序的安全等級需求。

SSL資料通訊的機密性特性就是由上面的程序完成的,在算法協商程序中除了加密算法的協商外
還會交換一個資料簽名算法,用於對資料產生一個唯一的散列校驗碼,防止在傳輸程序中資料
被篡改,資料簽名程序實現了通訊程序的完整性保證。

對應於SSL所提供的兩種安全特性,機密性和保密性,ssl定義了四個安全級別,分別是這兩種
特性的狀態組合:
'C' - Clear - 沒有任何保護

'S' - Safe - 完整性實現,但是沒有機密性

'E' - Confidential - 機密性實現,但是沒有完整性

'P' - Private - 同時實現機密性和完整性

ftp的ssl增強使用了其中的兩種狀態
1)Clear (requested by 'PROT C')
2)Private (requested by 'PROT P')
在連接程序中通過ftp增強指令PROT來完成狀態的切換。

>>3.3 ssl FTP增強
在RFC 2228中,ftp傳輸協定增強了如下指令:
AUTH (Authentication/Security Mechanism),
ADAT (Authentication/Security Data),
PROT (Data Channel Protection Level),
PBSZ (Protection Buffer Size),
CCC (Clear Command Channel),
MIC (Integrity Protected Command),
CONF (Confidentiality Protected Command), and
ENC (Privacy Protected Command).

其中和SSL增強相關的主要指令有以下幾條:
AUTH (協商增強驗證): 指定增強認證方法,SSL或TLS;
PBSZ (協商保護緩衝區): 制定保護緩衝區,SSL/TLS模式中必須為0;
PROT (切換保護級別): 切換保護級別,可以為"C"無保護,或"P"保護級別;

在一個典型的ftp ssl通訊程序中指令序列如下:
/====================================================================\
| Client Server |
| control data data control |
|====================================================================|
| |
| socket() |
| bind() |
| socket() |
| connect() -------------------------------------------> accept() |
| <------------------------------------------- 220 |
| AUTH TLS -------------------------------------------> |
| <------------------------------------------- 234 |
| TLSneg() <------------------------------------------> TLSneg() |
| PBSZ 0 -------------------------------------------> |
| <------------------------------------------- 200 |
| PROT P -------------------------------------------> |
| <------------------------------------------- 200 |
| USER elly -------------------------------------------> |
| <------------------------------------------- 331 |
| PASS **** -------------------------------------------> |
| <------------------------------------------- 230 |
| |
\====================================================================/

一個SSL FTP的連接程序實例:
/====================================================================\
| |
| WinSock 2.0 -- OpenSSL 0.9.7d 17 Mar 2004 |
| [R] Connecting to 192.168.21.3 -> IP=192.168.21.3 PORT=2121 |
| [R] Connected to 192.168.21.3 |
| [R] 220 Please enter your login name now. |
| [R] AUTH TLS (認證方法)|
| [R] 234 AUTH Command OK. Initializing SSL connection. |
| [R] Connected. Negotiating SSL/TLS session.. |
| [R] SSL/TLS negotiation successful... (協商關聯)|
| [R] TLSv1/SSLv3 encrypted session using cipher AES256-SHA (256 bits)
| [R] PBSZ 0 (PBSZ設定)|
| [R] 200 PBSZ Command OK. Protection buffer size set to 0. |
| [R] USER elly (ftp傳統認證)|
| [R] 331 Password required for elly . |
| [R] PASS (hidden) |
| [R] 230 User elly logged in. |
| [R] SYST |
| [R] 215 UNIX Type: L8 , CP:936 |
| [R] FEAT (增強指令測試)|
| [R] 211-Extensions supported: |
| [R] SIZE |
| [R] MDTM |
| [R] MDTM YYYYMMDDHHMMSS filename |
| [R] LIST -laT |
| [R] STAT -laT |
| ... |
| [R] AUTH SSL |
| [R] AUTH TLS |
| [R] PROT |
| [R] PBSZ |
| [R] SSCN |
| [R] UTF8 |
| [R] 211 END |
| [R] CLNT FlashFXP 2.2.985 |
| [R] 213 client type set to FlashFXP 2.2.985. |
| [R] PWD (傳統通訊程序)|
| [R] 257 "/" is current directory |
| [R] TYPE A |
| [R] 200 Type set to ASCII. |
| [R] PROT P (切換到保護模式)|
| [R] 200 PROT P accepted. |
| [R] PASV |
| [R] 227 Entering Passive Mode (192,168,21,3,5,122) |
| [R] Opening data connection IP: 192.168.21.3 PORT: 1402 |
| [R] LIST -al |
| [R] Connected. Negotiating SSL/TLS session.. (加密通訊程序)|
| [R] 150 Opening ASCII data connection for ls / using SSL/TLS. |
| [R] SSL/TLS negotiation successful... |
| [R] TLSv1/SSLv3 encrypted session using cipher AES256-SHA (256 bits)
| [R] 226-free disk space under this directory : 101 mb |
| [R] 226 Transfer finished successfully. Data connection closed . |
| [R] List Complete: 181 bytes in 0.14 seconds (1.26 KBps) |
| |
\====================================================================/

在ssl ftp中,有以下幾個特殊點:
1, AUTH是可選指令,因為ssl ftp實現的方式不同而存在,詳見下一節explicit SSL
與implicit SSL;
2, PBSZ和PROT是必須指令,用於切換到保護通道模式;
3, AUTH,PBSZ和PROT指令是實現SSL認證方式的必須方法,但可以與傳統的User/Password
模式共存,或只取其一;
4, SSL認證方法的SSL認證程序(AUTH/PBSZ)和傳統模式認證並無嚴格的先後順序關聯,可能在
用戶名和密碼之前,也可能在之後;但出於安全因素,最好在User/Password傳輸之前切換
到安全模式,可以確保User/Password的傳輸安全;
5, 在explicit SSL模式中,可以在任何時間切換到保護模式,如第四條所述;在implicit
SSL模式中,啟始化連接將直接採用SSL Socket建立,不需要AUTH指令切換。

>>3.4 Explicit SSL和Implicit SSL
由於歷史和軟體相容性因素,ssl FTP的實現有兩種方式,分別是Explicit SSL和Implicit
SSL,上面的大部分資料都是以explicit SSL為範例。

Explicit SSL(外部SSL),又被稱為AUTH SSL方式;Explicit SSL保持了與傳統ftp服務的
良好相容性,以一個ftp服務增強指令的方式存在。啟始化連接可以採用與傳統ftp相容的連接模
式,當需要傳輸加密資訊時使用AUTH SSL指令切換到保護模式。使用Explicit SSL時Server
必須完整地實現AUTH/PBSZ/PROT等指令。

Implicit SSL(隱含SSL),是一個全新的ftp實現方式,在TCP三步握手完成之後就直接使用SSL
Socket進行協商和通訊,之後將全程採用SSL加密連接。在這種模式中一般ftp server將監聽在
一個新的服務連接阜,IANA指定ftps:tcp:990為implicit SSL ftp的預設連接阜。因為在連接初始
階段就自動由SSL實現完成了協商,因此implicit模式中AUTH指令是可選的。

在不考慮相容性的因素下,在服務期端最好優先使用implicit SSL模式,可以獲得更好的保密特性。

比較兩種ssl ftp實現模式區別如下:
/======================================================================\
| explicit implicit |
| client server client server |
|======================================================================|
| | |
| connect() ------> -+-明文 | sslConnect() ------> 加密 |
| <------ 220 | | <------ 220 -+ |
| AUTH SSL ------> | | USER *** ------> | |
| <------ 234 -+ | <------ 331 | |
| TLSneg() <-----> TLSneg() -+-加密 | PASS *** ------> | |
| <------ 200 | | <------ 230 | |
| USER *** ------> | | LIST <-----> ... | |
| <------ 331 | | RETR <-----> ... | |
| PASS *** ------> | | ... | |
| <------ 230 | | | |
| LIST/RETR <-----> ... | | sslClose() <-----> ... -+ |
| close() <-----> ... -+ | |
| | |
\======================================================================/

>>3.5 一些雜亂圖示
在3.3種引用了一個Explicit SSL連接指令序列,這裡是對應的Implicit SSL連接程序:
/======================================================================\
| WinSock 2.0 -- OpenSSL 0.9.7d 17 Mar 2004 |
| [R] Connecting to 192.168.21.3 -> IP=192.168.21.3 PORT=9909 |
| [R] Connected to 192.168.21.3 |
| [R] Connected. Negotiating SSL/TLS session.. |
| [R] SSL/TLS negotiation successful... |
| [R] TLSv1/SSLv3 encrypted session using cipher AES256-SHA (256 bits) |
| [R] 220 Please enter your login name now. |
| [R] PBSZ 0 |
| [R] 200 PBSZ Command OK. Protection buffer size set to 0. |
| [R] USER elly |
| [R] 331 Password required for elly . |
| [R] PASS (hidden) |
| [R] 230 User elly logged in. |
| [R] SYST |
| [R] 215 UNIX Type: L8 , CP:936 |
| [R] PROT P |
| [R] 200 PROT P accepted. |
| [R] PASV |
| [R] 227 Entering Passive Mode (192,168,21,3,5,122) |
| [R] Opening data connection IP: 192.168.21.3 PORT: 1402 |
| [R] LIST -al |
| [R] Connected. Negotiating SSL/TLS session.. |
| [R] 150 Opening ASCII data connection for ls / using SSL/TLS. |
| [R] SSL/TLS negotiation successful... |
| [R] TLSv1/SSLv3 encrypted session using cipher AES256-SHA (256 bits) |
| [R] List Complete: 181 bytes in 0.17 seconds (1.04 KBps) |
\======================================================================/

Explicit SSL模式下ftp client <-- server的通訊資料,可以看到AUTH SSL之後的指令
全部都已經加密,無法看到。對應2.3節中的傳統通訊程序,這確保了傳輸程序中資料無法被竊
聽到。在Implicit SSL模式中,從啟始化連接開始的資料將全部加密,無法分析,因此此處不
摘錄。
/======================================================================\
21:34:22.095241 IP 192.168.0.1.2279 > 192.168.0.3.999: S 1727744887:1727
744887(0) win 65535 <mss 1460,nop,nop,sackOK> (DF)
0x0000 4500 0030 e6b7 4000 8006 92bb c0a8 0001 E..0..@.........
0x0010 c0a8 0003 08e7 03e7 66fb 4b77 0000 0000 ........f.Kw....
0x0020 7002 ffff 428a 0000 0204 05b4 0101 0402 p...B...........
21:34:22.095576 IP 192.168.0.3.999 > 192.168.0.1.2279: S 3598555607:3598
555607(0) ack 1727744888 win 65535 <mss 1460,nop,nop,sackOK> (DF)
0x0000 4500 0030 8d9e 4000 8006 ebd4 c0a8 0003 E..0..@.........
0x0010 c0a8 0001 03e7 08e7 d67d 99d7 66fb 4b78 .........}..f.Kx
0x0020 7012 ffff d223 0000 0204 05b4 0101 0402 p....#..........
21:34:22.095639 IP 192.168.0.1.2279 > 192.168.0.3.999: . ack 1 win 65535 (DF)
0x0000 4500 0028 e6b8 4000 8006 92c2 c0a8 0001 E..(..@.........
0x0010 c0a8 0003 08e7 03e7 66fb 4b78 d67d 99d8 ........f.Kx.}..
0x0020 5010 ffff fee7 0000 P.......
21:34:22.108439 IP 192.168.0.3.999 > 192.168.0.1.2279: P 1:115(114) ack 1
win 65535 (DF)
0x0000 4500 009a 8da4 4000 8006 eb64 c0a8 0003 E.....@....d....
0x0010 c0a8 0001 03e7 08e7 d67d 99d8 66fb 4b78 .........}..f.Kx
0x0020 5018 ffff 5cb5 0000 3232 302d 5468 6973 P...\...220-This
0x0030 2073 6572 7665 7220 6973 2066 6f72 2070 .server.is.for.p
0x0040 7269 7661 7465 2075 7365 206f 6e6c 790d rivate.use.only.
0x0050 0a32 .2
21:34:22.257722 IP 192.168.0.1.2279 > 192.168.0.3.999: . ack 115 win 65421 (DF)
0x0000 4500 0028 e6c1 4000 8006 92b9 c0a8 0001 E..(..@.........
0x0010 c0a8 0003 08e7 03e7 66fb 4b78 d67d 9a4a ........f.Kx.}.J
0x0020 5010 ff8d fee7 0000 P.......
21:34:22.257941 IP 192.168.0.3.999 > 192.168.0.1.2279: P 115:154(39) ack
1 win 65535 (DF)
0x0000 4500 004f 8da7 4000 8006 ebac c0a8 0003 E..O..@.........
0x0010 c0a8 0001 03e7 08e7 d67d 9a4a 66fb 4b78 .........}.Jf.Kx
0x0020 5018 ffff 96b3 0000 3232 3020 506c 6561 P.......220.Plea
0x0030 7365 2065 6e74 6572 2079 6f75 7220 6c6f se.enter.your.lo
0x0040 6769 6e20 6e61 6d65 206e 6f77 2e0d 0a gin.name.now...
21:34:22.264587 IP 192.168.0.1.2279 > 192.168.0.3.999: P 1:11(10) ack 154
win 65382 (DF)
0x0000 4500 0032 e6c2 4000 8006 92ae c0a8 0001 E..2..@.........
0x0010 c0a8 0003 08e7 03e7 66fb 4b78 d67d 9a71 ........f.Kx.}.q
0x0020 5018 ff66 e88e 0000 4155 5448 2053 534c P..f....AUTH.SSL
0x0030 0d0a ..
21:34:22.371140 IP 192.168.0.3.999 > 192.168.0.1.2279: P 154:205(51) ack
11 win 65525 (DF)
0x0000 4500 005b 8dac 4000 8006 eb9b c0a8 0003 E..[..@.........
0x0010 c0a8 0001 03e7 08e7 d67d 9a71 66fb 4b82 .........}.qf.K.
0x0020 5018 fff5 9a03 0000 3233 3420 4155 5448 P.......234.AUTH
0x0030 2043 6f6d 6d61 6e64 204f 4b2e 2049 6e69 .Command.OK..Ini
0x0040 7469 616c 697a 696e 6720 5353 4c20 636f tializing.SSL.co
0x0050 6e6e nn
21:34:22.374945 IP 192.168.0.1.2279 > 192.168.0.3.999: P 11:141(130) ack
205 win 65331 (DF)
0x0000 4500 00aa e6c6 4000 8006 9232 c0a8 0001 E.....@....2....
0x0010 c0a8 0003 08e7 03e7 66fb 4b82 d67d 9aa4 ........f.K..}..
0x0020 5018 ff33 f99a 0000 8080 0103 0100 5700 P..3..........W.
0x0030 0000 2000 0016 0000 1300 000a 0700 c000 ................
0x0040 0066 0000 0700 0005 0000 0405 0080 0300 .f..............
0x0050 8001 ..
21:34:22.375857 IP 192.168.0.3.999 > 192.168.0.1.2279: P 205:1071(866) ack
141 win 65395 (DF)
0x0000 4500 038a 8dad 4000 8006 e86b c0a8 0003 E.....@....k....
0x0010 c0a8 0001 03e7 08e7 d67d 9aa4 66fb 4c04 .........}..f.L.
0x0020 5018 ff73 e356 0000 1603 0100 4a02 0000 P..s.V......J...
0x0030 4603 0140 8283 7da1 8821 775e 7765 a9ee F..@..}..!w^we..
0x0040 18ca e0ab 1b17 461e bf71 515f 6837 5c1a ......F..qQ_h7\.
\======================================================================/

>>4.0<< 總結
FTP的替代套用
如今,如果考慮到其他一些安全的文件傳輸選項,可能看起來沒有理由再使用FTP了,如SCP或
者SFTP,與FTP套用相似但運用SSH(註:Secure
Shell)來進行驗證和加密,如果你使用一台關於UNIX的伺服器,你可以在指令方式下使用SCP
或者SFTP,如果你想獲得更多的關於SSH的資訊,參考如下URL:http://www.openssh.com
如果你只是用FTP來更新你的Web頁面,有別的替代套用,稱為WebDAV的新的傳輸協定,WebDAV
是HTTP的增強,它允許多個用戶共同編輯和維護遠端WEB伺服器上的文件,如果想瞭解WebDAV
的詳細資料,參考:http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2518.html

FTP是在70年代設計出來的,那個時候網際網路還是一個封閉的網路,網路安全不是一個大的問
題。當FTP在使用NAT網路閘道、防火牆、CISCO訪問列表的現代網路環境中運用的時候,不管你使
用Port模式還是Passive模式,都可能產生一些問題,FTP在公共外網上作為一些關鍵套用的文件傳
輸手段可能就是一個錯誤;當然近年很多人為了是FTP傳輸協定更加安全進行了不懈的努力,這些
努力卻使對於FTP的排錯更加複雜,而且都沒有解決FTP最大的問題,即明文傳輸用戶名和密碼
。有許多套用可以替代FTP,如SCP,SFTP或者WebDAV。

以上為原文總結,本文下半部分補充了ftp自身的安全增強,使用SSL/TLS進行ftp傳輸程序的
驗證和加密,良好的實現了與傳統ftp傳輸協定的相容性和優良的資料保密性與完整性。在無法使用
替代服務的環境下,是一種非常好的ftp服務改進計劃。

略有不足的是,由於歷史相容性因素,很多ftp client和server對ssl ftp增強的實現都存在
著各種缺陷,例如加密算法不足,指令順序有錯誤等等,這可能會引起一些安全保護級別的削弱。
1, 由於沒有良好的PKI體系支撐,很多ftp server的證書合法性無法得到驗證,可能存在無法
信任或被偽造的可能;
2, 由於Explicit SSL模式的歷史相容問題,AUTH指令和USER/PASS指令序列的優先級沒有明
確約定,可能存在指令序列錯誤造成資訊洩露的問題;
3, 由於SSL自身體系的一些問題,可能受到證書洩露,偽造,或SSL中間人攻擊;
4, 在不完整的CA或PKI體系下,只能夠採用自簽名證書,這時SSL ftp得到的安全性提高僅僅
是通訊程序加密,並無法完成身份認證的功能。

當然,排除無法實現身份認證功能和略微的實現缺陷,ssl ftp仍然是一種優秀的ftp服務安全
加強措施。

>>5.0<< 參考

ftp傳輸協定簇
http://www.ietf.org/rfc/rfc959.txt
http://www.ietf.org/rfc/rfc1579.txt

ftp安全增強
http://www.ietf.org/rfc/rfc2228.txt
http://www.ietf.org/rfc/rfc2246.txt

ftp安全增強,SSL接頭草案:
http://www.ietf.org/internet-drafts/...ftp-ssl-13.txt

ssl/tls傳輸協定規範:
http://www.ietf.org/rfc/rfc2246.txt

OpenSSL,一個廣為套用的SSL實現:
http://www.openssl.org

支持ssl ftp的ftp client:
http://www.ford-hutchinson.com/~fh-1...ol.html#client

支持ssl ftp的ftp server:
http://www.ford-hutchinson.com/~fh-1...ol.html#server

隱含加密和正常的設定一樣的

1,抓包分析一下哪一步有問題

2,看rfc,有一篇隱含加密+fw設定的rfc...忘了貼進來了

自己看一下那幾片rfc裡的連接吧。
psac 目前離線  
送花文章: 3, 收花文章: 1630 篇, 收花: 3204 次
舊 2006-03-31, 08:30 AM   #2 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

FTP時出現以下錯誤,請問是什麼意思?

--------------------------------------------------------------------------------

FTP時出現以下錯誤,請問是什麼意思?


Q:

FTP時出現以下錯誤,請問是什麼意思?
Connecting to SERVER
Connection failed (Connection reset by peer)

又是由於什麼造成的?

A:

WSAECONNRESET (10054) Connection reset by peer.

存在的連接被遠端主機強制關閉。通常原因為:遠端主機上對等方套用程式突然停止執行,或遠端主機重新啟動,或遠端主機在遠端方套接字上使用了「強制」關閉(參見setsockopt(SO_LINGER))。另外,在一個或多個操作正在進行時,如果連接因 「keep-alive」活動檢測到一個失敗而中斷,也可能導致此錯誤。此時,正在進行的操作以錯誤碼WSAENETRESET失敗返回,後續操作將失敗返回錯誤碼WSAECONNRESET。

下面..應該以後可以用來參考



附錄 Windows Sockets錯誤碼
Windows Sockets在頭文件winsock.h中定義了所有的錯誤碼,它們包括以「WSA」打頭的Windows Sockets實現返回的錯誤碼和Berkeley Sockets定義的錯誤碼全集。定義Berkeley Sockets錯誤碼是為了確保原有軟體的可移植性。

A.1 Windows Sockets錯誤碼列表
表A.1列出了WSAGetLastError()函數返回的可能錯誤碼和它們的解釋,它們可分為四個部分。

錯誤碼的第一部分是用來解決在不同的C編譯中對標準C錯誤碼的不一致的定義。錯誤碼的第二部分是標準Berkeley Sockets錯誤碼的Windows Sockets版本。錯誤碼的第三部分包括特定Windows Sockets擴充的錯誤碼。錯誤碼的第四部分由Windows Sockets的getXbyY()和WSAAsyncGetXByY()函數返回,相當於Berkeley軟體中由變數h_errno返回的錯誤(事實上,Windows Sockets在頭文件winsock.h中已將h_error定義成其值為WSAGetLastError()的一個巨集),它們相當於由域名服務(Domain Name Service)返回的各種失敗。如果Windows Sockets實現沒有使用域名服務,它將使用最合適的程式碼。一般地,Windows Sockets套用程式應該將錯誤WSAHOST_NOT_FOUND和WSANO_DATA解釋為指示關鍵字(名字,位址等)沒有找著,而錯誤WSATRY_AGAIN和WSANO_RECOVERY是提醒名字服務自身是非操作的。

錯誤碼由Windows Sockets 規範定義,在所有同一版本規範的Windows Sockets相容實現中,它們是一致的。





表A.1 Windows Sockets錯誤碼

Windows Sockets錯誤碼
Berkeley 對應錯誤碼
錯誤號
解 釋

WSAEINTR
EINTR
10004
同標準C

WSAEBADF
EBADF
10009
同標準C

WSAEACCES
EACCES
10013
同標準C

WSAEFAULT
EFAULT
10014
同標準C

WSAEINVAL
EINVAL
10022
同標準C

WSAEMFILE
EMFILE
10024
同標準C

WSAEWOULDBLOCK
EWOULDBLOCK
10035
同BSD

WSAEINPROGRESS
EINPROGRESS
10036
當一個阻塞函數正在進行時,使用任何Windows Sockets API函數均返回此錯誤

WSAEALREADY
EALREADY
10037
同BSD

WSAENOTSOCK
ENOTSOCK
10038
同BSD

WSAEDESTADDRREQ
EDESTADDRREQ
10039
同BSD

WSAEMSGSIZE
EMSGSIZE
10040
同BSD

WSAEPROTOTYPE
EPROTOTYPE
10041
同BSD

WSAENOPROTOOPT
ENOPROTOOPT
10042
同BSD

WSAEPROTONOSUPPORT
EPROTONOSUPPORT
10043
同BSD

WSAESOCKTNOSUPPORT
ESOCKTNOSUPPORT
10044
同BSD

WSAEOPNOTSUPP
EOPNOTSUPP
10045
同BSD

WSAEPFNOSUPPORT
EPFNOSUPPORT
10046
同BSD

WSAEAFNOSUPPORT
EAFNOSUPPORT
10047
同BSD

WSAEADDRINUSE
EADDRINUSE
10048
同BSD

WSAEADDRNOTAVAIL
EADDRNOTAVAIL
10049
同BSD

WSAENETDOWN
ENETDOWN
10050
同BSD。任何時候只要Windows Sockets實現檢測到網路子系統失敗,它就報告此錯誤。

WSAENETUNREACH
ENETUNREACH
10051
同BSD

WSAENETRESET
ENETRESET
10052
同BSD

WSAECONNABORTED
ECONNABORTED
10053
同BSD

WSAECONNRESET
ECONNRESET
10054
同BSD

WSAENOBUFS
ENOBUFS
10055
同BSD

WSAEISCONN
EISCONN
10056
同BSD

WSAENOTCONN
ENOTCONN
10057
同BSD

WSAESHUTDOWN
ESHUTDOWN
10058
同BSD

WSAETOOMANYREFS
ETOOMANYREFS
10059
同BSD

WSAETIMEDOUT
ETIMEDOUT
10060
同BSD

WSAECONNREFUSED
ECONNREFUSED
10061
同BSD

WSAELOOP
ELOOP
10062
同BSD

WSAENAMETOOLONG
ENAMETOOLONG
10063
同BSD

WSAEHOSTDOWN
EHOSTDOWN
10064
同BSD

WSAEHOSTUNREACH
EHOSTUNREACH
10065
同BSD

WSASYSNOTREADY

10091
由WSAStartup() 返回,指示網路子系統無法使用。

WSAVERNOTSUPPORTED

10092
由WSAStartup() 返回,指示Windows Sockets
DLL 不能支持此套用程式。

WSANOTINITIALISED

10093
由除WSAStartup()之外的其它函數返回,指示 尚沒有一次成功的WSAStartup() 使用執行過。

WSAEDISCON

10101
由WSARecv()和WSARecvFrom()返回,指示遠端方已經啟始化了一個「雅致」的shutdown序列。

WSAHOST_NOT_FOUND
HOST_NOT_FOUND
11001
同BSD

WSATRY_AGAIN
TRY_AGAIN
11002
同BSD

WSANO_RECOVERY
NO_RECOVERY
11003
同BSD

WSANO_DATA
NO_DATA
11004
同BSD




A.2 Windows Sockets錯誤碼增強描述
下面指出WSAGetLastError()函數返回的可能錯誤碼按字母順序排列的列表,同時指出簡要的增強描述。

WSAEACCES (10013) Permission denied.

試圖使用被禁止的訪問權限去訪問套接字。例如,在沒有使用函數setsockopt()的SO_BROADCAST指令設定廣播權限的套接字上使用函數sendto()給一個廣播位址傳送資料。



WSAEADDRINUSE (10048) Address already in use.

正常情況下每一個套接字位址(傳輸協定IP位址連接阜號)只允許使用一次。當套用程式試圖使用bind()函數將一個被已存在的或沒有完全關閉的或正在關閉的套接字使用了的IP位址連接阜號綁紮到一個新套接字上時,該錯誤發生。對於服務器套用程式來說,如果需要使用bind()函數將多個套接字綁紮到同一個連接阜上,可以考慮使用setsockopt()函數的SO_REUSEADDR指令。客戶套用程式一般不必使用bind()函數——connect()函數總是自動選項沒有使用的連接阜號。當bind()函數操作的是通配位址(包括ADDR_ANY)時,錯誤WSAEADDRINUSE可能延遲到一個明確的位址被提交時才發生。這可能在後續的函數如connect()、listen()、WSAConnect()或WSAJoinLeaf()使用時發生。



WSAEADDRNOTAVAIL (10049) Cannot assign requested address.

被請求的位址在它的環境中是不合法的。通常地在bind()函數試圖將一個本地機機器不合法的位址綁紮到套接字時產生。它也可能在connect()、sendto()、WSAConnect()、WSAJoinLeaf()或WSASendTo()函數使用時因遠端機器的遠端位址或連接阜號非法(如0位址或0連接阜號)而產生。



WSAEAFNOSUPPORT (10047) Address family not supported by protocol family.

使用的位址與被請求的傳輸協定不相容。所有的套接字在新增時都與一個位址族(如IP傳輸協定對應的AF_INET)和一個通用的傳輸協定檔案類型(如SOCK_STREAM)聯繫起來。如果在socket()使用中明確地要求一個不正確的傳輸協定,或在使用sendto()等函數時使用了對套接字來說是錯誤的位址族的位址,該錯誤返回。



WSAEALREADY (10037) Operation already in progress.

當在非阻塞套接字上已經有一個操作正在進行時,又有一個操作試圖在其上執行則產生此錯誤。如:在一個正在進行連接的非阻塞套接字上第二次使用connect()函數;或取消一個已經被取消或已完成的異步請求(WSAAsyncGetXbyY())。



WSAECONNABORTED (10053) Software caused connection abort.

一個已建立的連接被你的主機上的軟體終止,可能是因為一次資料傳輸超時或是傳輸協定錯誤。



WSAECONNREFUSED (10061) Connection refused.

因為目標主機主動拒絕,連接不能建立。這通常是因為試圖連線到一個遠端主機上不活動的服務,如沒有服務器套用程式處於執行狀態。



WSAECONNRESET (10054) Connection reset by peer.

存在的連接被遠端主機強制關閉。通常原因為:遠端主機上對等方套用程式突然停止執行,或遠端主機重新啟動,或遠端主機在遠端方套接字上使用了「強制」關閉(參見setsockopt(SO_LINGER))。另外,在一個或多個操作正在進行時,如果連接因「keep-alive」活動檢測到一個失敗而中斷,也可能導致此錯誤。此時,正在進行的操作以錯誤碼WSAENETRESET失敗返回,後續操作將失敗返回錯誤碼WSAECONNRESET。



WSAEDESTADDRREQ (10039) Destination address required.

在套接字上一個操作所必須的位址被遺漏。例如,如果sendto()函數被使用且遠端位址為ADDR_ANY時,此錯誤被返回。



WSAEFAULT (10014) Bad address.

系統檢測到使用試圖使用的一個游標參數指向的是一個非法游標位址。如果套用程式傳送一個非法的游標值,或緩衝區長度太小,此錯誤發生。例如,參數為結構sockaddr,但參數的長度小於sizeof(struct sockaddr)。



WSAEHOSTDOWN (10064) Host is down.

套接字操作因為目的主機關閉而失敗返回。套接字操作遇到不活動主機。本地機主機上的網路活動沒有啟始化。這些條件由錯誤碼WSAETIMEDOUT指示似乎更合適。



WSAEHOSTUNREACH (10065) No route to host.

試圖和一個不可達主機進行套接字操作。參見WSAENETUNREACH。



WSAEINPROGRESS (10036) Operation now in progress.

一個阻塞操作正在執行。Windows Sockets只允許一個工作(或執行緒)在同一時間可以有一個未完成的阻塞操作,如果此時使用了任何函數(不管此函數是否引用了該套接字或任何其它套接字),此函數將以錯誤碼WSAEINPROGRESS返回。



WSAEINTR (10004) Interrupted function call.

阻塞操作被函數WSACancelBlockingCall ()使用所中斷。



WSAEINVAL (10022) Invalid argument.

提供了非法參數(例如,在使用setsockopt()函數時指定了非法的level)。在一些實例中,它也可能與套接字的當前狀態相關,例如,在套接字沒有使用listen()使其處於監聽時使用accept()函數。



WSAEISCONN (10056) Socket is already connected.

連接請求發生在已經連接的套接字上。一些實現對於在已連接SOCK_DGRAM套接字上使用sendto()函數的情況也返回此錯誤(對於SOCK_STREAM套接字,sendto()函數的to參數被忽略),儘管其它一些實現將此操作視為合法事件。



WSAEMFILE (10024) Too many open files.

開啟了太多的套接字。不管是對整個系統還是每一行程或執行緒,Windows Sockets實現都可能有一個最大可用的套接字關鍵句數。



WSAEMSGSIZE (10040) Message too long.

在資料報套接字上傳送的一個消息大於內部消息緩衝區或一些其它網路限制,或者是用來接受資料報的緩衝區小於資料報本身。



WSAENETDOWN (10050) Network is down.

套接字操作遇到一個不活動的網路。此錯誤可能指示網路系統(例如WinSock DLL執行的傳輸協定棧)、網路接頭或本地機網路本身發生了一個嚴重的失敗。



WSAENETRESET (10052) Network dropped connection on reset.

在操作正在進行時連接因「keep-alive」檢測到失敗而中斷。也可能由setsockopt()函數返回,如果試圖使用它在一個已經失敗的連接上設定SO_KEEPALIVE。



WSAENETUNREACH (10051) Network is unreachable.

試圖和一個無法到達的網路進行套接字操作。它常常意味著本地機軟體不知道到達遠端主機的路由。



WSAENOBUFS (10055) No buffer space available.

由於系統缺乏足夠的緩衝區空間,或因為貯列已滿,在套接字上的操作無法執行。



WSAENOPROTOOPT (10042) Bad protocol option.

在getsockopt()或setsockopt()使用中,指定了一個未知的、非法的或不支持的選項或層(level)。



WSAENOTCONN (10057) Socket is not connected.

因為套接字沒有連接,傳送或接收資料的請求不被允許,或者是使用sendto()函數在資料報套接字上傳送時沒有提供位址。任何其它檔案類型的操作也可以返回此錯誤,例如,使用setsockopt()函數在一個已重置的連接上設定SO_KEEPALIVE。



WSAENOTSOCK (10038) Socket operation on non-socket.

操作試圖不是在套接字上進行。它可能是套接字關鍵句參數沒有引用到一個合法套接字,或者是使用select()函數時,一個fd_set中的成員不合法。



WSAEOPNOTSUPP (10045) Operation not supported.

對於引用的對象的檔案類型來說,試圖進行的操作不支持。通常它發生在套接字不支持此操作的套接字描述符上,例如,試圖在資料報套接字上接收連接。



WSAEPFNOSUPPORT (10046) Protocol family not supported.

傳輸協定簇沒有在系統中組態或沒有支持它的實現存在。它與WSAEAFNOSUPPORT有些微的不同,但在絕大多數情況下是可互換的,返回這兩個錯誤的所有Windows Sockets函數的說明見WSAEAFNOSUPPORT的描述。



WSAEPROCLIM (10067) Too many processes.

Windows Sockets實現可能限制同時使用它的套用程式的數量,如果達到此限制,WSAStartup()函數可能因此錯誤失敗。



WSAEPROTONOSUPPORT (10043) Protocol not supported.

請求的傳輸協定沒有在系統中組態或沒有支持它的實現存在。例如,socket()使用請求一個SOCK_DGRAM套接字,但指定的是流傳輸協定。



WSAEPROTOTYPE (10041) Protocol wrong type for socket.

在socket()函數使用中指定的傳輸協定不支持請求的套接字檔案類型的語義。例如,ARPA Internet UDP傳輸協定不能和SOCK_STREAM套接字檔案類型一同指定。



WSAESHUTDOWN (10058) Cannot send after socket shutdown.

因為套接字在相應方向上已經被先前的shutdown()使用關閉,因此該方向上的傳送或接收請求不被允許。通過使用shutdown()函數來請求對套接字的部分關閉,它傳送一個信號來停止傳送或接收或雙向操作。



WSAESOCKTNOSUPPORT (10044) Socket type not supported.

不支持在此位址族中指定的套接字檔案類型。例如,socket()使用中選項了可選的套接字檔案類型SOCK_RAW,但是實現卻根本不支持SOCK_RAW檔案類型的套接字。



WSAETIMEDOUT (10060) Connection timed out.

連接請求因被連接方在一個時間週期內不能正確回應而失敗,或已經建立的連接因被連接的主機不能回應而失敗。



WSATYPE_NOT_FOUND (10109) Class type not found

指定的類沒有找到。



WSAEWOULDBLOCK (10035) Resource temporarily unavailable.

此錯誤由在非阻塞套接字上不能立即完成的操作返回,例如,當套接字上沒有排隊資料可讀時使用了recv()函數。此錯誤不是嚴重錯誤,相應操作應該稍後重試。對於在非阻塞SOCK_STREAM套接字上使用connect()函數來說,報告WSAEWOULDBLOCK是正常的,因為建立一個連接必須花費一些時間。



WSAHOST_NOT_FOUND (11001) Host not found.

主機未知。此名字不是一個正式主機名,也不是一個別名,它不能在查詢的資料庫中找到。此錯誤也可能在傳輸協定和服務查詢中返回,它意味著指定的名字不能在相關資料庫中找到。



WSA_INVALID_HANDLE (OS dependent) Specified event object handle is invalid.

套用程式試圖使用一個事件對象,但指定的關鍵句非法。



WSA_INVALID_PARAMETER (OS dependent) One or more parameters are invalid.

套用程式使用了一個直接映射到Win32函數的WinSock函數,而Win32函數指示一個或多個參數有問題。



WSAINVALIDPROCTABLE (OS dependent) Invalid procedure table from service provider.

服務提供者返回了一個假的WS2_32.DLL程序(procedure)表。這通常是由一個或多個函數游標為空引起。



WSAINVALIDPROVIDER (OS dependent) Invalid service provider version number.

服務提供者返回一個不同於2.2的版本號。



WSA_IO_INCOMPLETE (OS dependent) Overlapped I/O event object not in signaled state.

套用程式試圖檢測一個沒有完成的重疊操作的狀態。套用程式使用函數WSAGetOverlappedResult()(參數fWait設定為false)以輪詢模式檢測一個重疊操作是否完成時將得到此錯誤碼,除非該操作已經完成。



WSA_IO_PENDING (OS dependent) Overlapped operations will complete later.

套用程式已經啟始化了一個不能立即完成的重疊操作。當稍後此操作完成時將有完成指示。



WSA_NOT_ENOUGH_MEMORY (OS dependent) Insufficient memory available.

套用程式使用了一個直接映射到Win32函數的WinSock函數,而Win32函數指示缺乏必要的記憶體資源。



WSANOTINITIALISED (10093) Successful WSAStartup() not yet performed.

套用程式沒有使用WSAStartup()函數,或函數WSAStartup()使用失敗了。套用程式可能訪問了不屬於當前活動工作的套接字(例如試圖在工作間共享套接字),或使用了過多的WSACleanup()函數。



WSANO_DATA (11004) Valid name, no data record of requested type.

請求的名字合法並且在資料庫中找到了,但它沒有正確的關聯資料用於解析。此錯誤的通常例子是主機名直接址(使用gethostbyname()或WSAAsyncGetHostByName()函數)的DNS轉換請求,返回了MX(Mail eXchanger)記錄但是沒有A(Address)記錄,它指示主機本身是存在的,但是不能直接到達。



WSANO_RECOVERY (11003) This is a non-recoverable error.

此錯誤碼指示在資料庫搜尋時發生了某種不可恢復錯誤。它可能是因為資料庫文件(如BSD相容的HOSTS、SERVICES或PROTOCOLS文件)找不到,或DNS請求應服務器有嚴重錯誤而返回。



WSAPROVIDERFAILEDINIT (OS dependent) Unable to initialize a service provider.

服務提供者的DLL不能載入(LoadLibrary()失敗)或提供者的WSPStartup/NSPStartup函數失敗。



WSASYSCALLFAILURE (OS dependent) System call failure..

當一個不應該失敗的系統使用失敗時返回。例如,如果WaitForMultipleObjects()使用失敗,或註冊的API不能夠利用傳輸協定名字空間目錄。



WSASYSNOTREADY (10091) Network subsystem is unavailable.

此錯誤由WSAStartup()函數返回,它表示此時Windows Sockets實現因底層用來提供網路服務的系統不可用。用戶應該檢查:

是否有合適的Windows Sockets DLL文件在當前路徑中。

是否同時使用了多個WinSock實現。如果有多於一個的WINSOCK DLL在系統中,必須確保搜尋路徑中第一個WINSOCK DLL文件是當前載入的網路子系統所需要的。

檢視WinSock實現的我的文件以確保所有必須的設備都正確地安裝並組態好了。



WSATRY_AGAIN (11002) Non-authoritative host not found.

此錯誤通常是在主機名解析時的臨時錯誤,它意味著本地機服務器沒有從使用權服務器接收到一個回應。稍後的重試可能會獲得成功。



WSAVERNOTSUPPORTED (10092) WINSOCK.DLL version out of range.

現用的WinSock實現不支持套用程式指定的Windows Sockets規範版本。檢查是否有舊的Windows Sockets DLL文件正在被訪問。



WSAEDISCON (10101) Graceful shutdown in progress.

由WSARecv()和WSARecvFrom()函數返回,指示遠端方已經啟始化了一個「雅致」的關閉序列。



WSA_OPERATION_ABORTED (OS dependent) Overlapped operation aborted.

因為套接字的關閉,一個重疊操作被取消,或是執行了WSAIoctl()函數的SIO_FLUSH指令
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1630 篇, 收花: 3204 次
舊 2006-03-31, 01:41 PM   #3 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

] FTP指令大全

FTP指令大全

FTP命令是Internet使用者使用最頻繁的命令之一,不論是在DOS還是UNIX操作
系統下使用FTP,都會遇到大量的FTP內部命令,熟悉並靈活應用FTP的內部命令,可
以大大方便使用者,對於現在撥號上網的使用者,如果ISP提供了shell可以使用noh
up,那麼ftp將是你最省錢的上download方式,
ftp的命令行格式為:ftp -v -d -i -n -g[主電腦名]
-v 顯示遠程服務器的所有響應資訊。
-d 使用調試方式。
-n 限制ftp的自動登錄,即不使用.netrc文件。
-g 取消全局文件名。
ftp使用的內部命令如下(其中括號表示可選項):
1.![cmd[args]在本地機中執行交互shell、exit回到ftp環境,如!ls*.zip 。
2.¥ macro-ame[args]執行宏定義macro-name。
3.account[password]提供登錄遠程系統成功后訪問系統資源所需的補充口令 。
4.appendlocal-file[remote-file]將本地文件追加到遠程系統主電腦,若未指定遠程系統文件名,則使用本地文件名。
5.ascii 使用ascii類型傳輸方式。
6.bell每個命令執行完畢后電腦響鈴一次。
7.bin使用二進制文件傳輸方式。
8.bye退出ftp會話過程。
9.case在使用mget時,將遠程主電腦文件名中的大寫轉為小寫字母。
10.cd remote-dir 進入遠程主電腦目錄。
11.cdup進入遠程主電腦目錄的父目錄。
12.chmod modefile-name將遠程主電腦文件file-name的存取方式設置為mode,如chmod 777 a.out。
13.close中斷與遠程服務器的ftp會話(與open對應)。
14.cr使用asscii方式傳輸文件時,將回車換行轉換為回行。
15.delete remote-file刪除遠程主電腦文件。
16.debug[debug-value]設置調試方式,顯示送出至遠程主電腦的每條命令,如debup3,若 設為0,表示取消debug。
17.dir[remote-dir][local-file]顯示遠程主電腦目錄,並將結果存入local-file。
18.disconnection同close。
19.form format將文件傳輸方式設置為format,缺省為file方式。
20.getremote-file[local-file]將遠程主電腦的文件remote-file傳至本地硬碟的local-file。
21.glob設置mdelete、mget、mput的文件名擴展,缺省時不擴展文件名,同命令行的-g參數。
22.hash每傳輸1024位元組,顯示一個hash符號(#)。
23.help[cmd]顯示ftp內部命令cmd的幫助資訊,如help get。
24.idle[seconds]將遠程服務器的休眠計時器設為[seconds]秒。
25.image設置二進制傳輸方式(同binary)
26.lcd[dir]將本地工作目錄切換至dir。
27.ls[remote-dir][local-file]顯示遠程目錄remote-dir,並存入本地local-file。
28.macdef macro-name定義一個宏,遇到macdef下的空行時,宏定義結束。
29.mdelete[remote-file]刪除遠程主電腦文件。
30.mdir remote-files local-file與dir類似,但可指定多個遠程文件,如mdir*.o.*. zipoutfile。
31.mget remote-files傳輸多個遠程文件。
32.mkdir dir-name 在遠程主電腦中建一目錄。
33.mls remote-file local-file同nlist,但可指定多個文件名。
34.mode[mode-name]將文件傳輸方式設置為mode-name,缺省為stream方式。
35.modtime file-name顯示遠程主電腦文件的最后修改時間。
36.mput local-file將多個文件傳輸至遠程主電腦。
37.newerfile-name如果遠程機中file-name的修改時間比本地硬碟同名文件的時間更近,則重傳該文件。
38.nlist[remote-dir][local-file]顯示遠程主電腦目錄的文件清單,並存入本地硬碟的local-file。
39.nmap[inpatternoutpattern]設置文件名映射機制,使得文件傳輸時,文件中的某些字符相互轉換,
如nmap¥1.¥2.¥3[¥1,¥2].[¥2,¥3],則傳輸文件a1 .a2.a3時,文件名變為a1、a2,
該命令特別適用於遠程主電腦為非U-NIX機的情況。
40.ntrans[inchars[outchars]設置文件名字符的翻譯機制,如ntrans1R,則文件名LL L將變為RRR。
41.open host[port]建立指定ftp服務器連接,可指定連接連接埠。
42.passive進入被動傳輸方式。
43.prompt設置多個文件傳輸時的交互提示。
44.proxyftp-cmd在次要控制連接中,執行一條ftp命令,該命令允許連接兩個ftp服務器,以在兩個服務器間傳輸文件。
第一條ftp命令必須為open,以首先建立兩個服務器間的連接。
45.put local-file[remote-file]將本地文件local-file傳送至遠程主電腦。
46.pwd顯示遠程主電腦的當前工作目錄。
47.quit同bye,退出ftp會話。
48.quote arg1,arg2……將參數逐字發至遠程ftp服務器,如quote syst。
49.recv remote-file[local-file]同get。
50.regetremote-file[local-file]類似於get,但若local-file存在,則從上次傳輸中斷處續傳。
51.rhelp[cmd-name]請求獲得遠程主電腦的幫助。
52.rstatus[file-name]若未指定文件名,則顯示遠程主電腦的狀態,否則顯示文件狀態。
53.rename[from][to]更改遠程主電腦文件名。
54.reset清除回答隊列。
55.restart marker從指定的標志marker處,重新開始get或put,如restart 130。
56.rmdir dir-name刪除遠程主電腦目錄。
57.runique設置文件名唯一性存儲,若文件存在,則在原文件后加后綴。
58.send local-file[remote-file]同put。
59.sendport設置PORT命令的使用。
60.site arg1,arg2……將參數作為SITE命令逐字送出至遠程ftp主電腦。
61.size file-name顯示遠程主電腦文件大小,如site idle 7200。
62.status顯示當前ftp狀態。
63.struct[struct-name]將文件傳輸結構設置為struct-name,缺省時使用stream結構。
64.sunique將遠程主電腦文件名存儲設置為唯一(與runique對應)。
65.system顯示遠程主電腦的操作系統類型。
66.tenex將文件傳輸類型設置為TENEX機所需的類型。
67.tick設置傳輸時的位元組計數器。
68.trace設置包跟蹤。
69.type[type-name]設置文件傳輸類型為type-name,缺省為ascii,如typebinary,設置 二進制傳輸方式。
70.umask[newmask]將遠程服務器的缺省umask設置為newmask,如umask 3。
71.useruser-name[password][account]向遠程主電腦表明自己的身份,需要口令時,必須輸入口令,如user anonymous my@email。
72.verbose同命令行的-v參數,即設置詳盡報告方式,ftp服務器的所有響應都將顯示給使用者,缺省為on.
73.?[cmd]同help。

那麼如何應用這些命令提高效率呢?下面我舉一個例子,如何利用fttp進行
后台下載,假設你的ISP給你提供了shell並且可以用nohup,你想由fttp.downlo
ad.com/pub/internet/下載一個30M的程序aaa.zip具體步驟如下:
1.用notepad做一個文件如aaa1內容如下
open ftp://ftp.dwonload.com/ user an onymous zyz@cenpok.net
cd /pub/internet/ i get aaa.zip close bye
2.撥號登錄到你的ISP上。
用telnet 或netterm登錄到shell,一般都在你的home子目錄里bbs∼/
3.用fttp上傳aaa1到ISP服務器你的子目錄。
4. 執行nohup fttp -invd aaa2& 這樣這個進程就被放在ISP服務器的后台進行了,
如果你想知道情況如何,可以more aaa2就可以知道情況如何了。這時你可以斷線了或干點別的,
估計時間到了(time約=30M/(33.6K/9)s)撥號上去,more aaa2如果顯示成功下載aaa.zip,
就表示aaa.zip已經被下載到ISP的服務器上了,你再由ISP的服務器拉回來就相當與點對點了,
記得下載完成后del掉你的文件(aaa.zip),免得浪費ISP資源
psac 目前離線  
送花文章: 3, 收花文章: 1630 篇, 收花: 3204 次
舊 2006-07-11, 08:04 PM   #4 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

Ftp連接常見問題&解決方法

--------------------------------------------------------------------------------

Ftp 是管理維護網站資料 的重要手段,經常有一些客戶提出Ftp上傳的疑問.現在總結常見錯誤和解決方案如下(以FlashFxp為例)

1. Ftp服務器連接失敗: 連接被拒, 錯誤訊息:

[右] 正在連接到 www.yourdomain.com -> DNS=www.yourdomain.com IP=218.13.164.102 PORT=21
[右] 連接失敗 (連接被拒)

原因:這是因為客戶在作Ftp上傳時 填寫錯了Ftp服務器造成這個問題.
解決:在Ftp上傳時記得一定要使用我司的Ftp服務器(例如:h01.72dns.com等)

2. Ftp 用戶登入失敗 錯誤訊息如下:

[右] 正在連接到 www.72dns.com -> DNS=www.72dns.com IP=211.155.224.184 PORT=21
[右] 已連接到 www.72dns.com (Ftp服務器連接成功)
[右] 220 Serv-U FTP Server v6.2 for WinSock ready...
[右] USER test
[右] 331 User name okay, need password.
[右] PASS (隱藏)
[右] 530 Not logged in.

原因:這是用戶填寫錯誤的Ftp用戶名/或Ftp密碼
解決:請您核對您的Ftp 訊息.如果您忘記Ftp密碼.可以在我們用戶中心的虛擬主機管理裡重設Ftp密碼

3. 文件上傳失敗,錯誤訊息如下:

[右] 正在打開資料連接 IP: 211.155.224.184 連接阜: 10023
[右] STOR test.txt ### 開始上傳文件檔案 test.txt
[右] 150 Opening BINARY mode data connection for test.txt.
[右] 426 Data connection closed, error decompressing data stream.
[右] 傳送失敗! ### 文件上傳失敗

原因: 當上傳文件檔案大小為0的空文件時,系統會提示上傳失敗.實際該文件名在服務器已經創建了
解決: 這個錯誤是FlashFxp 客戶端軟件的誤報錯.實際文件已經上傳上去了.

4. 文件上傳失敗,錯誤訊息如下:

[右] STOR test.txt ### 開始上傳文件檔案 test.txt
[右] 150 Opening BINARY mode data connection for test.txt.
[右] 452-Maximum disk quota limited to 30720 kBytes
[右] Used disk quota 30692 kBytes, available 27 kBytes
[右] 452 Sorry, insufficient disk quota - ### 這裡提示磁碟空間不夠
[右] 傳送失敗! ### 文件上傳失敗

原因: 當用戶磁碟空間不夠
解決: 您可以在虛擬主機管理中心 檢視你網站剩餘的空間容量, 需要升級到更大的空間.或者刪除您網站上不必要的資料.

5. 文件上傳成功後卻無法顯示:

原因: 有一些客戶為測試空間的安全性,上傳一些病毒文件或者木馬文件. 被我們的殺毒軟件自動清除
解決: 這是正常現象,我們有一些服務器有配置實時殺毒.可以清除惡意文件.

原因2: 當用戶磁碟空間不夠
解決: 您可以在虛擬主機管理中心 檢視你網站剩餘的空間容量, 需要升級到更大的空間.或者刪除您網站上不必要的資料.

6. 文件上傳失敗,錯誤訊息如下:

[右] STOR Gen.aspx
[右] 550 Permission denied. ### 文件上傳失敗,目錄沒有上傳權限
[右] 傳送失敗!

原因: Ftp根目錄不能上傳文件檔案
解決: 您不能在Ftp根目錄上傳文件檔案,只能將文件上傳到 WWW/LOG/DB 等目錄中.

7. Ftp 登入後 無法顯示列舉文件目錄:

原因:某些服務器安裝的防火牆 不允許防火牆做被動傳輸(PASV)
解決:關閉Ftp客戶端軟件的被動傳輸功能.就可以正常使用

以上總結了 Ftp上傳中的常見錯誤. 您可以對照錯誤 解決您上傳中遇到的問題
psac 目前離線  
送花文章: 3, 收花文章: 1630 篇, 收花: 3204 次
 


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 07:51 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2020, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1