近年來,國內網絡版權維護的力度逐步加大,從“凈網行動”嚴查網盤分享內容、直致快播于死地,到廣電封殺電視盒子,再到版權局嚴令未經授權的云音樂全面下架,政府的一系列舉措讓高枕無憂地享受了幾十年免費內容的網民們終于幡然醒悟——現在是動真格的了。
技術的進步永遠超前于政策和法律,就如同醫學的發展永遠超前于倫理。本著互聯網的開放精神,這么多年來,國內的互聯網產品商前赴后繼,為用戶獲取免費資源提供了極大的便利。想想曾經,優酷土豆上電影電視劇應有盡有,百度音樂歌曲隨便下,115上的動畫可以瘋狂地塞滿硬盤,種子搜索網站遍地開花……
保護版權是好事,但對于一個普通用戶(消費者)來說,現在要追個劇、看個綜藝節目、聽個音樂,得去好幾個地方,手機上要裝好幾個APP,一些冷門資源則根本沒有正規門路,而對于筆者這樣的資源控,更是習慣把文件下載下來,不親手拿到總覺得沒有安全感,也滿足不了自己的收藏欲,而且鑒于國內現在的網速,在線觀影的清晰度實在不給力,流媒體的回看、快進也并不方便。
是的,好東西,要放在自己硬盤里才是王道。怎么獲取呢?當然靠網盤。
為什么要用網盤?
網盤是云時代帶來的超強神器,如果你到現在都還沒用過,真該好好地自我檢討,即使你不是個收藏控,也對冷門資源毫無興趣,至少也該利用網盤備份一些自己的資料、和朋友共享一些內容。
為什么說網盤是神器?作為以服務器為物理介質的云存儲服務,網盤與PC本地硬盤的機理和用戶體驗并不相同。除卻冗余備份這些尚不能直觀感受到的特性,網盤最強大的一點,也是令人最愛不釋手的一點,就是秒傳機制。如果云端已經存在某個文件,那么我們將其上傳至網盤的耗時是秒級的,該情況下的上傳速度跟網速幾乎沒有關系。即便你家是2M的ASDL寬帶,照樣瞬間上傳。
這一機制的實現依靠的是hash(哈希)算法,在云端,每個文件都有著一個獨一無二的hash值,判斷兩個文件是否相同,只需判斷其hash值是否相同。hash算法有許多種,任何一種計算文件hash值的算法所追求的都是使結果唯一。舉個最簡單的例子——取余:
1%7 = 1
9%7 = 2
2015%7 = 6
2013201420152016%7 = 3
不論多長的數,經過取余運算,最終結果(即hash值)都是一個小于7的非負整數。在這個例子中,明顯存在著不同數據的hash值相同的情況,比如10和2013201420152016的hash值都是3,這一算法只能生成7個不同的hash值(0~6),因此只能標記7個不同的數據。
云存儲所采用的hash算法明顯要復雜得多,以著名的MD5算法(信息摘要算法第五版)為例,任何數據或文件(文件本來就由數據組成)經過MD5算法運算,均生成一個長度為128位的二進制數,其hash值就可以有2^128個(約340萬億億億億),如果以MD5碼作為文件的唯一標識,那么基本允許全球(按70億人口算)每人擁有近5萬億億億個互不相同的文件。這些都是天文數字,以目前的情況看,世界上的文件再多,也不可能達到這個數目。類似的hash算法有許多,它們都力求保證不同文件擁有不同的hash值。
(在文件系統允許的情況下)一個文件的大小可以是任意的,可以只有幾K,也可以有好幾十G,但其所對應的hash值總是只有那么長(如MD5碼永遠只有128位),在網絡上進行文件傳輸時,傳hash值比傳文件本身要便捷得多。網盤就是利用這一原理,在保存文件的同時保存著它們的hash值,在用戶上傳文件時,先計算文件的hash值,在云端搜索是否存在相同的hash,若存在,則說明服務器已有這個文件,就不需要真正地上傳,只需在用戶的網盤里提供一個鏈接,讓用戶誤以為文件已經上傳成功(事實上上傳的僅僅是這個文件的hash值)。
有了這一功能,我們備份電影、動畫、游戲的時候,就無需忍受每秒幾十KB的上傳速度。硬盤里放不下,又舍不得丟掉的資源,都可以盡情地留在網盤。而別人分享的文件,則可以瞬間轉存到自己的網盤里,想什么時候下就什么時候下,不怕丟失。
同時也正是由于這一機制,網盤才得以擁有強大的離線下載功能。離線下載通常支持BT種子和鏈接兩種模式,用迅雷拖種慢得要你相信,而掛到網盤卻可以瞬間搞定,直接秒殺迅雷會員。其原理十分簡單,就是看種子(或鏈接)里的文件是否已經存在于服務器,已經有了就不需要再慢慢地獲取。(當然迅雷會員的離線下載也是同一原理,但迅雷要錢,網盤免費,你說用哪個。)
離線下載的詭異現象
BT種子也是之前針對資源共享的一個偉大發明,其宗旨是去中心化,讓用戶可以點對點進行文件傳輸,不再需要服務器,文件存在于甲乙丙丁的個人電腦上,他們做種,你就可以去復制過來。
網盤與種子的結合更是強強聯手,我們不再需要掛著下載軟件苦等別人做種,別人一關機就根本沒有速度。使用網盤的離線下載功能,可以瞬間將種子里的資源保存到自己的網盤,而后從網盤上下載,即便不是滿帶寬,速度也至少不會消失。
網盤最早推出時,下載速度通常都是滿帶寬,這是用戶直接從服務器下載的原因。但發展到現在,網盤的下載速度不比以往了,由于其機制沒有公開,只能猜測幾點原因:
1、為了減輕服務器壓力,動態限制了每個用戶的下載帶寬;
2、在P2P機制的輔助下,有些情況下服務器不作為下載源;
3、為了賺錢,你開通會員,我就讓你滿帶寬下載。
但是這里的重點不在于談論如何使用離線下載搞定高清資源,也不是推薦BT天堂、ed2kers、ed2000、放放電影、一生有你、BT之家這些隨時可能被查抄的資源搜索站,而是如何在當今這樣一個艱苦的環境下,繼續網友間的資源共享,如何自己動手,互惠互利。
現在各大網盤都限制了分享功能,比如在百度云,絕大部分電影電視劇都已經無法分享,其服務器上維護著一個所有盜版影視文件的hash值的列表,這是一個黑名單,黑名單中的文件一分享就會立馬被屏蔽,而115的分享功能免費用戶根本無權使用,金山的外鏈服務器干脆永遠都在維護。其他網盤我用得不多,想必也并不會好到哪去。
天真如我一直以為,在網盤上掛種子,只要云端有資源,離線下載就能瞬間成功。于是即便網盤無法直接分享,只要在網上找到種子,就可以毫無阻礙地拿到資源,我想給別人分享,也只需要自制種子就行。直到前不久的某一天,我在百度云上掛的一個離線怎么也沒有速度,想著可能云端沒有資源,服務器正在別處尋找,但后來有機會從別人那兒直接轉存到了相同的文件,云端明明就有,而離線卻依然沒有速度。這究竟是怎么回事呢?
我開始實驗,用μTorrent軟件制作一些網盤上已有文件的種子,有些離線成功,有些則永遠找不到資源,不同網盤的表現還不盡相同。我將自己硬盤里獨一無二的文件上傳到網盤,制成種子進行離線,則沒有一個能成功。這一現象讓我深感困惑,難道網盤的離線下載并沒有將種子與云端已有的文件進行hash匹配嗎?
我思考許久,突然茅塞頓開:BT種子采用的hash算法是SHA-1,誰說網盤服務器里文件對應的hash碼就是SHA-1碼!實驗證明,每個網盤都有著自己的hash算法,它們沒有義務再另外去計算每個文件的SHA-1碼。
那么為什么有些種子掛離線就能成功呢?那是最初,在有人做種的情況下,網盤拿到了種子里的文件,并把種子和文件的對應關系記錄了下來。在這之后,網盤才能根據種子在云端找到現成的資源。
可見,即便是強大的網盤,也并不能確保每個種子都離線成功,要是沒人做種,即使云端有資源,你也永遠都拿不到。
這就意味著,我想共享一個資源,將其做成種子是不靠譜的,畢竟親自做種還是很麻煩的。退而求其次,百度云的好友可以無限制地互相分享,但是我們不可能讓每個資源發布者和跪求者都加成好友。
究竟還有沒有其他辦法呢?
在測試種子離線時,我也測試了磁力鏈接。磁力鏈接是對BT種子的優化,種子本身是一個文件,而磁鏈是一串字符,更容易傳播,也更易于避免被和諧。事實上磁鏈中保存的也是一個hash碼,通常我們見到的磁鏈形式是這樣的:
magnet:?xt=urn:btih:33LXETSPT2GTR6ZZ4VH3TELXBYSSFU7Y
其中“33LXETSPT2GTR6ZZ4VH3TELXBYSSFU7Y”就是hash值,此處的hash算法是BTIH(BitTorrent Info Hash),BTIH實際上是對SHA-1信息字段的hash值,也就是說,每個BTIH磁鏈都是與一個特定的種子文件相關聯的。我們在使用這些磁鏈時,網盤后臺會去嘗試尋找與其對應的種子文件,最終的離線下載還是靠的種子。網盤隱藏了這一步驟,但是在迅雷里就一目了然:
那么是不是就走投無路了呢?別急,磁鏈有很多種,電驢磁鏈(ed2k)就不需要依托種子,其hash碼是針對資源文件本身計算出來的,也就是說,電驢磁鏈與文件一一對應。于是我們是否可以靠它來突破網盤的分享限制呢?
ed2k使用混合MD4算法,只支持對單個文件進行編碼,正好一一對應,但是我們仍然不能妄想網盤會維護云端每個文件的ed2k碼。然而即便只有一線希望也不能輕易,于是我使用eMule LinkCreator軟件,生成了一個本地文件的ed2k磁鏈:
ed2k://|file|3.txt|648|1DC437533C342D4531A9E0986A73E6DC|h=PFWKEORT7MY4ITQUEWHQUXUM3T6LKZXR|/
(為保護隱私,偷偷改動了一下,所以現在這個磁鏈是不能用的。)
格式是這樣的:
ed2k://|file|文件名|文件大小|混合MD4碼|h=用于修正文件損壞的根哈希值|/
這是我自己創建的一個文件,云端絕對沒有。當我將其上傳到百度云,然后掛磁鏈離線,并沒有任何反應。但是當我將其上傳到115,掛磁鏈離線,奇跡出現了,真的轉存成功了!
這證明一點:115在上傳文件時會計算其ed2k碼并維護在服務器的表中,而百度卻并沒有這么做。(從這點隱藏極深的差異,就可以看出115做產品確實更用心。)
然后我試了許多文件,皆完美離線,在別人的115上也能離線到我的文件,這是多么令人振奮的一件事啊!以后我可以隨心所欲地分享文件,繞過網盤的一切限制!
(咳,除非115哪天腦子抽筋封禁這個擦邊球……)
不單是我個人的文件,云端的影視資源,同樣可以完美離線,比如我生成了自己手頭《碟中諜5》的磁鏈:
ed2k://|file|碟中諜系列:[2015][7.8]碟中諜5:神秘國度.mkv|7517011186|DE3ACB4715A116B5A72FFE65BFBD4E49|h=KYTLQFVBICOTNKK6W7X2V65FAZKRKOK2|/
(沒錯,這個磁鏈是可以用的,有115的朋友可以試一下。)
但并不是所有影視資源都能順利離線,可以認為115在早前并沒有維護文件的ed2k碼,后來隨著ed2k離線功能的推出,才開始計算新上傳文件的ed2k碼,以前的老文件,即便現在重新上傳也不會計算ed2k——個人認為這一點應該改進,也許只是程序員并沒有考慮這么周到。
好了,不多說了,我要去貼吧發資源了。