天天看點

利用nc 直覺了解阿裡雲OSS 存儲服務

利用nc 直接與阿裡雲oss伺服器建立tcp 連接配接,通過輸入http 請求頭部及資料與oss進行互動,以此了解阿裡雲oss服務的本質及使用阿裡雲oss過程中的一些trouble shooting。

一台連上網際網路的linux主機(如果沒有可以購買一台阿裡雲ecs),注冊并開通阿裡雲oss服務(oss.aliyun.com)并建立一個bucket,本文以青島的bucket:bucket-example(bucket-example.oss-cn-qingdao.aliyuncs.com) 為例進行一系列操作,為了簡化示範步驟将bucket設定為public-read-write 公開讀寫,這樣可以忽略簽名。oss 相關文檔見oss.aliyun.com。

用http put 方法在oss上建立一個新檔案,先建立一個空檔案吧

先根據oss restful api 把http 請求構造出來,注意下面content-length 設定為0,這樣就可以建立一個空檔案

利用nc 與oss 伺服器80端口建立一條tcp連結

看結果,oss 傳回200 ok,請求成功,注意下面的etag,正好是一個空檔案的md5,這樣,一個空檔案就建立成功了,可以去控制台上看看是否真的有。

利用nc 直覺了解阿裡雲OSS 存儲服務

接下來建立一個有内容的檔案吧,把上面put 請求http 頭部的content-length 改成10試試。

利用nc 直覺了解阿裡雲OSS 存儲服務

按理現在我們在oss上已經建立一個内容為”hello, world.“, 是否建立成功并且内容真的是”hello, world. “接下來再利利用nc 體驗下get 請求吧。

首先還是構造get 請求的http 頭部

我們先擷取3.1 中建立的空檔案,200 ok,content-length為0, 說明檔案存在而且内容确實為空

利用nc 直覺了解阿裡雲OSS 存儲服務

再擷取下剛剛的建立的内容為"hello, world." 的檔案(見下圖),但是為什麼get 下來内容是"hello,wor"?

再看下3.1 節put 時候的content-length長度為10, 而"hello, world."長度超過10,對于多出來的資料oss會做截斷處理,如果是keeplive連接配接超出content-length的資料會了解成下一個http請求資料。

利用nc 直覺了解阿裡雲OSS 存儲服務

根據oss restful api 構造copy 請求,其實就是put 請求加上x-oss-copy-source 頭部指定copy 源檔案位置

執行過程及結果結果如下圖,如果源和目的為同一個檔案可通過更改頭部更改objectmeta,可以嘗試用一些錯誤的頭部測試oss的行為。現在你的bucket 下通過copy 多出來一個oss_file_copy 檔案。

利用nc 直覺了解阿裡雲OSS 存儲服務

delete 請求http 頭部

執行過程及結果如下圖,現在oss 上bucket-example 下的oss_file檔案已經被删除了

利用nc 直覺了解阿裡雲OSS 存儲服務

跨域這個東西做前端的同學遇到的應該比較多,使用oss過程中出現浏覽器向oss發送跨域請求出問題時第一反應是”怪罪“oss,其實不一定是oss的問題,有可能是浏覽器根本就沒把請求發出去等等原因.......

下面我們就來利用nc測試下當跨域請求出問題的時候是否是oss問題。

将此請求發送給oss,oss傳回結果是403 forbidden,如下圖

看到錯誤提示”corsresponse: cors is not enabled for this bucket.“

利用nc 直覺了解阿裡雲OSS 存儲服務

去控制台上對bucket-example 設定cors

登陸oss管理控制台,點進bucket-example->bucket 屬性->cors設定->添加規則

利用nc 直覺了解阿裡雲OSS 存儲服務

再将此options 請求發送給oss,請求成功

利用nc 直覺了解阿裡雲OSS 存儲服務

在學習及使用oss的過程中肯定會遇到很多問題,而這些問題必須通過抓包來查出問題,看看http 請求到底把什麼資料發出去了又收到了什麼樣的資料,而很多線上上使用的bucket權限是不能夠設定為public-read-write 的,是以在構造請求頭部的時候需要簽名,這就大大加大了oss http請求頭部構造難度,是以我們可以利用nc 及 wireshark 來對http請求進行重放,oss 簽名在15分鐘内有效,是以在15分鐘内都可以對請求進行重放,甚至可以利用此點清空object内資料。

為了便于示範這裡用osscmd(可取官網下載下傳)發送帶oss簽名的請求,同時啟動wireshark抓包

過濾http 請求包,也就是dst port 80 的包,點選并單擊中右鍵->follow tcp stream

利用nc 直覺了解阿裡雲OSS 存儲服務

可以清晰看到請求頭部及資料

利用nc 直覺了解阿裡雲OSS 存儲服務

将頭部複制出來

進行重放,成功

利用nc 直覺了解阿裡雲OSS 存儲服務

content-length 可以改成任意合法值,我們就可以更改object内資料了

我們來試試将content-length 改成0,清空object内資料試試

注意content-length,和etag,content-length我們改成0, oss傳回的etag 是空檔案的md5

清空object内資料成功。

利用nc 直覺了解阿裡雲OSS 存儲服務

以上幾個例子通過nc 與oss 伺服器建立連接配接後輸入http請求資料直覺感受oss對外提供的功能,當然oss提供的功能還遠遠不止這麼多,還有其他很多很贊的功能都是以http 形式對外提供,可以根據官方提供的api文檔構造出http請求頭部用上述同樣方法與oss互動,nc 會列印出tcp連接配接上所有http資料,直覺了解oss。通過nc 與 wireshark配合重放oss 請求去重制問題并進行相關trouble shooting。