>><< FTP和TCP端口號 根據是使用Port模式還是Passive模式
FTP使用不同的TCP端口號
在詳細描述FTP前
我們來簡單討論一下TCP端口號的一些基本概念
TCP使用端口號來標識所發送和接收的應用
端口號可以幫助TCP來分離字節流並且幫相應字節傳遞給正確的應用程序
TCP端口號可以是半永久的和暫時的
服務器端監聽在半永久的端口上來讓客戶端訪問
客戶端使用暫時的端口在本地標識一個對話
客戶端端口只在使用TCP服務時候才存在
而服務器端口只要服務器在運行就一直在監聽
TCP端口可以歸為
類
眾所周知的端口來標識在TCP上運行的標准服務
包括FTP
HTTP
TELNET
SMTP等
這些端口號碼范圍為
注冊端口號用來標識那些已經向IANA(Internet Assigned Numbers Assigned Numbers Authority)注冊的應用
注冊端口號為
私有端口號是非注冊的並且可以動態地分配給任何應用
私有端口為
注冊的端口號本來打算只給注冊的應用使用
可近年來端口號已經陷入了到達極限的困境
你可能會看到本來應該是給注冊應用使用的注冊端口被非注冊應用用做暫時的端口
RFC
詳細標注了眾所周知的和注冊的端口號
然而不幸的是
這個RFC文檔自從
年以來一直沒有被更新
然後你仍可以從IANA得到一個及時更新的端口列表
詳細URL為
numbers
>><< FTP Port模式和FTP Passive模式 當你對一個FTP問題進行排錯時候
你首先要問的一個問題是使用的是port模式的還是passive模式
因為這兩種行為迥異
所以這兩種模式引起的問題也不同
在過去
客戶端缺省為active(port)模式
近來
由於Port模式的安全問題
許多客戶端的FTP應用缺省為Passive模式
>>
FTP Port模式
Port模式的FTP步驟如下
客戶端發送一個TCP SYN(TCP同步)包給服務器段眾所周知的FTP控制端口
客戶端使用暫時的端口作為它的源端口
服務器端發送SYN ACK(同步確認)包給客戶端
源端口為
目的端口為客戶端上使用的暫時端口
客戶端發送一個ACK(確認)包
客戶端使用這個連接來發送FTP命令
服務器端使用這個連接來發送FTP應答
當用戶請求一個列表(List)請求或者發起一個要求發送或者接受文件的請求
客戶端軟件使用PORT命令
這個命令包含了一個暫時的端口
客戶端希望服務器在打開一個數據連接時候使用這個暫時端口
PORT命令也包含了一個IP地址
這個IP地址通常是客戶自己的IP地址
而且FTP也支持第三方(third
party)模式
第三方模式是客戶端告訴服務器端打開與另台主機的連接
服務器端發送一個SYN包給客戶端的暫時端口
源端口為
暫時端口為客戶端在PORT命令中發送給服務器端的暫時端口號
客戶端以源端口為暫時端口
目的端口為
發送一個SYN ACK包
服務器端發送一個ACK包
發送數據的主機以這個連接來發送數據
數據以TCP段(注
segment
第
層的PDU)形式發送(一些命令
如STOR表示客戶端要發送數據
RETR表示服務器段發送數據)
這些TCP段都需要對方進行ACK確認(注
因為TCP協議是一個面向連接的協議)
當數據傳輸完成以後
發送數據的主機以一個FIN命令來結束數據連接
這個FIN命令需要另一台主機以ACK確認
另一台主機也發送一個FIN命令
這個FIN命令同樣需要發送數據的主機以ACK確認
客戶端能在控制連接上發送更多的命令
這可以打開和關閉另外的數據連接
有時候客戶端結束後
客戶端以FIN命令來關閉一個控制連接
服務器端以ACK包來確認客戶端的FIN
服務器同樣也發送它的FIN
客戶端用ACK來確認
下圖圖示了FTP PORT模式前幾步步驟
/====================================================================\
| |
| [ ftp Client ] [ ftp Server ] |
| |
| (TCP:
連接初始化
控制端口) |
| SYN |
| Port xxxx
> Port
[TCP] |
| SYN+ACK |
| Port xxxx <
Port
|
| ACK |
| Port xxxx
> Port
|
| |
| (控制操作: 用戶列目錄或傳輸文件) |
| |
| Port
IP
Port yyyy |
| Port xxxx <
Port
|
| Port Seccussful |
| Port xxxx <
Port
|
| List
Retr or Stor |
| Port xxxx
> Port
|
| |
| |
| (TCP:
連接初始化
數據端口) |
| SYN |
| Port yyyy <
Port
|
| SYN+ACK |
| Port yyyy
> Port
|
| ACK |
| Port yyyy <
Port
|
| |
| |
| (數據操作: 數據傳輸) |
| Data + ACK |
| Port yyyy <
> Port
|
|
|
|
|
|
|
| |
\====================================================================/
FTP Port模式會給網絡管理人員在許多方面帶來很多問題
首先
在PORT命令消息中的IP地址和端口號的編碼不是直白地顯示
另外
應用層的協議命令理論上不應該包含網絡地址信息(注
IP地址)
因為這打破了協議層的原則並且可能導致協同性和安全性方面的問題
下圖是WildPackets EtherPeek協議分析儀解碼了PORT命令的地址參數
地址參數後是端口號
見PORT
部分的第一個阿拉伯數字乘以
然後加上第
個阿拉伯數字就得到端口號
所以客戶端指定了端口號為
*
+
=
/====================================================================\
| IP Header
Internet Protocol Datagram |
| Version:
|
| Header Length:
(
bytes) |
| |
|
|
| |
| Time To Live:
|
| Protocol:
TCP
Transmission Control Protocol |
| Header Checksum:
xAA
|
| Source IP Address:
DEMO |
| Dest
IP Address:
VI |
| No IP Options |
| |
| TCP
Transport Control Protocol |
| Source Port:
manage
exec |
| Destination Port:
ftp |
| Sequence Number:
|
| Ack Number:
|
| Offset:
(
bytes) |
| Reserved: %
|
| Flags: %
|
|
(No Urgent pointer) |
|
Ack |
|
Push |
|
(No Reset) |
|
(No SYN) |
|
(No FIN) |
| |
| Window:
|
| Checksum:
x
A |
| Urgent Pointer:
|
| No TCP Options |
| |
| FTP Control
File Transfer Protocol |
| Line
: PORT
<CR><LF> |
| |
| FCS
Frame Check Sequence |
| FCS (Calculated):
xF
C
A
F |
\====================================================================/
下圖驗證了服務器端的確從端口
打開到端口
的TCP連接
/====================================================================\
| TCP
Transport Control Protocol |
| Source Port:
ftp
data |
| Destination Port:
|
| Sequence Number:
|
| Ack Number:
|
| Offset:
(
bytes) |
| Reserved: %
|
| Flags: %
|
|
(No Urgent pointer) |
|
(No Ack) |
|
(No Push) |
|
(No Reset) |
|
SYN |
|
(No FIN) |
| |
| Window:
|
| Checksum:
x
A
C |
| Urgent Pointer:
|
| No TCP Options |
| |
| TCP Options |
| Options Type:
Maxinum Segment Size |
| Length:
|
| MSS:
|
| |
| FCS
Frame Check Sequence |
| FCS (Calculated):
x
A
BD
|
\====================================================================/
當使用FTP時候
網絡中的防火牆必須要聲明相應的端口
防火牆必須要跟蹤FTP對話然後檢查PORT命令
防火牆必須要參與從服務器端到客戶端在PORT命令中指定的端口連接的建立過程
如果網絡中使用了NAT(注
網絡地址翻譯)
那麼NAT的網關同樣也需要聲明相應的端口
網關需要把在PORT命令中指定的IP地址翻譯成分配給客戶的地址
然後重新計算TCP的Checksum
如果網關沒有正確地執行這個操作
FTP就失敗了
黑客可能會利用FTP支持第三方特性這一特點
在PORT命令中設置IP地址和端口號參數來指定一台目標主機的地址和端口號(有時候稱這種攻擊為FTP反彈攻擊)
例如黑客可以讓一台FTP服務器不斷地從它的源端口
發送TCP SYN包給一系列目的端口
讓FTP
From:http://tw.wingwit.com/Article/Common/201311/5207.html