{"id":13775650,"url":"https://github.com/realgam3/pymultitor","last_synced_at":"2026-02-25T23:17:34.272Z","repository":{"id":10885756,"uuid":"13176005","full_name":"realgam3/pymultitor","owner":"realgam3","description":"PyMultitor - Python Multi Threaded Tor Proxy","archived":false,"fork":false,"pushed_at":"2024-02-25T20:40:50.000Z","size":2557,"stargazers_count":573,"open_issues_count":3,"forks_count":108,"subscribers_count":29,"default_branch":"master","last_synced_at":"2025-05-04T07:35:30.903Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"rackspace/gophercloud","license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/realgam3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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}},"created_at":"2013-09-28T15:55:49.000Z","updated_at":"2025-04-24T23:20:07.000Z","dependencies_parsed_at":"2024-01-01T12:20:23.830Z","dependency_job_id":"2edb2bb3-c5f5-4509-b12a-99d854f62dc9","html_url":"https://github.com/realgam3/pymultitor","commit_stats":{"total_commits":31,"total_committers":5,"mean_commits":6.2,"dds":0.3548387096774194,"last_synced_commit":"29f55b1af4e48eae1ed31d44b1475d03d8f89d55"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/realgam3%2Fpymultitor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/realgam3%2Fpymultitor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/realgam3%2Fpymultitor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/realgam3%2Fpymultitor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/realgam3","download_url":"https://codeload.github.com/realgam3/pymultitor/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253540158,"owners_count":21924518,"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":[],"created_at":"2024-08-03T17:01:44.603Z","updated_at":"2026-02-25T23:17:34.259Z","avatar_url":"https://github.com/realgam3.png","language":"Python","funding_links":[],"categories":["\u003ca id=\"6e80463404d46f0493cf6e84597e4b5c\"\u003e\u003c/a\u003e工具","Python"],"sub_categories":["\u003ca id=\"e99ba5f3de02f68412b13ca718a0afb6\"\u003e\u003c/a\u003eTor\u0026\u0026\u0026Onion\u0026\u0026洋葱"],"readme":"## PyMultiTor\n\n[![PyPI version](https://img.shields.io/pypi/v/pymultitor)](https://pypi.org/project/pymultitor/)\n[![Downloads](https://pepy.tech/badge/pymultitor)](https://pepy.tech/project/pymultitor)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pymultitor)  \n\nPython Multi Threaded Tor Proxy,  \nDid you ever want to be at two different places at the same time?  \nWhen I asked myself this question, I actually started developing this solution in my mind.  \nWhile performing penetration tests there are often problems caused by security devices that block the \"attacking\" IP.  \nThis really annoyed me, so I wrote a script to supply a solution for this problem.  \nWith a large number of IP addresses performing the attacks, better results are guaranteed - especially when attempting\nattacks to bypass Web Application Firewalls, Brute-Force type attacks and many more.\n\n[Blackhat Asia] https://www.blackhat.com/asia-17/arsenal.html#pymultitor  \n[Owasp-IL Presentation] https://www.owasp.org/images/3/3d/OWASPIL-2016-02-02_PyMultiTor_TomerZait.pdf  \n[DigitalWhisper Article (Hebrew)] http://www.digitalwhisper.co.il/files/Zines/0x2E/DW46-3-PyMultitor.pdf\n\n![Logo](https://raw.githubusercontent.com/realgam3/pymultitor/master/assets/img/pymultitor-logo.png)\n\n## Installation\n\n### Prerequisites\n\n* Python 3.10+.\n* mitmproxy (https://mitmproxy.org/).\n* tor.\n    * On Ubuntu / Kali, `sudo apt install -y tor`\n    * On Centos, `sudo yum install -y tor`\n    * On Fedora, `sudo dnf install -y tor`\n    * On Windows,\n        * download tor expert bundle: https://www.torproject.org/download/tor/\n        * insert tor to your path environment: `{tor-win32-*_path}\\Tor`\n        * if you don't know how remember tor.exe path and use `--tor-cmd` argument on pymultitor (for\n          example: `pymultitor --tor-cmd \"c:\\Pentest\\Web\\tor-win32-0.2.9.9\\Tor\\tor.exe\"`)\n    * On MacOS, `brew install tor`\n\n### From pip\n\n```shell\npip3 install pymultitor\n```\n\n### From Docker\n\n```shell\ndocker pull realgam3/pymultitor\n```\n\n### From Source\n\n```shell\ngit clone https://github.com/realgam3/pymultitor.git\ncd pymultitor\n\n# Install python dependencies.\n# Depending on your setup, one or both of these may require sudo.\npip3 install -r requirements.txt\npython3 setup.py install\n\n# Confirm that everything works\npymultitor --help\n```\n\nBug reports on installation issues are welcome!\n\n## Usage\n\n### Basic Usage\n\n1. Run `pymultitor --on-string \"Your IP Address Blocked\"`.  \n2. On your script use proxy (`http://127.0.0.1:8080`).  \n   When the string `Your IP Address Blocked` will present in the response content, you will exit from another IP address.  \n\n### Docker Usage\n\n1. Run `docker run --rm -p 8080:8080 realgam3/pymultitor --on-string \"Your IP Address Blocked\"`.  \n2. On your script use proxy (`http://127.0.0.1:8080`).  \n   When the string `Your IP Address Blocked` will present in the response content, you will exit from another IP address.  \n\n### API Usage\n\nPyMultiTor provides a REST API for managing proxy identities. You can use the API to change your proxy identity on demand.\n\n#### Authentication\n\nThe API requires authentication using a Bearer token. You can set the token in two ways:\n\n1. **Environment Variable**: Set the `PYMULTITOR_TOKEN` environment variable:\n   ```bash\n   export PYMULTITOR_TOKEN=\"your-secret-token-here\"\n   ```\n   **Note**: If `PYMULTITOR_TOKEN` is not set, PyMultiTor will automatically generate a random token for you.\n\n2. **Command Line**: starting PyMultiTor:\n   ```bash\n   pymultitor\n   ```\n\n#### Endpoints\n\n**Change Identity**\n- **URL**: `/identity`\n- **Method**: `POST`\n\n**Example Usage**:\n```bash\ncurl http://pymultitor/identity -X POST \\\n  --header \"Proxy-Authorization: Bearer {Token}\" \\\n  --proxy http://localhost:8080\n```\n\n**Status**\n- **URL**: `/status`\n- **Method**: `GET`\n\n**Example Usage**:\n```bash\ncurl http://pymultitor/status \\\n  --header \"Proxy-Authorization: Bearer {Token}\" \\\n  --proxy http://localhost:8080\n```\n\n**Note**: Replace `{Token}` with your actual authentication token.\n\n### Command Line Arguments\n\n```shell\npymultitor --help\n```\n\n```text\nusage: pymultitor.py [-h] [-v] [-lh LISTEN_HOST] [-lp LISTEN_PORT] [-s] [-a AUTH] [-i] [-d] [-p PROCESSES] [-c CMD] [-e CONFIG] [-t TIMEOUT] [-r TRIES]\n                     [--request-timeout REQUEST_TIMEOUT] [--on-count ON_COUNT] [--on-string ON_STRING] [--on-regex ON_REGEX] [--on-rst] [--on-status-code [ON_STATUS_CODE ...]]\n                     [--on-timeout]\n\noptions:\n  -h, --help            show this help message and exit\n  -v, --version         show program's version number and exit\n  -lh, --host LISTEN_HOST\n                        proxy listen host. (default: 127.0.0.1)\n  -lp, --port LISTEN_PORT\n                        proxy listen port (default: 8080)\n  -s, --socks           use as socks proxy (not http proxy) (default: False)\n  -a, --auth AUTH       set proxy authentication (format: 'username:pass') (default: )\n  -i, --insecure        insecure ssl (default: False)\n  -d, --debug           Debug Log. (default: False)\n  -p, --tor-processes PROCESSES\n                        number of tor processes in the cycle (default: 2)\n  -c, --tor-cmd CMD     tor cmd (executable path + arguments) (default: tor)\n  -e, --tor-config CONFIG\n                        tor extended json configuration (default: {})\n  -t, --tor-timeout TIMEOUT\n                        timeout in seconds for starting a tor instance; 0 disables timeout (default: 90)\n  -r, --tor-tries TRIES\n                        number tries to start a tor instance before it fails (default: 5)\n  --request-timeout REQUEST_TIMEOUT\n                        timeout in seconds for http requests; 0 disables timeout (default: 0)\n  --on-count ON_COUNT   change ip every x requests (resources also counted) (default: 0)\n  --on-string ON_STRING\n                        change ip when string found in the response content (default: )\n  --on-regex ON_REGEX   change ip when regex found in The response content (default: )\n  --on-rst              change ip when connection closed with tcp rst (default: False)\n  --on-status-code [ON_STATUS_CODE ...]\n                        change ip when one of the specified status codes is returned (default: [])\n  --on-timeout          change ip when request times out (default: False)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frealgam3%2Fpymultitor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frealgam3%2Fpymultitor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frealgam3%2Fpymultitor/lists"}