一、整体方案一句话总结
Gnirehtet + ADB 的本质:
ADB + gnirehtet 是一种“系统级网络接管方案”,通过 Android VPN + TUN 虚拟网卡,拦截平板全部 IP 流量,并通过 ADB 隧道“反向代理”转发至 PC 出口上网。
大白话说就是可以用usb线让平板使用PC端电脑的流量上网。
补:如果大家希望在win7上使用的话可以看另一个文章,gnirehtet当前版本在win7上是用不了的。
https://blog.csdn.net/dusk_star/article/details/159802713?fromshare=blogdetail&sharetype=blogdetail&sharerId=159802713&sharerefer=PC&sharesource=dusk_star&sharefrom=from_linkhttps://blog.csdn.net/dusk_star/article/details/159802713?fromshare=blogdetail&sharetype=blogdetail&sharerId=159802713&sharerefer=PC&sharesource=dusk_star&sharefrom=from_link
二、架构拆解(核心组件)
整个方案实际上是一个双端架构:
(1)Android 端组件
gnirehtet 在 Android 客户端上,基于 Android VpnService
1.1、创建一个 TUN 虚拟网卡(tun0)
1.2、拦截系统所有出站 IP 包(TCP / UDP / DNS 等)
1.3、通过ADB Client,提供与 PC 端的ADB通信通道,以字节流方式传输 IP 包数据
(2)PC 端组件
gnirehtet PC Server,运行在用户态
2.1、从 ADB 通道读取解析 Android 发来的原始 IP 包
2.2、在 PC 上使用真实网络 socket 发送请求
2.3、将返回的数据再封装回 Android
这样子就可以利用PC 本地真实网络,例如:企业内网 / 宽带 / VPN。作为“出口网络”。
本质类似一个“轻量 NAT + 代理”。
(3)ADB(关键通道)
ADB 在这里不是调试工具,而是:数据隧道。使用下面的命令:
adb reverse / forward作用:
- 建立 PC ↔ Android 的 socket 通道
- 类似 USB 上的 TCP 隧道
三、完整数据流(重点)
[Android App] ↓ [VPN Service (Gnirehtet)] ↓ [TUN 虚拟网卡] ↓ [ADB 通道(USB)] ↓ [PC Gnirehtet 程序] ↓ [PC 网络] ↓ [Internet] 返回路径反向走关键点总结:
- Android 侧:只负责“抓 + 转”
- PC 侧:负责“真正联网”
四、核心技术点(你需要掌握的本质)
1、VPNService = 流量入口,负责全局流量劫持
2、TUN 虚拟网卡
TUN 是三层虚拟网卡,拦截的是 IP 包级别。就是把 IP 包读出来,自己解析 TCP / UDP,再转发
3、ADB = 非标准隧道
不是网络,是可靠的、免配置的字节流隧道,用来承载 IP 包的传输。
五、优点分析
- 不需要 Root,Gnirehtet 完全用户态实现
- 部署简单:1、插 USB,2、开 adb,3、启动 gnirehtet
- 对应用完全透明,不需要 App 改代理,不需要改代码,流量类型全覆盖
- 全局代理,不是 HTTP 代理,而是真正的全局流量接管
六、具体操作逻辑
6.1、ADB安装以及环境配置
下载原文件链接可以从这位博主中获取:
https://blog.csdn.net/hellocodecaptain/article/details/152183096?fromshare=blogdetail&sharetype=blogdetail&sharerId=152183096&sharerefer=PC&sharesource=dusk_star&sharefrom=from_linkhttps://blog.csdn.net/hellocodecaptain/article/details/152183096?fromshare=blogdetail&sharetype=blogdetail&sharerId=152183096&sharerefer=PC&sharesource=dusk_star&sharefrom=from_link也可以通过我的链接获取:
通过网盘分享的文件:adb_gnirehte.zip
链接: https://pan.baidu.com/s/18-sheewzgUvvpgsp6hOiVA?pwd=emj5 提取码: emj5 复制这段内容后打开百度网盘手机App,操作更方便哦
6.1.1在电脑中建立一个英文文件夹,从u盘中获取压缩包,解压以后内容如下:
6.1.2 配置环境
(1)找到刚刚的路径,并复制下来
(2)打开控制面板 >系统和安全>系统>高级系统设置。(或者对桌面上的此电脑右键,选择属性,点击里面的高级系统设置)
(3)在弹出窗口中选择“环境变量”。
(4)在“系统变量”区域,下拉找到Path,并双击进去,或者选中path点击编辑
(5)在新窗口点击新建
(6)点击新建后就会出现图中1的输入框,将第一步复制的路径复制进去。2是我复制进去的路径,你们要找到自己的路径复制进去。
(7)最后一步非常关键!!!需要一个一个确定点出去,因为之前打开了多个弹窗,需要将这些弹窗的确定一个一个向外点出去。
(8)验证:在电脑上,按 Win + R 键,输入 cmd 并回车,打开命令提示符。输入adb devices。第一如果没报错就代表没问题了;第二如果没有用usb线连接,在List...下是空的;第三如果下面有数据代表平板连接成功了。
6.2 ADB+Gnirehtet方式
6.2.1 介绍
首先这个方式作用是将平板的网络请求全部都由电脑发送,其实就相当于平板共享了电脑的网络。
6.2.2 操作步骤
当ADB安装并且环境配置好后,其实那个压缩包中就已经放着Gnirehtet工具了,以后每次想要进行链接只需要进行以下步骤:
1、用USB线连接平板和电脑
2、进入“设置” → “关于平板电脑”,连续点击“版本号”7次,直到出现“您已处于开发者模式”的提示。返回设置菜单,找到新出现的“开发者选项”。在“开发者选项”中,找到并开启“USB调试”。系统可能会提示你确认风险,点击“确定”。
3、建议在电脑上,按 Win + R 键,输入 cmd 并回车,打开命令提示符。输入adb devices。检查是否有连接设备。
2.4、双击运行start_gnirehtet.vbs脚本(此脚本会在后台运行,所以界面上不会有任何效果)
2.4.1、第一次运行的时候,平板上会出现一个安装的提示,需要安装此vpn,后续就不用再安装了。如果没有反应,请检查usb线是否是松了,随后执行步骤2.3,检查是否连接成功后,将文件夹中的gnirehtet.apk文件通过微信,企微,u盘等方式传进平板中安装。
2.4.2、如果平板右上角出现一个小钥匙的标志就代表Gnirehtet连接成功了。
2.4.3、如果没有反应,请检查一下usb是否是松了,随后执行步骤2.3,检查是否连接成功,还是没有反应的话,请双击gnirehtet-run.cmd脚本,查看报错原因。
2.5、平板右上角出现小钥匙的标志后代表网络连接成功,就可以正常使用了。
-----------------------------------------下面是其他的方式----------------------------------------------------------
七、ADB+脚本的方式(可代码实现实现)
7.1、介绍
首先这个方式有限制,只能映射监听某个端口,也就是说只能让精康项目的接口访问被监听,从而将请求映射到服务器中。但是这个方式可以集成到go程序中,可以被控制。adb_reverse_setup.bat脚本是启动脚本的,adb_reverse_cleanup.bat是清理脚本配置的。
7.2、操作步骤
2.1、安装ADB以及环境配置(对gnirehtet工具可以删除,也可以保留)
2.2、从压缩包得到以下内容
通过网盘分享的文件:adb_reverse.zip
链接: https://pan.baidu.com/s/1dhxqObFTkgwyvOIEjKNiFA?pwd=4hsm 提取码: 4hsm 复制这段内容后打开百度网盘手机App,操作更方便哦
2.3、用USB线连接平板和电脑
2.4、进入“设置” → “关于平板电脑”,连续点击“版本号”7次,直到出现“您已处于开发者模式”的提示。返回设置菜单,找到新出现的“开发者选项”。在“开发者选项”中,找到并开启“USB调试”。系统可能会提示你确认风险,点击“确定”。
2.5、建议在电脑上,按 Win + R 键,输入 cmd 并回车,打开命令提示符。输入adb devices。检查是否有连接设备。
2.6、双击adb_reverse_setup.bat脚本(平板的精康项目的ip要设置成127.0.0.1),这个时候精康项目就可以正常获取数据以及上传数据了。
2.7、使用完以后,请先拔掉usb线,然后执行adb_reverse_cleanup.bat清理脚本配置。
补:如果大家希望在win7上使用的话可以看另一个文章,gnirehtet当前版本在win7上是用不了的。
https://blog.csdn.net/dusk_star/article/details/159802713?fromshare=blogdetail&sharetype=blogdetail&sharerId=159802713&sharerefer=PC&sharesource=dusk_star&sharefrom=from_linkhttps://blog.csdn.net/dusk_star/article/details/159802713?fromshare=blogdetail&sharetype=blogdetail&sharerId=159802713&sharerefer=PC&sharesource=dusk_star&sharefrom=from_link