FTP傳輸原理(加強,進階)關鍵字:FXP RENT STOR
資料通道:資料通道是和FTP伺服器進行檔案傳輸或者列表的通道。
大家可能會問,為什麼FTP協議需要兩個通道呢? 我舉一個簡單的例子,當我們用FTP客戶端比如FTPRush下載FTP上的檔案的時候,通常會加入好幾個目錄和檔案到佇列視窗,那麼當下載開始的時候,佇列裡面的第二個檔案怎麼知道該被傳輸呢?這就是控制通道的用處了,當下載檔案的時候,FTP客戶端會 等待FTP伺服器返回指令,這個指令就是通過控制通道來完成的,當資料通道的傳輸完成以後,FTP客戶端就會接收到來自控制通道的指令,這樣FTP客戶端就可以知道這個檔案已經傳輸完成或者失敗,進行下一個傳輸了。
PASV: 大家使用FTP客戶端的時候,經常會發現FTP伺服器的屬性帶有 PASV 或者PORT,中文的方式叫做 被動模式和主動模式。這兩個模式是為FTP的資料通道服務的,被動模式就是FTP客戶端傳送一個PASV的指令,FTP伺服器端返回一個已經開啟的埠讓FTP客戶端連線上開始資料傳輸。FTP伺服器端返回的指令一般就是 "227 Entering Passive Mode (200,10,211,111,13,113)" 這樣的格式,大家可能會問,"(200,10,211,111,13,113)" 是什麼意思呢,其實這個格式包含了FTP伺服器當前開啟等待FTP客戶端連線的地址和埠,"202,10,211,111" 其實就是FTP伺服器的地址,只要把 "," 替換成 ".",那麼就是一個標準的IP地址了,"13,113" 就是FTP伺服器開啟的埠,但是這個埠是經過變換了的,我們可以很簡單的反算出來真實的埠,那就是 13乘以256然後加上113。有的時候,大家會發現,可以連線上一個FTP但是用PASV方式並不能列表,明明PASV返回的指令是 "227 Entering Passive Mode (200,10,211,111,13,113)" 啊,是公網地址啊,為什麼不能列表呢? 這可能就是因為FTP伺服器返回的是公網的地址沒錯,但是呢,這個公網的地址根本就不是FTP伺服器所偵聽連線的IP地址,因此FTP客戶端永遠也不可能連線上的,那怎麼辦啊,那個FTP上面據說有電影下載啊,別哭啊。。FTPRush的站臺屬性對話方塊的 首頁的"FTP伺服器"的框框裡面,有一個"伺服器使用 內網/不可路由/Masq 型別的IP地址",選擇上這個就可以列表了,當這個選項被選擇的時候,在傳送PASV指令到FTP伺服器並得到FTP伺服器返回的地址和埠時候,FTPRush會自動用FTP伺服器的地址替換掉這個PASV指令返回的IP地址而保留埠,這樣就可以正確連線並列表了。在 FTPRush的 “選項”對話方塊 的 “連線”樹節點的頁面裡面的“資料連線”框框,我們還可以看到一個 “智慧處理位於NAT後面的FTP伺服器”的選項,這是幹什麼的呢?當一個FTP在NAT對映功能下對外網開放的時候,PASV會返回 “(10,xx,xx,xx,xx,xx)”這樣的內網地址,如果FTP客戶端使用這個內網地址去連線FTP伺服器開啟的埠,很顯然是連線不上的,FTPRush能智慧識別FTP伺服器PASV返回的地址是否是一個內網地址,如果是,就比較FTP伺服器 的地址是否也是內網地址,如果不是,嘿嘿,FTP伺服器是NAT後面的伺服器啦,這樣FTPRush就把這個內網地址替換掉,使用FTP伺服器的地址去連線..............哇.............這個FTP伺服器終於列表出來了
PORT: PORT模式就是FTP客戶端傳送一個PORT xxx,xxx,xxx,xxx,xx,xx 型別的指令到FTP伺服器,告訴FTP伺服器連線到這個地址,同時FTP客戶端開啟這個資料連線埠等待FTP伺服器來連線。大家應該經常遇到FTP客戶端傳送PORT指令去列表,當時半天列表不出來的情況,這是為什麼呢,很大的原因就是因為 FTP伺服器不能連線上FTP客戶端傳送給它的地址和埠,一般有兩種情況,一個是你的機器是內網的地址,那麼FTP伺服器是沒有辦法連線進來的,還有就是你的機器或者你的網路使用的防火牆並拒絕來自外部的連線。對於內網地址使用FTP客戶端連線只提供P ORT方式的NAT使用者,如果使用FTPRush,在FTPRush的選項對話方塊中,點選“連線”那個樹節點,出來的頁面裡面的“資料連線”內容就是為了這個功能服務的,你可以輸入你的公網IP地址或者一個域名到 "繫結套接字"後面的那個編輯框,那麼當FTPRush傳送PORT指令的時候,就會使用這個地址而不是你的內網地址。那FTPRush裡面那個“限制本地埠使用範圍”是幹什麼的呢?當我們設定了本地埠的選擇範圍,那麼PORT指令裡面包含的那個埠資訊就會在這個 範圍之內了。同時FTPRush的這個本地埠的選擇範圍是支援多個子範圍的,比如你可以輸入 21,300-300 ,這樣大家可能又會問,為什麼要這樣呢?直接 21-300不就行了? 這是因為,有的ISP,在提供給你internet連線的時候,在某個範圍的埠,傳輸速度是最好的,比如瑞典的一些ISP,當資料傳輸在 21 或者 80 的時候,速度最快,比其他埠的傳輸快很多,當然使用者希望PORT的時候就在21或者80埠啦,這個時候如果簡單使用 21-80,那麼可能FTPRush就讓FTP伺服器連線你的60埠了,速度慢好幾倍。。。不知道國內是不是有這樣BT的ISP了。
STOR: 當我們已經要求FTP伺服器打開了資料傳輸通道的時候,傳送一個STOR的指令就是告訴FTP伺服器:“我現在開始傳輸檔案xxxxxxx,接收吧”,這樣FTP伺服器才開始正式接收,這個過程呢,我們叫做。。。。。。。。。。。。上傳
RETR: 當我們已經要求FTP伺服器打開了資料傳輸通道的時候,傳送一個RETR的指令就是告訴FTP伺服器:“我已經準備好了,請把檔案xxxxx開始傳送給我”,這樣FTP伺服器才正式開始把檔案傳給你哦。這個過程了,我們叫做。。。。。。。。。。。。。下載?
那麼大家可能感興趣的就是FXP了,FXP到底是怎麼回事呢?不要通過我的本地機器就可以直接控制兩個伺服器傳輸檔案,太神奇了。
其實FXP就是FTP協議的上傳下載的一個後門,為什麼這樣說呢,讓我們回憶一下剛才的檔案上傳下載的機制,PASV的指令能夠讓我們獲得一個FTP伺服器的埠進行檔案傳輸,PORT指令能夠在我們的機器上開啟一個埠等待FTP伺服器來連線,然後呢, 就有聰明人想到,如果把PORT指令也應用到FTP伺服器端呢?。。。。。。。。。。。。
FTPRush是支援FXP的,當我們FXP的時候,我們會發現FTPRush的指令順序,下面就是一個標準的指令順序
[1] PASV
[1] 227 Entering Passive Mode (200,10,211,111,13,113)
[2] PORT 200,10,211,111,13,113
[2] 200 PORT command ok
[2] STOR xxxxx.jpg?
[2] 150 opening BINARY data connection for xxxxx.jpg
[1] RETR xxxxx.jpg
[1] 150 opening BINARY data connection for xxxxx.jpg
這樣就可以FXP了,為什麼呢??
為了實現FXP,FTP客戶端先給FTP1傳送一個PASV的指令,請FTP1開啟一個數據連線埠等待連線,很好,FTP1返回了這個資料連線地址給我們,這樣,我們把這個資料連線地址,用PORT指令發給FTP2,告訴它:“你去連線這個地址”,上帝 保佑,FTP2告訴我們說沒有問題,我準備連線這個地址了。 到了這個步驟,FTP1和FTP2之間的聯絡通道已經打開了。好了,我們該把xxxx.jpg從FTP1傳到FTP2了,那怎麼傳呢?對於FTP2來說,我們是把xxxx.jpg 上傳給它,對於FTP1來說,我們是把xxxxx.jpg 下載回來,回憶一下剛才談到的上傳下載的指令。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。想到什麼沒有?
STOR是上傳,RETR是下載
ok,這樣我們的FTP客戶端就傳送一個STOR指令給FTP2:"準備好,我開始上傳xxxx.jpg了",然後趕快也傳送一個RETR指令給FTP1:"準備好,我要下載xxxx.jpg 了",好了,這樣FTP1和FTP2就開始親密接觸上演出。。。。
不過有的時候,FTP伺服器並不是那麼容易撮合的,我們在使用FTPRush進行FXP的時候,有的時候會看到 "開始 反向FXP",這是為什麼呢?
在上面的FXP原理的描述中我們可以看出來,為了FXP的成功,我們必須成功建立兩個FTP伺服器之間的資料傳輸通道,通過PASV指令讓一個伺服器開啟埠等候連線,通過PORT指令讓另外一個FTP伺服器去連線這個開啟的埠。之前的FXP指令順序的 描述,是讓要下載檔案的FTP伺服器開啟埠等候連線,但是很不幸,有的FTP伺服器根本不支援PASV方式的連線,那怎麼辦呢?那我們就把FXP的指令顛倒一下,讓這個不支援PASV的FTP伺服器只使用PORT指令,而在另外一個本來是接收PORT指 令的FTP伺服器使用PASV指令,這樣我們就把男追女改成了女追男了 所以呢,FXP是需要至少一個FTP支援PASV指令的才能實現的。
相關推薦
FTP傳輸原理(加強,進階)關鍵字:FXP RENT STOR
控制通道:控制通道是和FTP伺服器進行溝通的通道,連線FTP,傳送FTP指令都是通過控制通道來完成的。 資料通道:資料通道是和FTP伺服器進行檔案傳輸或者列表的通道。 大家可能會問,為什麼FTP協議需要兩個通道呢? 我舉一個簡單的例子,當我們用FTP客戶端比如FTPRush下載FTP上的檔案的時候,通常會加入
開放式思維,如MBA等(商學院,教育,進階)
-- 博文《一個大學教授在美國的生活》《給尋求幫助的中國博士生一些明確的建議》; 訪談《何毓琦教授訪談:年輕人如何做科研》; 你為什麼發不了好文章,寫給苦惱博士的一封信- http://blog.csdn.net/kezunhai/article/details/109
Udacity資料分析(進階)- 統計學:檢驗心理學現象
統計學:檢驗心理學現象 背景資訊 在一個Stroop (斯特魯普)任務中,參與者得到了一列文字,每個文字都用一種油墨顏色展示。參與者的任務是將文字的列印顏色大聲說出來。這項任務有兩個條件:一致文字條件,和不一致文字條件。在一致文字條件中,顯示的文字是與它們的列印顏色匹配的顏色詞,如“
小白學習之路,基礎四(函數的進階)
strong 部分 iter 讀者 結果 http 內部 mod 取數 一,內置函數 前面已經認識了函數,對函數都有所了解了,其實呢,在Python中提供了很多內置的函數方便給我們調用。下面會給大家提到一些常用的常用內置函數的用法,當然還有一些其他沒講到的,你也可以看參考文
ZCU106開發詳解之AXI_Bram(重磅推出,進階必備)
感謝大家兩週的等待!!本週連發兩篇!!!! 最近團隊事情比較多,在忙ZCU106的視訊處理方面的開發實現了編解碼,RTSP視訊流,影象疊加等應用。如果有朋友想了解更多相關資訊請加QQ群836535064。我們會將相關資料釋出於QQ群中。 歡迎有需求的朋友深度合作。本團隊
ZCU106開發詳解之AXI_HP(重磅推出,進階必備)
感謝大家的等待!! 如果有朋友想了解更多相關資訊請加QQ群836535064。我們會將相關資料釋出於QQ群中。 歡迎有需求的朋友深度合作。本團隊專注於高速視訊編解碼,高速訊號採集處理方案提供。同樣也請入群加管理員。 ZCU106開發詳解之AXI_Bram(重磅推
爬蟲(進階),爬取網頁資訊並寫入json檔案
import requests # python HTTP客戶端庫,編寫爬蟲和測試伺服器響應資料會用到的類庫 import re import json from bs4 import BeautifulSoup import copy print('正在爬取網頁連結……'
小米面經-技術崗(編程小白如何進階)
在哪裏 相交 it公司 小白 來源 代碼行數 多邊形 通知 計算 先介紹下背景,我本科專業是硬件轉軟件方面,所以一開始算法基礎比較差,沒有做過系統設計,為了能得到好的面試機會,我一直都有努力準備,還在網上關註了各種能提高編程能力的攻略,我覺得打好基礎的前提是要找到優質的學習
程序員不能錯過的技術知識圖譜,進階路上必備神器。
程序員 jave 本文轉載自李亞鵬本文是鵬哥多年來積累和收集的技術知識技能圖譜,有的是鵬哥原創總結的最佳實踐,有的是小夥伴們的分享。其實,每個秘籍圖譜裏面的內容都是互聯網高並發架構師應該了解和掌握的知識。鵬哥索性就把這些圖譜都收集在一起,並且進行了歸類,便於大家查找和學習。暫把標題定為:“史上最全的技
翻譯(六)——T-SQL的進階之路:超過基礎的2級水平:寫子查詢
相關 完整 圖像 reg 想要 試驗 releases 驗證 不用 T-SQL的進階之路:超過基礎的2級水平:寫子查詢 格雷戈裏·拉森(Gregory Larsen),2016/01/01(第一次出版:2014/01/29) 該系列 這篇文章是樓梯系列的
python函數四(裝飾器進階)
開放 int col wrap 運行 lag 分享 none name 一。開放封閉原則 1.對擴展是開放的 任何一個程序,不可能在設計之初就已經想好了所有的功能並且未來不做任何更新和修改。所以我們必須允許代碼擴展、添加新功能。 2.對修改是封閉的
python之路——函數(進階)
fun false 技術 對象 pri pre star rgs 美的 函數名(第一對象) 1. 函數的內存地址,print(func) def func(): print(222) print(func) 2. 函數名可以賦值給其他變量 def func
用裝飾器做一個登陸功能(進階):
read AD OS pos 商城 *args readline wrapper 改變 1 dic = { 2 ‘username‘:None, 3 ‘status‘:False 4 } 5 def login(flag): # 傳入
Web安全工程師(進階)課程表
編程語言 多線程 持久 運維平臺 ash ssrf 中間件 beautiful 文件上傳 01-SQL註入漏洞原理與利用 預備知識: 了解HTTP協議,了解常見的數據庫、腳本語言、中間件。具備基本的編程語言基礎。 授課大綱: 第一章:SQL註入基礎 1.1 Web應用架構分
05 redis(進階)
認識 key code 永久 服務 頻繁 list san scores redis 階段一、認識redis 1、什麽是redis Redis是由意大利人Salvatore Sanfilippo(網名:antirez)開發的一款內存高速緩存數據庫。Redis全稱為:Remo
06 python操作MySQL和redis(進階)
python 數據 交叉 acid execute 維護 incrby insert back python操作mysql、redis 階段一、mysql事務 主要用於處理操作量大,復雜度高的數據。比如說,在人員管理系統中,你刪除一個人員,你即需要刪除人員的基本資料,也要刪
09 mongoDB基礎(進階)
成功 mov 集合 bsp 數據庫 hang pymongo 多條 場景 mongoDB基礎 階段一、認識mongodb 1、mongodb 組織數據的基本形式 MongoDB————》數據庫————》集合————》文檔 mysql:表:行和列:字段 運用場景:如 送外賣騎
11 非阻塞套接字與IO多路復用(進階)
img 一行 回調 lba let 自己 elf accept error: 1、非阻塞套接字 第一部分 基本IO模型 1.普通套接字實現的服務端的缺陷 一次只能服務一個客戶端! 2.普通套接字實現的服務端的瓶頸!!! accept阻塞! 在沒有新的套接字來之前,不能處
30 裝飾器終極版本(進階)
import timeFLAGE = Falsedef timmer_out(flag): def timmer(func): def inner(*args,**kwargs): if flag: start = time.time()
python筆記26(爬蟲進階)
一、scrapy框架簡介 1、什麼是Scrapy? Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用框架,非常出名,非常強悍。所謂的框架就是一個已經被集成了各種功能(高效能非同步下載,佇列,分散式,解析,持久化等)的具有很強通用性的專案模板。對於框架的學習,重點是要學習其框架的特性、各個