我是怎樣完成一個音悅臺下載程式的?

pythontab發表於2014-05-05

本文是pythontab技術群① 網友 “貴陽-Win 7” (微博)投遞的文章

一、序

    前段時間發現一個可以下載音悅臺影片的程式,應該是E語言寫的,本著想逆向一下,然後用python重新寫一個,奈何彙編基本忘完了,才搞了一會就搞不下去了。

    就這麼放棄麼?肯定不是,我又想了一個思路,既然它要解析一個網址,那麼我就試試抓包分析,所以就有了這篇文章。

我是怎樣完成一個音悅臺下載程式的?

二、上wireshark

    wireshark是非常流行的網路封包分析軟體,功能十分強大。可以擷取各種網路封包,顯示網路封包的詳細資訊。

首先我開啟wireshark,設定抓包規則,抓HTTP包,內容應該會包含yinyuetai這樣的字串。

規則就變成了:

http contains yinyuetai

Wireshark 開始工作後,我啟動了這個音悅臺解析軟體,找到一個影片播放地址

http://v.yinyuetai.com/video/40

然後點選單頁解析,wireshark馬上就捕獲到了資料,我們進一步分析

 我是怎樣完成一個音悅臺下載程式的?

在捕獲的資料中,我發現了一個GET請求,點選右鍵,然後Follow TCP stream

 我是怎樣完成一個音悅臺下載程式的?

到目前為止,我們獲得的資訊是,這個程式傳送了一個GET請求,請求的路徑是

/insite/get-video-info?flex=true&videoId=40

請求的主機是

www.yinyuetai.com

請求的資料中,videoId後面的40是我們影片播放地址的最後一個值。

我在瀏覽器中嘗試訪問這個完整的URL,它給我返回了一個檔案,我嘗試用notepad++之類的軟體觀察了,發現其中有很多資訊。

那麼,我該怎麼繼續呢?

三、上python

這個影片解析程式,在我點選解析後,出現了下面類似的字樣,其中包含了下載連結

http://flv.yinyuetai.com/uploads/vid...

那麼,在上面返回的這個檔案中有沒有類似的字串呢?我透過ctrl+F進行了一下查詢,果然有。

我是怎樣完成一個音悅臺下載程式的?

下面是我用python進行測試時候的截圖。

我是怎樣完成一個音悅臺下載程式的? 

我們可以在返回的html程式碼中找到對應的字樣,如果我們再能使用正規表示式匹配一下,那就完美了。

四、上正則

透過多次測試,發現下載地址的規律如下:

http://[一些字母].yinyuetai.com/uploads/videos/common/[一些內容]&br[一些內容]

最終正規表示式為

re.findall("http://\w*?\.yinyuetai\.com/uploads/videos/common/.*?(?=&br)",html)

我這裡解釋一下,

1.首先查詢http://

2.然後使用懶惰模式匹配字母

3.然後匹配對應的.yinyuetai.com/uploads/videos/common/

4.然後使用懶惰模式匹配一些內容

5.最後捕獲&br

五、多次除錯

    寫完一個程式是多麼令我們高興,除了程式按照我們的要求工作,我們在其中更是收穫良多,是不是?

    但,一切尚未結束。

是的,完全沒有,要寫好一個程式哪有這麼簡單?

會不會有異常?會不會timeout,音悅臺會不會判斷UserAgent

如何使用多執行緒下載多個影片?

會不會有假冒偽劣影片冒充?(我腫麼會告訴你其中有一個0.6+MB的假冒偽劣影片)

但,那已經是你需要考慮的問題了。

六、新的挑戰

今天在網際網路閒逛的時候發現一個好東西,叫做youtube-dl(不知道的自己google

它可以下載youtube的影片,而且是python寫的,但是我下載來看,卻加密了,你能透過抓包再寫一個麼?

Tip 1:

https://www.youtube.com/get_video_info?&video_id=RBumgq5yVrA&el=detailpage&ps=default&eurl=&gl=US&hl=en

Tip 2:

眾所周知,在國內是上不了youtube的,如果上了VPN,我們還能抓到包麼?其它的http代理呢?(如果不能,上面這個地址我是如何獲得的呢?)

(注:我未繼續深入測試,不要受我思想的約束)

七、總結

上帝關上了一扇門,卻開啟了一扇窗。

在新的年代,需要新的技術,更需要新的思路。


相關文章