首先呢,打開改網站隨便點個直播間,當然要有人發彈幕。
觀察彈幕和請求,發現並沒有很多的請求,那我們看看ws(websocket)
點這個清空記錄然後我們刷新一下頁面
然後發現一堆我們一個一個觀察
我們可以看到,都是這種二進制的,我們堆棧進去看看
當我們下斷點之後,發現他彈幕就沒了,放行之後彈幕就滾動出來了
跟進去這個函數,這個e參數在這個三元表達式裏面處理我們繼續看
this.protoLink.isWs()
判斷這個,我們看到isWs,那肯定是ws所以我們看第一個
我們看這個函數 onProto,一般有經驗的可以看出來是一種tlv結構,去掉on剩下Proto谷歌開源了一個pb全稱Google Protocol Buffer又簡稱Protobuf,,然後我們就可以一步一步分析下去,只要掌握了堆棧大法,我們就可以爲所欲爲的分析任意網站。
Protocol Buffer
Google Protocol Buffer又簡稱Protobuf,它是一種很高效的結構化數據存儲格式,一般用於結構化數據的串行化,簡單說就是我們常說的數據序列化。這種序列化的協議非常輕便高效,而且是跨平臺的,目前已支持多種主流語言(3.0版本支持C++, JAVA, C#, OC, GO, PYTHON等)。
通過這種方式序列化得到的二進制流數據比傳統的XML, JSON等方式的結果都佔用更小的空間,並且其解析效率也更高,用於通訊協議或數據存儲領域是非常好的。
再者,其使用的方式也非常簡單,我們只需要預先定義好消息(message)的數據格式,然後通過其提供的compiler即可生成對應的文件,在那些文件裏定義和實現了操作這個數據結構所有字段的setter/getter方法,我們只需要使用這些方法設置該數據結構的字段,然後通過序列化方法即可得到需要的結果(二進制數據流)。
,一般彈幕網站都是使用的ws+pb,或者是ws+json