{"id":15148756,"url":"https://github.com/mezantrop/ts-warp","last_synced_at":"2025-04-06T08:14:30.941Z","repository":{"id":54135656,"uuid":"456527373","full_name":"mezantrop/ts-warp","owner":"mezantrop","description":"Transparent proxy server and traffic wrapper","archived":false,"fork":false,"pushed_at":"2025-03-25T10:10:35.000Z","size":451585,"stargazers_count":114,"open_issues_count":0,"forks_count":8,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-30T07:08:57.259Z","etag":null,"topics":["anticensorship","dpi-bypassing","freebsd","http-proxy","linux","macos","openbsd","proxy","redirector","socks","socks-client","socks-proxy","socks-server","socks5","socks5-proxy","ssh-proxy","transparent-proxy","wsl2"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mezantrop.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-02-07T13:55:55.000Z","updated_at":"2025-03-25T10:10:39.000Z","dependencies_parsed_at":"2023-02-14T09:30:45.295Z","dependency_job_id":"4d9b1214-99e8-4d32-942d-3bbc3d045680","html_url":"https://github.com/mezantrop/ts-warp","commit_stats":{"total_commits":36,"total_committers":1,"mean_commits":36.0,"dds":0.0,"last_synced_commit":"33c045917046f48100a64863de7b25603b96f444"},"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mezantrop%2Fts-warp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mezantrop%2Fts-warp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mezantrop%2Fts-warp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mezantrop%2Fts-warp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mezantrop","download_url":"https://codeload.github.com/mezantrop/ts-warp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247451667,"owners_count":20940944,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anticensorship","dpi-bypassing","freebsd","http-proxy","linux","macos","openbsd","proxy","redirector","socks","socks-client","socks-proxy","socks-server","socks5","socks5-proxy","ssh-proxy","transparent-proxy","wsl2"],"created_at":"2024-09-26T13:22:41.443Z","updated_at":"2025-04-06T08:14:30.919Z","avatar_url":"https://github.com/mezantrop.png","language":"C","funding_links":["https://www.buymeacoffee.com/mezantrop"],"categories":["C"],"sub_categories":[],"readme":"# TS-Warp\n\n[![CodeQL](https://github.com/mezantrop/ts-warp/actions/workflows/codeql.yml/badge.svg)](https://github.com/mezantrop/ts-warp/actions/workflows/codeql.yml)\n[![C/C++ CI - macOS](https://github.com/mezantrop/ts-warp/actions/workflows/c-cpp-macos.yml/badge.svg)](https://github.com/mezantrop/ts-warp/actions/workflows/c-cpp-macos.yml)\n[![C/C++ CI - Ubuntu](https://github.com/mezantrop/ts-warp/actions/workflows/c-cpp-ubuntu.yml/badge.svg)](https://github.com/mezantrop/ts-warp/actions/workflows/c-cpp-ubuntu.yml)\n\n## Transparent proxy server and traffic wrapper\n\n\u003ca href=\"https://www.buymeacoffee.com/mezantrop\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/default-orange.png\" alt=\"Buy Me A Coffee\" height=\"41\" width=\"174\"\u003e\u003c/a\u003e\n\n### Features\n\n- Proxy services with TCP-traffic redirection to external Socks4/5, HTTP (CONNECT) and SSH2* proxy servers\n  - Transparent firewall-based traffic redirector\n  - Internal Socks and HTTP proxy server\n\n  \\* Requires [libssh2](https://libssh2.org) library\n\n- Supported platforms:\n\n  | OS           | PF                   | ip/nftables          |\n  |--------------|----------------------|----------------------|\n  | macOS        | :white_check_mark:   | :white_large_square: |\n  | FreeBSD      | :white_check_mark:   | :white_large_square: |\n  | OpenBSD      | :white_check_mark:   | :white_large_square: |\n  | Linux        | :white_large_square: | :white_check_mark:   |\n  | Windows WSL2 | :white_large_square: | :white_check_mark:   |\n\n- Main features\n  | Transparent proxy                      | Socks5             | Socks4               | HTTP*              | SSH2                   |\n  |----------------------------------------|--------------------|----------------------|--------------------|------------------------|\n  | Proxy protocol                         | :white_check_mark: | :white_check_mark:   | :white_check_mark: | :white_check_mark:     |\n  | Proxy chains                           | :white_check_mark: | :white_check_mark:   | :white_check_mark: | :white_large_square:** |\n  | Proxy workload balancer                | :white_check_mark: | :white_check_mark:   | :white_check_mark: | :white_check_mark:     |\n  | Authentication                         | :white_check_mark: | :white_large_square: | :white_check_mark: | :white_check_mark:     |\n  | IPv6 stack support                     | :white_check_mark: | :white_large_square: | :white_check_mark: | :white_check_mark:     |\n  | Remote names resolution: [NS-Warp](ns) | :white_check_mark: | :white_large_square: | :white_check_mark: | :white_check_mark:     |\n\n  \\* HTTP Connect method is implemented \u003cbr\u003e\n  \\** Only one SSH2 proxy server allowed per chain\n\n  | Internal proxy                         | Socks5               | HTTP*                |\n  |----------------------------------------|----------------------|----------------------|\n  | Proxy protocol                         | :white_check_mark:   | :white_check_mark:   |\n  | Proxy chains                           | :white_check_mark:   | :white_check_mark:   |\n  | Proxy workload balancer                | :white_check_mark:   | :white_check_mark:   |\n  | Authentication                         | :white_large_square: | :white_large_square: |\n  | IPv6 stack support                     | :white_check_mark:   | :white_check_mark:   |\n  | Remote names resolution                | :white_check_mark:   | :white_check_mark:   |\n\n  \\* HTTP Connect method is implemented\n\n- Miscellaneous features\n  - [X] Deep Packet Inspections bypass (обход замедления/блокировки, например, YouTube)\n  - [x] Simple configuration structure as INI-like file\n  - [x] Password encoding (obfuscation) in configuration files\n  - [x] Daemon mode\n  - [x] Front-end UI\n  - [x] Installation script (via Makefile)\n\n- TODO\n  - [ ] UDP support\n  - [ ] Socks4a protocol support (?)\n  - [ ] OS specific `select` alternatives: `epol` / `kqueue`\n  - [ ] Faster NS-Warp\n  - [ ] Documentation\n\n### Changelog\n\n**Attention! To incorporate HTTP proxy service, `socks_*` variables in `ts-warp.ini` are replaced by `proxy_*` ones.\nThe deprecated variables will be eventually removed in the further releases**\n\nSee it [here](CHANGELOG.md)\n\n### Quick Installation\n\n```sh\n# If SSH2 proxy support is required, install https://libssh2.org library first, then download ts-warp:\n\ngit clone https://github.com/mezantrop/ts-warp ts-warp.src \u0026\u0026 cd ts-warp.src\n\n# `configure` script understands a number of environmental variables. You can force setting values to:\n# `PREFIX`, `WITH_TCP_NODELAY`, `WITH_LIBSSH2`, `USER`, otherwise they will be auto-detected.\n\n./configure \u0026\u0026 make \u0026\u0026 sudo make install clean\n\n# Copy and edit configuration files\nsudo cp /usr/local/etc/ts-warp.ini.sample /usr/local/etc/ts-warp.ini \u0026\u0026 sudo vi /usr/local/etc/ts-warp.ini\n\n# on *BSD and macOS\nsudo cp /usr/local/etc/ts-warp_pf.conf.sample /usr/local/etc/ts-warp_pf.conf\nsudo vi /usr/local/etc/ts-warp_pf.conf\n\n# on Linux with nftables\nsudo cp /usr/local/etc/ts-warp_nftables.sh.sample /usr/local/etc/ts-warp_nftables.sh\nsudo vi /usr/local/etc/ts-warp_nftables.sh\n\n# on Linux with iptables\nsudo cp /usr/local/etc/ts-warp_iptables.sh.sample /usr/local/etc/ts-warp_iptables.sh\nsudo vi /usr/local/etc/ts-warp_iptables.sh\n\n# on Windows WSL2 (Ubuntu) with iptables; Required packages for CLI: clang/gcc, make. For GUI-Warp: python3-tk\nwsl --set-default-version 2\n\nsudo cp /usr/local/etc/ts-warp_iptables.sh.sample /usr/local/etc/ts-warp_iptables.sh\nsudo vi /usr/local/etc/ts-warp_iptables.sh\n```\n\n### Usage\n\nYou can control, e.g. start, stop `ts-warp` daemon using `ts-warp.sh` script. Under root privileges or `sudo` run:\n\n```sh\n# \u003cPREFIX\u003e/etc/ts-warp.sh start|stop|reload|restart [options]\n# \u003cPREFIX\u003e/etc/ts-warp.sh status\n```\n\nFor example:\n\n```sh\nsudo /usr/local/etc/ts-warp.sh start\nsudo /usr/local/etc/ts-warp.sh stop\n```\n\nAfter succesfull start, TS-Warp transparently redirects traffic according to the configuration specified in\n`ts-warp.ini` and firewall rules. Also, TS-Warp spawns Socks5 proxy server at `localhost:10800` and HTTPS proxy\n(CONNECT method) at `localhost:8080`.\n\n### Low-level ts-warp daemon usage\n\nAll the ts-warp command-line options can be listed using `$ ts-warp -h`:\n\n```sh\nUsage:\n  ts-warp -T IP:Port -S IP:Port -H IP:Port -c file.ini -l file.log -v 0-4 -t file.act -d -p file.pid -f -u user -h\n\nVersion:\n  TS-Warp-X.Y.Z\n\nAll parameters are optional:\n  -T IP:Port      Local IP address and port for incoming Transparent requests\n  -S IP:Port      Local IP address and port for internal Socks server\n  -H IP:Port      Local IP address and port for internal HTTP server\n\n  -l file.log     Main log filename\n  -v 0..4         Log verbosity level: 0 - off, default: 3\n  -t file.act     Active connections and traffic log\n\n  -d              Daemon mode\n  -p file.pid     PID filename\n  -f              Force start\n\n  -u user         A user to run ts-warp, default: nobody\n\n  -h              This message\n```\n\n `ts-warp.sh` respects `ts-warp` daemon options. For example, to temporary enable more verbose logs, restart `ts-warp`\n with `-v 4` option:\n\n```sh\nsudo /usr/local/etc/ts-warp.sh restart -v 4\n```\n\n`ts-warp` understands several signals:\n\n- `SIGHUP` signal as the command to reload configuration\n- `SIGUSR1` to display current configuration state. Note, load balancer can dynamically reorder configuration sections\n- `SIGUSR2` to show active clients connection status and traffic stats\n- `SIGINT` to stop the daemon.\n\nUse `ts-pass` to encode passwords if requred. See examples in [ts-warp.ini](examples/ts-warp.ini)\n\n### GUI front-end\n\n![gui-warp.py](gui/gui-warp_py.jpg)\n\nThe GUI front-end application to control `ts-warp` daemon can be installed from the `gui` directory:\n\n```sh\ncd gui\nsudo make install\n```\n\n*Optionally*. Set `PREFIX`, to use a different installation target in the `make` command above:\n\n``` sh\nsudo make install PREFIX=/path/to/install\n```\n\nTo start the GUI run:\n\n``` sh\nsudo -b \u003cPREFIX\u003e/bin/gui-warp.py\n```\n\nNote, Python 3 interpreter with `tkinter` support is required to run the GUI frontend.\n\n### macOS All-in-one TS-Warp + GUI-Warp App\n\nCheck [releases](https://github.com/mezantrop/ts-warp/releases) and download macOS standalone precompiled application.\nRead related [README.md](gui/ports/macOS/README.md) for information and instructions.\n\n### Experimental Deep Packet Inspections bypass (обход замедления/блокировки, например, YouTube)\n\nAccording to [SpoofDPI](https://github.com/xvzc/SpoofDPI?tab=readme-ov-file#https) project, sending the first 1 byte\nof a request to the server, and then sending the rest of the data can help to bypass Deep Packet Inspections of HTTPS.\n\nTo bypass DPI, start TS-Warp with `-D 0..512` flag, e.g., `sudo /usr/local/etc/ts-warp.sh start -D 2` to enable packet\nfragmentation.\n\nFor the `GUI-warp`, edit `~/ts-warp/etc/gui-warp.ini` to add `-D` to `daemon_options` variable, e.g: `daemon_options = -D 2`\n\nThen use `TS-Warp` normally in `Transparent` mode, or point your browser to `TS-Warp` Internal `HTTP(S)` proxy at\n`127.0.0.1:8080` or `SOCKS5` proxy at `127.0.0.1:7080`.\n\n### Contacts\n\nNot so early stage of development, yet don't expect everything to work properly. If you have an idea, a question,\nor have found a problem, do not hesitate to open an [issue](https://github.com/mezantrop/ts-warp/issues/new/choose)\nor mail me: Mikhail Zakharov \u003czmey20000@yahoo.com\u003e\n\nMany thanks to [contributors](CONTRIBUTORS.md) of the project\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmezantrop%2Fts-warp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmezantrop%2Fts-warp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmezantrop%2Fts-warp/lists"}