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 & :抓取本地网络包的命令抓取含有本地网络包的命令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值