apk使用本地代理接收媒體流

聲明:

    本文是我在工作中遇到的一種apk使用本地代理接收媒體流的方式,這種方式可以更加的安全。這裏與大家分享,希望可以對你有所幫助。

介紹:

1.某apk獲得數據和向player發送數據的方式:

 

a. 使用本地代理的方式訪問服務器,而本地代理就是使用 127.0.0.1 的網址。某apk首先會通過本地代理向服務器發送對應視頻的請求,只不過這裏發送請求的URL中加入了Accept-Encoding:gzip\r\n 關鍵字,這個關鍵字就是向服務器申明自己是可以接收加密數據的。而如果服務器有加密數據將返回客戶端加密的數據,同時會在返回客戶端的請求中加入 Content-Encoding: gzip:表明傳輸的數據是gzip過的數據,而 Content-Length:117:表示gzip壓縮後的數據大小,便於客戶端使用。

b. 本地代理獲得數據後會檢測響應中是不是有 Content-Encoding: gzip,如果有,之後會對數據解碼。並將解碼後的清流推送到播放器進行播放。

而關於HTTP gzip可以看下面的介紹:

https://www.jianshu.com/p/b0a463958b60

https://blog.csdn.net/u010266010/article/details/80331889

 

2.

而通常我們是不能抓到本地(127.0.0.1)的網絡包的,這個時候需要設置纔可以抓獲本地的網絡包。這也是爲什麼我們看log中會是從127.0.0.1中獲得的信息,而網絡包中卻沒有包。所以我們需要使用命令:

 

 tcpdump -s 0 -w eth1.pcap -i any & :抓取含有本地網絡包的命令

-i any : 在採用2.2版本或之後版本內核的Linux 操作系統上, 'any' 這個虛擬網絡接口可被用來接收所有網絡接口上的數據包
-s 0 : 抓取數據包時默認抓取長度爲68字節。加上-S 0 後可以抓到完整的數據包
-w eth1.pcap : 保存成pcap 文件,方便用ethereal(即wireshark)分析

而具體的原因和命令的解析:

原因是本地環回不經過以太網卡。WireShark只能抓取經過電腦網卡的包,由於我是使用localhost或者127.0.0.1進行測試的,流量是不經過電腦網卡的,所以WireShark無法抓包,一番查找之下找到了解決方法。

Windows的解決方法:https://blog.csdn.net/bingjianIT/article/details/54847852

tcpdump使用命令: tcpdump -s 0 -w eth1.pcap -i any & :抓取本地網絡包的命令抓取含有本地網絡包的命令

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章