Gnirehtet:让Android可以通过USB方式上网

项目简介

Gnirehtet是一个非常优秀的项目。该项目为Android设备提供了通过adb方式的反向代理。它允许Android设备通过USB使用所接入计算机的Internet网络,并且计算机和Android设备都不需要任何root权限。它的服务器可以运行在GNU/LinuxWindowsMac OS上,客户端需要运行在Android Lollipop API 21 及以上。

Gnirehtet的当前版本(v2.4)支持通过IPv4传输TCPUDP协议的数据,但不支持IPv6

它是如何工作的

客户端(Client):android设备视为客户端。注册VPN服务,以拦截整个设备的网络流量。

服务器(Relay Server):计算机(WindowsGNU/LinuxMac OS)视为服务器。也称作中继服务器

客户端仅建立与服务器之间的TCP连接;并通过该TCP连接以字节数组的形式交换原生IPv4数据包

客户端和服务器之间的TCP连接在开始反向端口重定向后由adb建立,反向端口重定向命令如下:

1
adb reverse localabstract:gnirehtet tcp:31416

这意味着服务器必须监听31416端口,并且客户端的所有的sockets连接都将由adb重定向到服务器的31416端口上。所以务必确保服务器的31416端口未被其他程序占用,务必确保服务器和客户端之间的USB连接是正常且稳定的。

服务器从连接的客户端上接收IPv4数据包并且根据数据包与对应的目标IP建立sockets连接,然后开始双向中继传输数据。

这就需要服务器在OSI model上以Level 3(客户端一边)Level 5(外网一边)之间传输数据包;

获取更多详情请点我

为什么选择它

当Android设备的WIFI不够稳定时,或想获得更高的下载速度,或其他一些原因;

要求

  • Android Lollipop API 21 及以上;

  • Android设备需要启动adb debugging

  • Java 8的运行时环境,在Debian-based发行版上,需要openjdk-8-jre

  • adb 1.0.36及以上,因为需要adb reverse支持;

  • 服务器的31416端口未被占用且网络正常;

下载

根据需要下载对应的版本,建议下载最新版本:Last Release

Rust 版本

  • Linux: gnirehtet-rust-linux64-XXX.zip
  • Windows: gnirehtet-rust-win64-XXX.zip
  • Mac OS: gnirehtet-rust-macos64-XXX.zip

LinuxMac OS zip文件解压后包含以下文件:

  • gnirehtet.apk:安装在客户端上。
  • gnirehtet:安装在服务器上。

Windows zip文件解压后包含以下文件:

  • gnirehtet.apk:安装在客户端上。
  • gnirehtet.exe:安装在Windows服务器上。
  • gnirehtet-run.cmd:快速启动gnirehtet的批处理文件。

Java 版本

  • 全平台: gnirehtet-java-XXX.zip

解压后包含以下文件:

  • gnirehtet.apk:安装在客户端上。
  • gnirehtet.jar:部署在服务器上
  • gnirehtet:部署在服务器上
  • gnirehtet.cmd:部署在Windows服务器上
  • gnirehtet-run.cmd:快速启动gnirehtet的批处理文件。

运行

在服务器上启动服务,该服务不提供用户界面,以控制台终端的形式呈现:

1
./gnirehtet relay

Ubuntu上使Gnirehtet不占用命令行终端在后台运行:

1
sudo nohup ./gnirehtet relay &

在客户端上安装APK

1
adb install -r gnirehtet.apk

设置反向端口重定向并启动APP,该APP不提供用户界面,以Android Service的方式运行在系统后台:

1
2
adb reverse localabstract:gnirehtet tcp:31416
adb shell am start -a com.genymobile.gnirehtet.START -n com.genymobile.gnirehtet/.GnirehtetActivity

停止客户端:

1
adb shell am start -a com.genymobile.gnirehtet.STOP -n com.genymobile.gnirehtet/.GnirehtetActivity

停止服务器:

1
在gnirehtet的命令行终端上按下Ctrl + C组合键