[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-4217":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":18,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":31,"readmeContent":32,"aiSummary":33,"trendingCount":16,"starSnapshotCount":16,"syncStatus":34,"lastSyncTime":35,"discoverSource":36},4217,"gnirehtet","Genymobile\u002Fgnirehtet","Genymobile","Gnirehtet provides reverse tethering for Android","",null,"Java",7696,714,127,302,0,3,15,89,39.56,"Apache License 2.0",false,"master",true,[26,27,28,29,30],"android","java-8","reverse-tethering","rust","vpn","2026-06-12 02:01:00","# Gnirehtet (v2.5.1)\n\nThis project provides **reverse tethering** over `adb` for Android: it\nallows devices to use the internet connection of the computer they are plugged\non. It does not require any _root_ access (neither on the device nor on the\ncomputer). It works on _GNU\u002FLinux_, _Windows_ and _Mac OS_.\n\nCurrently, it relays [TCP] and [UDP] over [IPv4] traffic, but it does not\nsupport [IPv6] (yet?).\n\n[TCP]: https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTransmission_Control_Protocol\n[UDP]: https:\u002F\u002Ffr.wikipedia.org\u002Fwiki\u002FUser_Datagram_Protocol\n[IPv4]: https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIPv4\n[IPv6]: https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIPv6\n\n_**This project is not actively maintained anymore, only major blockers (like\nbuild issues) are fixed. It should still work, though.**_\n\n\n## Flavors\n\nTwo implementations of _Gnirehtet_ are available:\n - one in **Java**;\n - one in **Rust**.\n\n\n### Which one to choose?\n\nUse the **Rust** implementation. The native binary consumes less CPU and memory,\nand does not require a _Java_ runtime environment.\n\nThe relay server of _Gnirehtet_ was initially only implemented in Java. As a\nbenefit, the same \"binary\" runs on every platform having _Java 8_ runtime\ninstalled. It is still maintained to provide a working alternative in case of\nproblems with the Rust version.\n\n\n## Requirements\n\nThe Android application requires at least API 21 (Android 5.0).\n\nFor the _Java_ version only, _Java 8_ (JRE) is required on your computer. On\nDebian-based distros, install the package `openjdk-8-jre`.\n\n### adb\n\nYou need a recent version of [adb] (where `adb reverse` is implemented, it\nworks with 1.0.36).\n\nIt is available in the [Android SDK platform tools][platform-tools].\n\nOn Debian-based distros, you can alternatively install the package\n`android-tools-adb`.\n\nOn Windows, if you need `adb` only for this application, just download the\n[platform-tools][platform-tools-windows] and extract the following files to the\n_gnirehtet_ directory:\n - `adb.exe`\n - `AdbWinApi.dll`\n - `AdbWinUsbApi.dll`\n\nMake sure you [enabled adb debugging][enable-adb] on your device(s).\n\n[adb]: https:\u002F\u002Fdeveloper.android.com\u002Fstudio\u002Fcommand-line\u002Fadb.html\n[enable-adb]: https:\u002F\u002Fdeveloper.android.com\u002Fstudio\u002Fcommand-line\u002Fadb.html#Enabling\n[platform-tools]: https:\u002F\u002Fdeveloper.android.com\u002Fstudio\u002Freleases\u002Fplatform-tools.html\n[platform-tools-windows]: https:\u002F\u002Fdl.google.com\u002Fandroid\u002Frepository\u002Fplatform-tools-latest-windows.zip\n\n\n## Get the app\n\n### Homebrew\n\nIf you use [Homebrew](https:\u002F\u002Fbrew.sh\u002F), getting up and running is very quick.\nTo install the Rust version:\n\n```\nbrew install gnirehtet\n```\n\n### Download\n\nDownload the [latest release][latest] in the flavor you want.\n\n[latest]: https:\u002F\u002Fgithub.com\u002FGenymobile\u002Fgnirehtet\u002Freleases\u002Flatest\n\n\n#### Rust\n\n - **Linux:** [`gnirehtet-rust-linux64-v2.5.1.zip`][direct-rust-linux64]  \n   (SHA-256: _dee55499ca4fef00ce2559c767d2d8130163736d43fdbce753e923e75309c275_)\n - **Windows:** [`gnirehtet-rust-win64-v2.5.1.zip`][direct-rust-win64]  \n   (SHA-256: _7f5b1063e7895182aa60def1437e50363c3758144088dcd079037bb7c3c46a1c_)\n - **MacOS:** [`gnirehtet-rust-macos64-v2.2.1.zip`][direct-rust-macos64]\n   _(old release)_  \n   (SHA-256: _902103e6497f995e1e9b92421be212559950cca4a8b557e1f0403769aee06fc8_)\n\n[direct-rust-linux64]: https:\u002F\u002Fgithub.com\u002FGenymobile\u002Fgnirehtet\u002Freleases\u002Fdownload\u002Fv2.5.1\u002Fgnirehtet-rust-linux64-v2.5.1.zip\n[direct-rust-win64]: https:\u002F\u002Fgithub.com\u002FGenymobile\u002Fgnirehtet\u002Freleases\u002Fdownload\u002Fv2.5.1\u002Fgnirehtet-rust-win64-v2.5.1.zip\n[direct-rust-macos64]: https:\u002F\u002Fgithub.com\u002FGenymobile\u002Fgnirehtet\u002Freleases\u002Fdownload\u002Fv2.2.1\u002Fgnirehtet-rust-macos64-v2.2.1.zip\n\nThen extract it.\n\nThe Linux and MacOS archives contain:\n - `gnirehtet.apk`\n - `gnirehtet`\n\nThe Windows archive contains:\n - `gnirehtet.apk`\n - `gnirehtet.exe`\n - `gnirehtet-run.cmd`\n\n\n#### Java\n\n - **All platforms:** [`gnirehtet-java-v2.5.1.zip`][direct-java]  \n   (SHA-256: _816748078fa6a304600a294a13338a06ac778bcc0e57b62d88328c7968ad2d3a_)\n\n[direct-java]: https:\u002F\u002Fgithub.com\u002FGenymobile\u002Fgnirehtet\u002Freleases\u002Fdownload\u002Fv2.5.1\u002Fgnirehtet-java-v2.5.1.zip\n\nThen extract it. The archive contains:\n - `gnirehtet.apk`\n - `gnirehtet.jar`\n - `gnirehtet`\n - `gnirehtet.cmd`\n - `gnirehtet-run.cmd`\n\n\n## Run (simple)\n\n_Note: On Windows, replace `.\u002Fgnirehtet` by `gnirehtet` in the following\ncommands._\n\nThe application has no UI, and is intended to be controlled from the computer\nonly.\n\nIf you want to activate reverse tethering for exactly one device, just execute:\n\n    .\u002Fgnirehtet run\n\nReverse tethering remains active until you press _Ctrl+C_.\n\nOn Windows, for convenience, you can double-click on `gnirehtet-run.cmd`\ninstead (it just executes `gnirehtet run`, without requiring to open a\nterminal).\n\nThe very first start should open a popup to request permission:\n\n![request](assets\u002Frequest.jpg)\n\nA \"key\" logo appears in the status bar whenever _Gnirehtet_ is active:\n\n![key](assets\u002Fkey.png)\n\nAlternatively, you can enable reverse tethering for all connected devices\n(present and future) by calling:\n\n    .\u002Fgnirehtet autorun\n\n\n## Run\n\nYou can execute the actions separately (it may be useful if you want to reverse\ntether several devices simultaneously).\n\nStart the relay server and keep it open:\n\n    .\u002Fgnirehtet relay\n\nInstall the `apk` on your Android device:\n\n    .\u002Fgnirehtet install [serial]\n\nIn another terminal, for each client, execute:\n\n    .\u002Fgnirehtet start [serial]\n\nTo stop a client:\n\n    .\u002Fgnirehtet stop [serial]\n\nTo reset the tunnel (useful to get the connection back when a device is\nunplugged and plugged back while gnirehtet is active):\n\n    .\u002Fgnirehtet tunnel [serial]\n\nThe _serial_ parameter is required only if `adb devices` outputs more than one\ndevice.\n\nFor advanced options, call `.\u002Fgnirehtet` without arguments to get more details.\n\n\n## Run manually\n\nThe `gnirehtet` program exposes a simple command-line interface that executes\nlower-level commands. You can call them manually instead.\n\nTo start the relay server:\n\n    .\u002Fgnirehtet relay\n\nTo install the apk:\n\n    adb install -r gnirehtet.apk\n\nTo start a client:\n\n    adb reverse localabstract:gnirehtet tcp:31416\n    adb shell am start -a com.genymobile.gnirehtet.START \\\n        -n com.genymobile.gnirehtet\u002F.GnirehtetActivity\n\nTo stop a client:\n\n    adb shell am start -a com.genymobile.gnirehtet.STOP \\\n        -n com.genymobile.gnirehtet\u002F.GnirehtetActivity\n\n\n## Environment variables\n\n`ADB` defines a custom path to the `adb` executable:\n\n```bash\nADB=\u002Fpath\u002Fto\u002Fmy\u002Fadb .\u002Fgnirehtet run\n```\n\n`GNIREHTET_APK` defines a custom path to `gnirehtet.apk`:\n\n```bash\nGNIREHTET_APK=\u002Fusr\u002Fshare\u002Fgnirehtet\u002Fgnirehtet.apk .\u002Fgnirehtet run\n```\n\n\n## Why _gnirehtet_?\n\n    rev \u003C\u003C\u003C tethering\n\n(in _Bash_)\n\n\n## Developers\n\nRead the [developers page].\n\n[developers page]: DEVELOP.md\n\n\n## Licence\n\n    Copyright (C) 2017 Genymobile\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n## Articles\n\n- [Introducing “gnirehtet”, a reverse tethering tool for Android][medium-1] ([French version][blog-1])\n- [Gnirehtet 2: our reverse tethering tool for Android now available in Rust][medium-2]\n- [Gnirehtet rewritten in Rust][blog-2-en] ([French version][blog-2-fr])\n\n[medium-1]: https:\u002F\u002Fmedium.com\u002F@rom1v\u002Fgnirehtet-reverse-tethering-android-2afacdbdaec7\n[blog-1]: https:\u002F\u002Fblog.rom1v.com\u002F2017\u002F03\u002Fgnirehtet\u002F\n[medium-2]: https:\u002F\u002Fmedium.com\u002Fgenymobile\u002Fgnirehtet-2-our-reverse-tethering-tool-for-android-now-available-in-rust-999960483d5a\n[blog-2-en]: https:\u002F\u002Fblog.rom1v.com\u002F2017\u002F09\u002Fgnirehtet-rewritten-in-rust\u002F\n[blog-2-fr]: https:\u002F\u002Fblog.rom1v.com\u002F2017\u002F09\u002Fgnirehtet-reecrit-en-rust\u002F\n","Gnirehtet 是一个为 Android 设备提供反向网络共享的工具，允许设备通过 ADB 连接使用计算机的互联网连接。项目核心功能是无需 root 权限即可实现 TCP 和 UDP over IPv4 的流量转发，支持 GNU\u002FLinux、Windows 和 Mac OS 平台。目前提供了 Java 和 Rust 两种实现版本，推荐使用性能更优且资源消耗更低的 Rust 版本。该项目适用于需要在没有无线网络或移动数据的情况下让 Android 设备访问互联网的场景，如开发者测试环境或是临时解决网络问题时。尽管项目不再积极维护，但仍然可以正常使用。",2,"2026-06-11 02:59:04","top_language"]