Android 应用通过代码实现拦截本应用内的所有网络请求流量,同时可以修改请求信息,例如请求头,请求体,然后转发的第三方 jar 包或者其他的方法,求推荐。

2017-02-24 09:20:44 +08:00
 qw30716
目前我经过查找资料发现:有三种方式可以实现拦截某个 APP 网络请求,但是都有各种局限性。
1.Android 内置 VPNservice :通过虚拟网卡实现拦截,有系统弹窗提示,用户点击确认才生效;
2.tcpdump 等 jar 包:需要 root 手机才能实现抓包功能
3.代理拦截:基于 Netty 、 browsermob-proxy 拦截,但是需要手动设置 WiFi 代理,如果为 3G , 4G 网络则不可行
所以我想请教一下,各位还有没有其他方式拦截网络请求,不需要用户操作,不需要手机 root ,不需要手动设置代理等限制的方法?或者给个思路也行
11053 次点击
所在节点    程序员
17 条回复
ahjsrhj
2017-02-24 09:32:10 +08:00
okhttp 的话可以使用拦截器, https://github.com/jgilfelt/chuck
但是好像不符合你的需求- -
感觉你这种需求用途很微妙啊
qw30716
2017-02-24 09:35:14 +08:00
感谢你的回答,但是不能使用任何请求框架拦截,用途其实很正当的,主要用于加固的时候拦截网络流量
honeycomb
2017-02-24 09:38:06 +08:00
facebook 前两天开源了一个调试框架,据说可以绕过证书绑定,可以看看。
figofuture
2017-02-24 09:39:51 +08:00
okhttp
qw30716
2017-02-24 09:39:59 +08:00
@honeycomb 什么开源框架,名称是啥?
qw30716
2017-02-24 09:43:50 +08:00
其实我的意思是不管你使用什么请求框架,例如 okhttp 也行,我通过一些第三方 jar 或者直接在底层 socket 方法拦截,然后拦截到 http 请求,就可以修改请求头,请求体信息,一些网络嗅探 APP 的原理
LancerXin
2017-02-24 10:12:27 +08:00
或许可以尝试用反射修改 sdk 某些关键类实现,比如 HttpUrlConnection Socket 等..

只是个思路...
qw30716
2017-02-24 10:44:37 +08:00
@LancerXin 如果可以直接修改 socket 的话是比较好的,我觉得如果有方法,应该是比较偏向于底层,从网卡驱动入手
xingda920813
2017-02-24 13:47:32 +08:00
OkHttp 拦截器. Request req = chain.request(); Response res = chain.proceed(req); 可以自由的对 Request 和 Response 进行修改.
heiher
2017-02-24 13:57:34 +08:00
能够有 root 权限的话还是用 iptables REDIRECT 来做,我就是用它来做全局或按应用的透明代理服务。
yrom
2017-02-24 14:00:36 +08:00
我猜应该没有,或者有很难绕过的限制,因为如果有的话,各种统计类的 Android 第三方 sdk 早带了。。
youxiachai
2017-02-24 14:01:35 +08:00
感觉 lz 是想做改包....

静默拦截网络请求....想想就带感...
heiher
2017-02-24 14:02:02 +08:00
https://github.com/heiher/hev-socks5-tproxy

这是透明代理实现的代码,它创建一个 tcp socket 用于接受重定向过来的 tcp 连接,一个 udp socket 接收重定向过来的 dns 请求,加上 socks5 协议头,转发 socks5 server 。拿走,不谢。:)
qw30716
2017-02-24 14:14:32 +08:00
静默拦截网络请求,其实也是差不多这个意思了,我刚发现有个应用叫安信手机证券很牛逼,你自己设置了代理以后根本就抓不到这个 APP 请求时的包,它直接抓到了一个 127.0.0.1 的代理,大家有兴趣可以研究一下
qw30716
2017-02-24 14:39:36 +08:00
@heiher 你的这个透明代理实现的代码是需要 root 手机才行吗
heiher
2017-02-24 14:46:11 +08:00
@qw30716 是的,不用 root 也不用 vpn service 能搞定?找到方法也告诉我一下哈。
linhua
2017-02-24 21:07:00 +08:00
首先,你要想清楚,你这个只是针对 HTTP 吗? HTTPS 就是用来防中间人的,你根本就看不到里面的 HTTP 请求。而且有的 APP 根本就不认 WiFi 代理,像 twitter
https://github.com/phuslu/goproxy/issues/1106

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/342806

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX