本文是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代理呢?(如果不能,上面這個地址我是如何獲得的呢?)
(注:我未繼續深入測試,不要受我思想的約束)
七、總結
上帝關上了一扇門,卻開啟了一扇窗。
在新的年代,需要新的技術,更需要新的思路。